Come configurare smartphone e PC. Portale informativo
  • casa
  • Programmi
  • Ida pro versione russa. IDA Pro - il disassemblatore più potente al mondo

Ida pro versione russa. IDA Pro - il disassemblatore più potente al mondo

Chiunque abbia mai provato a smontare un programma più o meno serio lo sa lo strumento migliore, di IDA Pro, non troverai. Ciò è facilmente spiegabile dalla sua intelligenza (il disassemblatore stesso commenta il codice e riconosce la libreria standard e le funzioni di sistema), l'interattività (è possibile interrompere il processo di disassemblaggio in qualsiasi momento, effettuare modifiche necessarie e poi proseguire), il supporto ad un proprio linguaggio di scripting (IDC), la presenza di plugin (che permettono di risparmiare decine di ore di ricerca) e IDA SDK.
Un debugger, rispetto a un disassemblatore, è spesso definito un “ambiente aggressivo” che richiede partecipazione e riflessione costanti da parte tua e ti costringe a prendere decisioni in ogni momento. Lavorando con IDA Pro puoi facilmente verificare questa affermazione: la comodità e la funzionalità di IDA Pro ti permettono di allontanarti dalla domanda “So cosa voglio, ma non so come ottenerlo” e concentrarti sul problema "come ottenere il risultato desiderato utilizzando le funzionalità di IDA Pro".
Ma l’utilizzo di un disassemblatore non richiede solo conoscenza ed esperienza, ma pone anche una serie di questioni etiche e legali. Non è un segreto che IDA Pro sia uno degli strumenti preferiti dagli hacker, persone che rubano i programmi di altre persone.

Oggi, caro lettore, vorremmo presentare alla tua attenzione un'intervista con il creatore di IDA Pro - Ilfak Guilfanov.

Colloquio

Tana T: Per favore raccontaci un po 'di te.

Ilfak: Allora subito? Beh, ci proverò. Sono andato a scuola in un piccolo villaggio del Tatarstan, poi sono entrato a Mosca Università Statale loro. Lomonosov su Meccanica e Matematica. Molto Luogo interessante, ho avuto la fortuna di studiare circondato da tante persone straordinarie.

I primi due anni sono stati dedicati allo studio e al riapprendimento; ho imparato molte cose nuove per me stessa. Compresi i computer. Ho visto il primo computer della mia vita durante il mio secondo anno. Nella porta leggermente aperta del Laboratorio Metodi computazionali al 13° piano ho visto una TV con le lettere verdi sullo schermo. Sono rimasto molto sorpreso perché fino ad ora i televisori mostravano solo immagini e non testi. Sapevo che da qualche parte c'erano dei computer, erano molto grandi e calcolavano qualcosa, ma di cosa e come ne avevo solo una vaga idea. Quel giorno, quando vidi per la prima volta un terminale collegato a un CM-4 (simile a un PDP-11), la mia vita cambiò letteralmente: i terminali erano molto piccoli, invece dei numeri sullo schermo c'era del testo e tutto era vicino, potresti toccarlo, premere i tasti...

Ho imparato che il testo che cambia così velocemente sullo schermo può essere cambiato, e per questo è necessario scrivere “programmi”. C'è anche una tastiera per inserire le lettere. Puoi fare in modo che il computer calcoli qualsiasi cosa al posto tuo, dalla risoluzione di equazioni quadratiche alla generazione di numeri primi.

Sono stato terribilmente fortunato: alla Facoltà di Meccanica e Matematica abbiamo tenuto un corso di programmazione molto interessante. Questo corso è stato successivamente pubblicato sotto forma di libro di testo dal suo autore, A. G. Kushnirenko, al quale sono grato per le sue eccellenti lezioni e il suo sistema di insegnamento. Con la sua partecipazione è stato scritto sistema speciale affinché gli studenti insegnino le basi della programmazione, esattamente l'essenza, la parte più importante, senza la quale un programmatore non scriverà mai buoni programmi. Sviluppo Software per questo corso è stato tenuto da giovani dipendenti di LVM G.V. Lebedev, A.A. Vedenov, D.V. Varsanofyev, A.G. Dymchenko e altri La base del corso non era la padronanza di un linguaggio di programmazione specifico, ma lo studio delle strutture dati di base e degli algoritmi di base elaborazione delle informazioni. Ancora oggi consiglierei a tutti coloro che vogliono imparare a programmare di iniziare con esso.

Attualmente lavoro presso la società belga Datarescue, il mio compito principale è continuare a lavorare su un disassemblatore, tra gli altri progetti. Ho 2 giovani programmatori come miei assistenti che stanno anche lavorando al progetto. Disponiamo anche di programmi relativi alla sicurezza Internet (crittografia) e al recupero dati.


Ilfak Gilfanov, creatore di IDA

IDA Pro in azione. Tieni presente che vinci nomi Funzioni dell'API sono definiti correttamente



Tana T: IDA Pro può disassemblare il bytecode Java e il codice gestito MSIL?

Ilfak: Ovviamente IDA disassembla i programmi Java o C#. E ciò che è notevole è che può smontare le classi in casi molto difficili, quando file di input era danneggiato ma ancora funzionante.


Tana T: Dove hai acquisito la conoscenza e l'esperienza necessarie per sviluppare questo tipo di programma?

Ilfak: Vi ho già raccontato dei miei studi all'università. L'esperienza è arrivata con il tempo. Il codice, scritto all'inizio degli anni '90, è, secondo me, tutt'altro che perfetto, ma funziona, e quindi per ora non lo riscriveremo.
E conoscenza... Beh, tu stesso sai com'è la vita di un programmatore. Si sa che “bisogna correre tutto il tempo per restare sul posto”. Questo detto, come nessun altro, si applica alla professione di programmatore. Libri sui linguaggi di programmazione, sul design in generale, sulla logica e sui sistemi complessi... Vorrei soprattutto sottolinearli linguaggi funzionali e altre stranezze che non è necessario programmare, ma che è molto utile conoscere. Interessanti i libri sull'architettura (questa è l'architettura classica collegata agli edifici). Forniscono la base: il buon senso secondo cui ogni programma dovrebbe avere una fondazione, una struttura portante, un tetto... Mi piace l'architetto Christopher Alexander con il suo libro The Timeless Way of Building.


Tana T: Script per IDA Pro - grande idea. Come ti è apparso in testa?

Ilfak: Beh, l'idea sembra essere in superficie? Non c'è nessuno grande programma, che non ne permetterebbe la programmazione in un modo o nell'altro. Onestamente, volevo scrivere un pezzo del compilatore (lexical + analisi, come descritto da Aho e Ullman), quindi le sceneggiature si sono rivelate una buona ragione. Oggi non scriverei il mio linguaggio, ma collegherei semplicemente quelli esistenti, ad esempio Perl o Python. Sarebbe più semplice e lo consentirebbe Di più gli utenti scrivono script.


Tana T: È troppo tardi per aggiungere il supporto per questi linguaggi di scripting in IDA? Oppure è poco pratico?

Ilfak: Noi stessi non prevediamo di supportare altre lingue, ma qualsiasi utente IDA può farlo da solo utilizzando l'SDK IDA. ne ho persino sentito parlare opere simili per connettere Python a IDA.


IDA Pro non è solo un disassemblatore, ma anche un debugger. Puoi vederlo guardando l'immagine



Tana T: Puoi parlarci un po' dell'SDK IDA? Ti consente di scrivere tu stesso plugin per IDA?

Ilfak: Sì, utilizzando IDA SDK puoi espandere IDA in ogni modo possibile, aggiungere nuove funzionalità, supporto per nuovi processori e piattaforme. Esistono 3 tipi di moduli aggiuntivi che possono essere sviluppati utilizzando l'SDK: moduli processore, bootloader e plug-in. I moduli processore consentono di disassemblare programmi per nuovi processori. I caricatori sono necessari per supportare nuovi formati di file. Infine, i plugin ti consentono di espandere le funzionalità di IDA: ciò potrebbe aggiungere nuovi comandi o migliorare l'analisi installando gestori di eventi in IDA.

L'API IDA è un'API abbastanza complessa e ricca e ha circa 1000 funzioni. Abbiamo cercato di rendere il database IDA completamente accessibile e di fornire pieno controllo sull'analisi. Naturalmente, un'API così grande non è facile da padroneggiare. Pertanto, l'SDK contiene molti esempi di moduli reali da vita reale. Ancora una volta, puoi trovare esempi online.


Tana T: Senza dubbio IDA Pro è il disassemblatore più potente e flessibile al mondo. Ti fa piacere sapere questo? Cos'è per te IDA Pro: un hobby/hobby o un prodotto professionale?

Ilfak: Tutto è iniziato come hobby nel 1991, solo un hobby per me e per gli amici. E a poco a poco è diventato qualcosa e viene utilizzato da molti specialisti in tutto il mondo. Ora lo è l'IDA programma commerciale e, naturalmente, il mio atteggiamento nei suoi confronti è cambiato. Parallelamente allo sviluppo di IDA, sono interessato a lavorare su altri progetti. Ad esempio, il problema del recupero delle foto da media digitali a prima vista è un compito semplice, ma per ottenere i massimi risultati è stato necessario sviluppare un algoritmo non standard e il programma risultantemigliori risultati(dati provenienti da test di registro del computer). Lavorare su Photorescue ha portato alla nascita di un nuovo hobby: fotografia digitale, quindi anche questo hobby può svilupparsi attività professionale, un giorno...


Tana T: Secondo te, in quali casi un programmatore ha bisogno dell'interattività IDA? Solo quando il codice è crittografato?

Ilfak: Non solo. Penso che l'interattività di IDA sia la sua caratteristica più importante. Innanzitutto, l'utente può modificare immediatamente l'aspetto del programma sullo schermo, il che è molto utile se analisi automatica analizzato la funzione in modo errato. Puoi anche rinominare una funzione o aggiungere un commento e tutte le modifiche saranno immediatamente visibili sullo schermo. In secondo luogo, un sistema di navigazione sviluppato ti consente di trovare la parte del programma che ti interessa senza lunga ricerca secondo l'elenco.

Analizzare i programmi è in qualche modo simile alla risoluzione dei cruciverba: come maggiori informazioni abbiamo, più facile sarà indovinare la parola successiva. Più nomi e commenti significativi sono presenti nell'elenco, più facile sarà comprendere la logica del lavoro e rinominare di conseguenza la funzione analizzata. Iniziamo praticamente con tabula rasa, quando tutte le funzioni, tranne quelle importate, sono denominate sub_1234. Questo nome generato automaticamente non fornisce alcuna informazione su ciò che fa la funzione. Quindi, durante il processo di analisi (preferisco l'analisi dal basso verso l'alto, ovvero le funzioni del file livello inferiore) rinominiamo le funzioni e rendiamo così l'elenco più chiaro e comprensibile. Senza l’interattività questo semplicemente non sarebbe possibile.

Naturalmente l’interattività non è sempre necessaria. Ad esempio, se dobbiamo trovare codice che abbia alcune proprietà in una vasta raccolta di programmi, non vogliamo analizzare tutti i programmi manualmente (immagina di avere una famiglia di programmi con 200 file). In questi casi è meglio lanciare IDA da file batch e affidare l'analisi e il reperimento del codice IDC di interesse a uno script o plugin.


Tana T: A proposito, riguardo ai plugin. Potete dirmi dove posso trovare plugin standard (e qualsiasi altro) per IDA?

Ilfak: Il posto di gran lunga più accessibile è stato il gruppo IDAExtensions su Yahoo. Creando un progetto gestito da CVS su sourceforge, la maggior parte dei plugin sarà probabilmente disponibile da lì.


WinGraph semplifica la creazione della struttura del programma



Tana T: Quale categoria di persone ritieni sia l'utilizzatore principale del tuo prodotto? Pirati/hacker o sviluppatori?

Ilfak: Né l'uno né l'altro. Gli utenti primari sono specialisti in informazioni di sicurezza, aziende antivirus e professionisti della sicurezza in generale.

Naturalmente anche gli sviluppatori e gli hacker utilizzano IDA, ma non sono i principali acquirenti. Generalmente taccio sugli hacker; non voglio assolutamente che IDA venga utilizzato per hackerare programmi e mi batterò contro questo in ogni modo possibile.
Gli sviluppatori non hanno sempre bisogno di un disassemblatore. Tenendo già conto del fatto che molte persone non conoscono il linguaggio assembly, possiamo dire che la maggior parte degli sviluppatori non avrà bisogno di un disassemblatore. L'eccezione sono gli specialisti che lavorano a basso livello: scrittori di driver e sistemi embedded, costretti a lavorare in assemblatore.

Non so perché in Russia si crede che i principali utenti di IDA siano gli hacker. Se l’IDA andasse solo a beneficio di loro, allora smetterei di lavorarci senza pensarci due volte.
Per coloro che utilizzano IDA per l’hacking, dirò questo: “rompere non è costruire”. I programmi, come qualsiasi altro prodotto dell'attività umana, richiedono lavoro: qualcuno deve dedicare tempo e sforzi per inventare, scrivere e testare il programma. Uno scassinatore è come un ladro che vede una cosa che non è sua e se la prende. Non perché fosse così coraggioso e intelligente, è riuscito a hackerare il programma, ma semplicemente perché la protezione era debole o lo sviluppatore non vi ha prestato attenzione. Dov'è il valore qui? Non mi piace affatto che IDA venga utilizzata per tali scopi.


Tana T: Sorge subito una domanda, perché un buon disassemblatore non deve “sgretolarsi” alle primissime tecniche “antidisassemblatore”. Si scopre che sviluppando un disassemblatore e aumentandone l'intelligenza e le funzionalità, si semplifica la vita di un hacker. Contraddizione?

Ilfak: Più simile alla dialettica. IDA rende l'analisi dei programmi più semplice per tutti. Ciò significa che la protezione dei programmi sta diventando più sofisticata e vengono inventati nuovi metodi. Come, ad esempio, ci si avvicina a un sistema che utilizza un approccio di programmazione orientato agli oggetti con scambio di messaggi tra oggetti? Sarà quasi impossibile capire qualcosa dall'elenco, perché... quindi oltre alle chiamate indirette con numeri di messaggio non ci sarà praticamente nulla.


Tana T: Quanto costa oggi IDA Pro ed è possibile acquistarlo da qualche parte in Russia?

Ilfak: Sì, IDA può essere acquistato a Mosca da Heliosoft. Il loro indirizzo [e-mail protetta]. I prezzi esatti possono essere ottenuti dai rappresentanti dell'azienda; vanno da $ 266 a 795 a seconda della versione specifica.


Tana T: Cosa sono requisiti di sistema IDA? Parlando del PC IBM, quali sistemi operativi supporta?

Ilfak: Le prime versioni di IDA erano progettate per funzionare sotto MS DOS con 640KB di memoria, quindi durante la progettazione del programma ho preferito soluzioni che non richiedessero molta memoria o un processore veloce. Ora, ovviamente, non è realistico gestire l'IDA su tali basi poca memoria, ma qualsiasi moderno andrà bene un computer. Come più memoria e con cosa processore più veloce, meglio è, ovviamente.

IDA funziona sotto MS Windows (qualsiasi versione), MS DOS, OS/2. La stragrande maggioranza degli utenti lavora con MS Windows, quindi non siamo nemmeno sicuri che abbia senso continuare a supportare altri sistemi. Se qualcuno ha qualche idea in merito, può inviare un'e-mail ( [e-mail protetta]), saremo lieti di ascoltare argomenti a favore di questi sistemi.
Mentre IDA può funzionare gestione di tre sistemi operativi, il numero di piattaforme per le quali può disassemblare i file è praticamente illimitato. Dai un nome a quasi tutti i moderni sistema operativo e si scopre che IDA sarà in grado di analizzare i file eseguibili. Non ricordo più il numero esatto di processori supportati da IDA, ma so che sono più di 32: qualche anno fa ho dovuto espandere la maschera di bit per la lista dei processori (prima era ulong, ora ulonglong, Spero che duri cinque anni).


Tana T: In che direzione stai attualmente migliorando il tuo disassemblatore? Stai aggiungendo il supporto per nuovi processori o migliorando la funzionalità?

Ilfak: Aggiungiamo costantemente nuovi processori e miglioriamo la funzionalità. Secondo me, oggi IDA ha quasi tutto ciò di cui hai bisogno per l'analisi dei programmi, ad eccezione di una cosa fondamentale: l'analisi dei flussi di dati e le capacità che derivano da questa analisi. Potremmo implementare questa analisi per il PC IBM, ma vogliamo davvero fare qualcosa che funzioni con qualsiasi processore. Altrimenti, potrebbe risultare che quello che hai fatto oggi dovrà essere buttato via tra qualche anno o riscritto per nuovi processori. Non è un segreto che i processori a 64 bit saranno presto disponibili per molti ed è improbabile che siano compatibili codice binario dal computer IBM.

IN ultima versioneÈ apparso il debugger IDA per MS File di Windows e in futuro probabilmente aggiungeremo nuovi moduli debugger - per Linux, per microcontrollori, ed eseguiremo il debug remoto.
Naturalmente, un'altra direzione è quella di emettere codice in un linguaggio di alto livello, ad esempio C, cioè scrivere un decompilatore. Il compito è meritevole e ci stiamo lavorando. Ci sono molti dettagli che devono essere presi in considerazione quando si lavora con programmi di vita reale.
Qui dobbiamo dire subito che il decompilatore non farà mai parte di IDA. Se (e questo è un grande "se") viene realizzato un decompilatore, sarà solo un prodotto separato.


Tana T: Un decompilatore C sarebbe uno strumento eccellente per molti professionisti del reverse engineering. Pensi che questo sia reale?

Ilfak: Questo è possibile se stabilisci obiettivi ragionevoli. Se l'obiettivo è creare un sistema che produca codice da compilare successivamente e utilizzare come parte di un altro programma, la risposta è no. O meglio, un decompilatore del genere si può realizzare, e anche molto facilmente, ma questo personalmente non mi interessa per niente. Un sistema del genere sarebbe molto conveniente per il furto di codici. Se qualcuno vuole farlo, per favore, lo faccia senza di me. Sì, se guardi abbastanza attentamente, tali sistemi possono essere trovati su Internet.

Se l'obiettivo è rendere i programmi più facili da comprendere, ad es. presentazione della logica del programma in un linguaggio di alto livello in modo che sia leggibile da una persona, quindi il compito è molto più difficile, ma anche risolvibile. La quantità di lavoro è molto ampia e il mercato dei decompilatori è piccolo. Forse questo spiega il fatto che i veri decompilatori sono in grado di eseguire l'analisi programmi reali, non esiste?
A proposito, esiste già un piccolo decompilatore basato su IDA. È stato creato da uno studente come tesi di master. Puoi trovare il sito cercando il suo nome: desquirr.


Tana T: Un po' di confusione è che, sebbene dica che sei il creatore di IDA Pro, è venduto da Datarescue. Puoi chiarire la situazione?

Ilfak: Beh, è ​​così. Datarescue vende IDA Pro. Non faccio vendita direttamente, preferisco fare programmazione, sono più bravo.


Tana T: Esiste una versione non Pro del tuo prodotto?

Ilfak: Sì. Possono utilizzare gli studenti o gli utenti che solo occasionalmente disassemblano i programmi versione gratuita IDA Freeware, disponibile su Internet, ad esempio su Simtel Questa versione è versione completa, che è stato venduto diversi anni fa. L'unica cosa che può sorprendere utenti moderni, abituato a lavorare con il mouse, questa è un'interfaccia testuale del programma, ma l'essenza del programma è la stessa. Un vero programmatore non presta attenzione a piccoli dettagli come l'interfaccia del programma :).


Tana T: Per favore dimmi, è disponibile una versione di prova o demo di IDA Pro da qualche parte?

Ilfak: Si certo. Diamo versioni demo potenziali acquirenti- aziende serie, agenzie governative, ecc. Vorrei subito notare che Vasya Pupkin, che si è iscritto come FuRiOuSDaRkLoRd, e sta chiedendo una versione demo per la quinta volta (perché vuole "assicurarsi da solo" che IDA soddisfi i suoi "alti requisiti"), ci sono pochissime possibilità di ottenerlo. Tali richieste finiscono immediatamente nella spazzatura.

Anche se ci sono casi divertenti. Ad esempio, sono rimasto stupito da un “povero pastore in Argentina” che ha voluto utilizzare IDA. Ha anche scritto che avrebbe pregato per noi se gli avessimo inviato il programma. Mi chiedo cosa avesse bisogno di smontare, non la Bibbia? O il “povero studente” che ha subito avuto bisogno di analizzare qualche microcontrollore speciale perché “il cliente ne ha urgente bisogno”.


Tana T: Quali concorrenti puoi evidenziare? C'è qualcuno che può competere con IDA?

Ilfak: Ad essere sincero, non so cosa dire.


Tana T: Molti utenti lamentano che non esiste quasi alcuna documentazione ufficiale per IDA PRO ed è piuttosto difficile imparare a lavorarci, soprattutto con il suo linguaggio di scripting. Puoi commentare?

Ilfak: Si è vero. L'analisi dei programmi in linguaggio assembly è già difficile, semplicemente non so come renderlo più semplice (se lo sapessi, lo farei :)). Posso solo consigliarti di leggere le pagine della guida, guardare esempi di script IDC forniti con IDA e cercare esempi di utilizzo in Internet. Per quanto riguarda la documentazione, non ce n'è e, purtroppo, difficilmente lo sarà nel prossimo futuro. C'è un aiuto contestuale chiamato da F1.

La questione è ulteriormente aggravata dal fatto che molti utenti non sanno cosa fare, ad es. Non sanno analizzare i programmi. Qui molto dipende dal livello dell'utente. Qualcuno non conosce il linguaggio assembly e ha bisogno che gli venga spiegato cosa è xor eax,eax. Agli altri non è chiaro cosa sia DialogProc, perché... non aveva mai programmato in Windows. Il terzo non capisce perché il numero di push nella funzione non corrisponde al numero di pop. Ma questi sono i più casi semplici. Tipicamente l'utente carica un programma in IDA e non sa cosa fare. Non è facile rispondere a questa domanda, perché “cosa fare” dipende da “cosa si vuole ottenere”.

Pertanto, abbiamo deciso di fare il massimo in modo semplice- abbiamo F1, che descrive ogni comando, ogni funzione in IDC. Un utente che sa cosa vuole ottenere deve solo scorrere l'elenco dei comandi e provare a scegliere un set che risolverà un problema specifico. Ma sarà più difficile per un utente ignorante, e l'aiuto dovrebbe probabilmente consistere nell'insegnare all'utente le basi dell'assembler, la rappresentazione dei programmi in forma binaria, le tecniche tipiche di MS Windows e così via progressivamente. Di tanto in tanto organizziamo tali corsi per utenti stranieri. Se ci sono abbastanza persone interessate, possiamo organizzare corsi in Russia.

Il primo assemblatore e allo stesso tempo il primo interprete fu il set di istruzioni pseudocodice e Short Code, sviluppato nel luglio 1949 dagli americani Pres Eckert e John Mauchly per il computer BINAC. La soluzione a qualsiasi problema veniva prima scritta equazioni matematiche. Questi, a loro volta, venivano tradotti in codici carattere per carattere: da “a=b+c” a “S0 03 S1 07 S2”. SU fase finale i codici assumevano una forma binaria e ogni riga veniva eseguita automaticamente dopo essere stata inserita. Primo problema pratico, che l'assemblatore ha risolto, era il calcolo delle tabelle di tiro dell'artiglieria per i cannoni balistici americani. Gli assemblatori che utilizzavano codici mnemonici (con “MOV” e “ADD”) apparvero solo a metà degli anni '50. Gli autori dell'assembler sono conosciuti soprattutto per aver inventato il primo computer(sui tubi a vuoto): ENIAC (1946), BINAC (1949) e diretto antenato computer moderni UNIVAC I (1951). Sfortunatamente, né Eskert né Moshli sono sopravvissuti fino ad oggi.


Tana T: Hai letto il libro di Chris Kaspersky "The IDA Disassembler Mindset"? Oggi questo è l'unico libro sull'IDA in russo, quindi mi piacerebbe sentire la tua opinione al riguardo. Forse ne conosci l'autore?

Ilfak: Sì, conosco Chris e mi ha rivolto delle domande mentre scrivevo il libro. Il libro è utile come libro di riferimento dettagliato sulle funzioni IDC ed è destinato a un lettore che comprende il linguaggio assembly e ama manipolare bit e byte. Naturalmente, posso solo consigliare questo libro a chiunque voglia comprendere a fondo IDC e imparare a scrivere buoni script.

Ma la vita non si ferma e da quando il libro è stato scritto sono state rilasciate nuove versioni di IDA. Sono apparse nuove opportunità (ad esempio, lo sviluppo dei plugin non è trattato nel libro). Spero che Chris scriva un seguito che si concentri maggiormente su programmi moderni E problemi tipici problemi affrontati dagli specialisti della sicurezza informatica alle prime armi.


Tana T: Perché non scrivi tu stesso qualcosa di simile alla "Guida avanzata per gli sviluppatori/utenti di IDA Pro" Dopo tutto, nessuno conosce tutte le complessità di IDA, IDA SDK e IDC come te, penso che questo libro venderebbe un numero considerevole di copie solo in Russia Inoltre, la pratica di pubblicare libri sui propri prodotti è abbastanza comune oggi: prendi la stessa Microsoft Press...

Ilfak: Non sei il primo a sollevare la questione del libro. Forse un giorno deciderò, ma non sono ancora pronto per scrivere. Se scrivo un libro, è improbabile che mi rimanga tempo per migliorare IDA, quindi lascia che il libro aspetti per ora :)


Tana T: Lascia che ti faccia una domanda personale: non ho mai letto una tua intervista da nessuna parte, non ti piace darle?

Ilfak: Questa è la mia prima intervista.


Tana T: C'è qualcosa che vuoi dire ai nostri lettori?

Ilfak: Vorrei ringraziare tutti coloro che hanno contribuito allo sviluppo di IDA, generando idee, condividendo codice, registrando il programma e semplicemente supportando parole gentili. Mi auguro che in futuro IDA rimanga uno strumento per professionisti che lo utilizzano per scopi nobili.

Grazie per le domande


Tana T: E grazie mille per le risposte così interessanti. Buona fortuna a te personalmente e alla tua creazione, IDA, speriamo che questo disassemblatore continui a svilupparsi non meno intensamente e fruttuosamente.
  • Esercitazione

Questo post sarà davvero interessante per coloro che stanno appena iniziando a interessarsi a questo argomento. Per le persone con esperienza, probabilmente causerà solo sbadigli. Tranne forse...
Il reverse engineering, nella parte meno legale dove non riguarda il debug e l’ottimizzazione del proprio prodotto, riguarda anche il seguente compito: “scoprire come funziona per loro”. In altre parole, ripristinare l'algoritmo originale del programma, avendo in mano il suo file eseguibile.
Per restare fedeli alle basi ed evitare alcuni problemi, "hackereremo" non qualsiasi cosa, ma... un keygen. Nel 90% dei casi non sarà compresso, crittografato o altrimenti protetto, anche dal diritto internazionale...

In principio c'era la parola. Doppio
Quindi, abbiamo bisogno di un keygen e di un disassemblatore. Per quanto riguarda il secondo, supponiamo che si tratti di Ida Pro. Keygen sperimentale senza nome trovato su Internet:

Dopo aver aperto il file keygen in Ida, vediamo un elenco di funzioni.

Dopo aver analizzato questo elenco, vediamo diverse funzioni standard (WinMain, start, DialogFunc) e una serie di funzioni ausiliarie del sistema. Tutto questo caratteristiche standard, costituendo la cornice.
Il disassemblatore non riconosce le funzioni utente che rappresentano l'implementazione delle attività del programma, e non il suo wrapper di API e chiamate di sistema, e le chiama semplicemente sub_digits. Considerando che qui esiste una sola funzione di questo tipo, dovrebbe attirare la nostra attenzione poiché molto probabilmente contiene l'algoritmo o parte di esso che ci interessa.

Eseguiamo il keygen. Ti chiede di inserire due stringhe di 4 cifre. Supponiamo che otto caratteri vengano inviati contemporaneamente alla funzione di calcolo della chiave. Analizziamo il codice della funzione sub_401100. La risposta all’ipotesi è contenuta nelle prime due righe:

var_4=dword ptr -4
arg_0=dword ptr 8

La seconda riga suggerisce chiaramente di ricevere l'argomento della funzione all'offset 8. Tuttavia, la dimensione dell'argomento è una doppia parola pari a 4 byte, non 8. Ciò significa che molto probabilmente la funzione elabora una stringa di quattro caratteri in un unico passaggio, e viene chiamato due volte.
Una domanda che può certamente sorgere è: perché un offset di 8 byte è riservato per ricevere un argomento di funzione, ma punta a 4, poiché c'è un solo argomento? Come ricordiamo, lo stack cresce verso il basso; Quando un valore viene aggiunto allo stack, il puntatore dello stack viene decrementato del numero corrispondente di byte. Pertanto, dopo che l'argomento di una funzione è stato aggiunto allo stack e prima che inizi l'esecuzione, qualcos'altro viene aggiunto allo stack. Questo è ovviamente l'indirizzo del mittente inserito nello stack dopo la chiamata funzione del sistema chiamata.

Troviamo i punti nel programma in cui si verificano le chiamate alla funzione sub401100. Si scopre che in realtà ce ne sono due: all'indirizzo DialogFunc+97 e DialogFunc+113. Le istruzioni che ci interessano iniziano da qui:

Pezzo di codice relativamente lungo

loc_401196: mov esi, mov edi, ds:SendDlgItemMessageA lea ecx, push ecx ; lParam premere 0Ah; wParam premere 0Dh; Messaggio push 3E8h; nIDDlgItem spingere esi; chiamata hDlg edi ; SendDlgItemMessageA lea edx, push edx; lParam premere 0Ah; wParam premere 0Dh; Messaggio push 3E9h; nIDDlgItem spingere esi; chiamata hDlg edi ; SendDlgItemMessageA pusha movsx ecx, byte ptr movsx edx, byte ptr movsx eax, byte ptr shl eax, 8 o eax, ecx movsx ecx, byte ptr shl eax, 8 o eax, edx shl eax, 8 o eax, ecx mov , eax popa mov eax, premi la chiamata eax sub_401100

Innanzitutto, vengono chiamate due funzioni SendDlgItemMessageA di seguito. Questa funzione prende l'handle dell'elemento e lo invia messaggio di sistema Msg. Nel nostro caso, Msg è uguale a 0Dh in entrambi i casi, che è l'equivalente esadecimale della costante WM_GETTEXT. Recupera i valori di due campi di testo in cui l'utente ha inserito "due stringhe di 4 caratteri". La lettera A nel nome della funzione indica che viene utilizzato il formato ASCII: un byte per carattere.
La prima riga è scritta all'offset lParam, la seconda, ovviamente, all'offset var_1C.
Quindi, dopo aver eseguito le funzioni SendDlgItemMessageA Stato attuale i registri vengono memorizzati nello stack utilizzando il comando pusha, quindi un byte di una delle stringhe viene scritto nei registri ecx, edx ed eax. Di conseguenza, ciascuno dei registri assume la forma: 000000##. Poi:

  1. L'istruzione SHL sposta il contenuto dei bit del registro eax di 1 byte o, in altre parole, moltiplica il contenuto aritmetico per 100 in esadecimale o 256 in decimale. Di conseguenza, eax assume la forma 0000##00 (ad esempio, 00001200).
  2. Viene eseguita un'operazione OR tra il valore eax ricevuto e il registro ecx nella forma 000000## (sia 00000034). Di conseguenza, ciascuno apparirà così: 00001234.
  3. L'ultimo, quarto byte della riga viene scritto nell'ESH “liberato”.
  4. Il contenuto di eax viene nuovamente spostato di un byte, facendo spazio nel byte basso per la successiva istruzione OR. Ora ciascuno assomiglia a questo: 00123400.
  5. Viene eseguita l'istruzione OR, questa volta tra eax ed edx, che contiene, ad esempio, 00000056. Ora eax è 00123456.
  6. I due passaggi SHL eax,8 e OR vengono ripetuti, con il risultato che il nuovo contenuto ecx (00000078) viene aggiunto alla "fine" di eax. Di conseguenza, eax memorizza il valore 12345678.
Questo valore viene quindi memorizzato in una "variabile" - una posizione di memoria all'offset arg_4. Lo stato dei registri (i loro valori precedenti), precedentemente memorizzato nello stack, viene estratto dallo stack e distribuito ai registri. Quindi il registro eax viene riscritto nel valore all'offset arg_4 e questo valore viene inserito dal registro nello stack. Segue una chiamata alla funzione sub_401100.

Qual è lo scopo di queste operazioni? È molto facile scoprirlo anche nella pratica, senza teoria. Impostiamo un punto di interruzione nel debugger, ad esempio, su spingere le istruzioni eax (appena prima di chiamare la sottofunzione) ed esegui il programma per l'esecuzione. Keygen si avvierà e ti chiederà di inserire delle stringhe. Inserendo qwer e tyui e fermandoci al punto di interruzione, osserviamo il valore di eax: 72657771. Lo decodifichiamo in testo: rewq. Cioè, il significato fisico di queste operazioni è l'inversione delle stringhe.

Ora sappiamo che uno dei stringhe di origine, girato all'indietro, in dimensione doppia parola, che si adatta perfettamente a qualsiasi registro standard. Forse puoi dare un'occhiata alle istruzioni sub_401100.

Un altro pezzo di codice relativamente lungo

sub_401100 proc vicino var_4= dword ptr -4 arg_0= dword ptr 8 push ebp mov ebp, esp push ecx push ebx push esi push edi pusha mov ecx, mov eax, ecx shl eax, 10h not eax add ecx, eax mov eax, ecx shr eax, 5 xor eax, ecx lea ecx, mov edx, ecx shr edx, 0Dh xor ecx, edx mov eax, ecx shl eax, 9 not eax aggiungi ecx, eax mov eax, ecx shr eax, 11h xor eax, ecx mov , eax popa mov eax, pop edi pop esi pop ebx mov esp, ebp pop ebp retn sub_401100 endp


All'inizio non c'è nulla di interessante qui: gli stati dei registri sono accuratamente memorizzati nello stack. Ma il primo comando che ci interessa è quello che segue l'istruzione PUSHA. Scrive l'argomento della funzione memorizzato nell'offset arg_0 in exx. Quindi questo valore viene trasferito a eax. Ed è tagliato a metà: come ricordiamo, nel nostro esempio, 72657771 viene trasmesso in sub_401100; uno spostamento logico a sinistra di 10h (16 in decimale) trasforma il valore del registro in 77710000.
Successivamente il valore del registro viene invertito utilizzando l'istruzione NOT. Ciò significa che dentro rappresentazione binaria registro, tutti gli zeri diventano uno e gli uno diventano zero. Il registro dopo l'esecuzione di questa istruzione contiene 888EFFFF.
L’istruzione ADD aggiunge (aggiunge, più, ecc.) il valore risultante al valore dell’argomento originale, che è ancora contenuto nel registro ecx (ora è chiaro perché è stato scritto prima in ecx e poi in eax?). Il risultato viene salvato nell'es. Controlliamo come apparirà l'esx dopo aver eseguito questa operazione: FAF47770.
Questo risultato viene copiato da exx a eax, dopodiché l'istruzione SHR viene applicata al contenuto di eax. Questa operazione è l'opposto di SHL: mentre quest'ultimo sposta i bit a sinistra, il primo li sposta a destra. Proprio come l'operazione di spostamento logico a sinistra equivale a moltiplicare per potenze di due, l'operazione di spostamento logico a destra equivale alla stessa divisione. Vediamo quale valore sarà il risultato di questa operazione: 7D7A3BB.
Facciamo ora un'altra violenza al contenuto di eax ed exx: l'istruzione XOR è addizione modulo 2 o “OR esclusivo”. L'essenza di questa operazione, grosso modo, è questa uguale a uno(true) solo se i suoi operandi sono diversi. Ad esempio, nel caso di 0 xo 1 il risultato sarà vero, ovvero uno. Nel caso di 0 xor 0 o 1 xor 1, il risultato sarà falso o zero. Nel nostro caso, a seguito dell'esecuzione di questa istruzione relativa ai registri eax (7D7A3BB) ed exx (FAF47770), nel registro eax verrà scritto il valore FD23D4CB.

Il comando seguente, LEA ecx, moltiplica eax per 9 in modo elegante e semplice e scrive il risultato su ecx. Questo valore viene poi copiato in edx e spostato a destra di 13 bit: otteniamo 73213 in edx e E6427B23 in ecx. Quindi copiamo nuovamente ecx ed edx, scrivendo E6454930 su esx. Lo copiamo in eax, lo spostiamo a sinistra di 9 bit: 8A926000, quindi lo invertiamo, ottenendo 756D9FFF. Aggiungiamo questo valore al registro ESH: abbiamo 5BB2E92F. Lo copiamo in eax, lo spostiamo a destra di ben 17 bit - 2DD9 - e lo copiamo da exx. Finiamo con 5BB2C4F6. Allora... allora... cosa abbiamo lì? Cosa tutto?..
Quindi, salviamo questo valore nell'area di memoria all'offset var_4, carichiamo gli stati del registro dallo stack, prendiamo nuovamente il valore finale dalla memoria e infine rimuoviamo dallo stack i restanti stati del registro memorizzati all'inizio. Usciamo dalla funzione. Evviva!... però è troppo presto per rallegrarsi, finora all'uscita della prima chiamata di funzione abbiamo un massimo di quattro caratteri semistampabili, eppure abbiamo ancora un'intera stringa non elaborata, e questa deve ancora essere portato ad una forma divina.

Passiamo ad altro alto livello analisi - dal disassemblatore al decompilatore. Rappresentiamo l'intera funzione DialogFunc, che contiene chiamate a sub_401100, sotto forma di pseudocodice di tipo C. In effetti, il disassemblatore lo chiama “pseudocodice” in realtà è praticamente codice C, solo brutto. Vediamo:

Bisogno di più codice. Dobbiamo costruire uno ziggurat.

InviaDlgItemMessageA(hDlg, 1000, 0xDu, 0xAu, (LPARAM)&lParam); SendDlgItemMessageA(hDlg, 1001, 0xDu, 0xAu, (LPARAM)&v15); v5 = sub_401100((char)lParam | ((SBYTE1(lParam) | ((SBYTE2(lParam) | (SBYTE3(lParam)<< 8)) << 8)) << 8)); v6 = 0; do { v21 = v5 % 0x24; v7 = v21; v5 /= 0x24u; if (v7 >= 10) v8 = v7 + 55; altrimenti v8 = v7 + 48; v21 = v8; ) mentre (v6< 4); v22 = 0; v9 = sub_401100(v15 | ((v16 | ((v17 | (v18 << 8)) << 8)) << 8)); v10 = 0; do { v19 = v9 % 0x24; v11 = v19; v9 /= 0x24u; if (v11 >= 10) v12 = v11 + 55; altrimenti v12 = v11 + 48; v19 = v12; ) mentre (v10< 4); v20 = 0; wsprintfA(&v13, "%s-%s-%s-%s", &lParam, &v15, v21, v19); SendDlgItemMessageA(hDlg, 1002, 0xCu, 0, (LPARAM)&v13);

Questo è già più facile da leggere rispetto all'elenco degli assembly. Tuttavia, non in tutti i casi ci si può affidare a un decompilatore: bisogna essere pronti a passare ore a monitorare il thread della logica assembly, gli stati dei registri e lo stack nel debugger... per poi dare spiegazioni scritte all'FSB o all'FBI dipendenti. La sera faccio battute particolarmente divertenti.
Come ho detto, è più facile da leggere, ma ancora lontano dall'essere perfetto. Analizziamo il codice e diamo alle variabili nomi più leggibili. Diamo nomi chiari e logici alle variabili chiave e nomi più semplici ai contatori e a quelli temporanei.

La stessa cosa, solo tradotta dal cinese all'indiano.

SendDlgItemMessageA(hDlg, 1000, 0xDu, 0xAu, (LPARAM)&first_given_string); SendDlgItemMessageA(hDlg, 1001, 0xDu, 0xAu, (LPARAM)&second_given_string); first_given_string_encoded = sub_401100((char)first_given_string | ((SBYTE1(first_given_string) | ((SBYTE2(first_given_string) | (SBYTE3(first_given_string)<< 8)) << 8)) << 8)); i = 0; do { first_result_string[i] = first_string_encoded % 0x24; temp_char = first_result_string[i]; first_string_encoded /= 0x24u; if (temp_char >= 10) carattere_successivo = carattere_temp + 55; altrimenti carattere_successivo = carattere_temp + 48; first_result_string = next_char; ) mentre io< 4); some_kind_of_data = 0; second_string_encoded = sub_401100(byte1 | ((byte2 | ((byte3 | (byte4 << 8)) << 8)) << 8)); j = 0; do { second_result_string[j] = second_string_encoded % 0x24; temp_char2 = second_result_string[j]; second_string_encoded /= 0x24u; if (temp_char2 >= 10) carattere_successivo2 = carattere_temp2 + 55; altrimenti carattere_successivo2 = carattere_temp2 + 48; second_result_string = next_char2; ) mentre (j< 4); yet_another_some_kind_of_data = 0; wsprintfA(&buffer, "%s-%s-%s-%s", &first_given_string, &second_given_string, first_result_string, second_result_string); SendDlgItemMessageA(hDlg, 1002, 0xCu, 0, (LPARAM)&buffer);

Disassemblatore IDA Pro– interattivo disassemblatore, che è ampiamente utilizzato per il reverse engineering. È eccezionalmente flessibile, ha un linguaggio di comando integrato e supporta molti formati di file eseguibili per un gran numero di processori e sistemi operativi.

Raggi esagonali— sofisticato multifunzionale Editor esadecimale (editor esadecimale) e il più potente decompilatore. Il più famoso strumento commerciale di analisi inversa sviluppato da Raggi esagonali. È un plugin per IDA Pro.

C'era una volta, negli anni '90, tutto iniziò con disassemblatore con la capacità di modificare e supportare in modo interattivo tipi di dati complessi sotto forma di strutture. Ora questo è uno strumento molto più avanzato. Il programma è espandibile e sviluppato SDK sviluppare vari plugin, dall'aggiunta del supporto per nuove architetture di processori all'automazione del processo di debug utilizzando l'API integrata per i linguaggi di scripting ( IDC, IDAPython).

A proposito di supporto Pitone Vale la pena menzionarlo separatamente, poiché ormai da tempo è strettamente integrato tramite un plugin IDAPython e attualmente supporta quasi tutte le funzionalità native SDK SU C++, ad eccezione solo di cose molto specifiche.

Alla quinta versione IDA Pro aveva nel suo arsenale tutto il necessario per decompilazione automatica, e non solo decompilazione, ma molto
decompilazione di alta qualità, decompilazione di un livello fondamentalmente nuovo, che nessun altro esiste
decompilatore

È così che è nata l'idea di aggiungere IDA un'altra piccola (in realtà molto grande) porzione di codice che traduce il linguaggio assembly cinese in un listato accessibile e comprensibile in linguaggio C.

Ilfak non ha incluso il decompilatore nel kit di distribuzione IDA Pro. C'erano diverse ragioni per questo. La prima e principale cosa è che la maggior parte degli attuali utenti IDA non hanno realmente bisogno di un decompilatore, se lo useranno, sarà solo per pura curiosità, lo eseguiranno un paio di volte, poi rinunceranno e torneranno al solito; stile di vita: analisi di un elenco di disassemblatori. In secondo luogo, come ci si deve guadagnare da vivere (Ilfak) e mantenere l'azienda?!

Tutto ciò ha portato al fatto che decompilatore, chiamato ( Raggi esagonali) è stato rilasciato come prodotto separato, ma - attenzione allo schermo - richiedendo
presenza obbligatoria dell'IDA, perché il HexRays è solo un plugin. Pertanto, un invertitore che desidera semplificare la propria vita attraverso la decompilazione automatica deve acquistare sia lo stesso IDA che HexRays. Inoltre, questo kit verrà acquistato da un pubblico di utenti completamente diverso, completamente diverso da quello che ha acquistato IMU e lo ha venerato come il miglior disassemblatore interattivo. Interattivo significa interagire da vicino con l'utente (nel senso dell'hacker). Al contrario, i disassemblatori batch puntano alla massima automazione
invertire, privando l'utente della possibilità di intervenire nel processo e dare istruzioni.
HexRays, a differenza di IDA Pro, non ha interattività: era atrofizzato nella sua infanzia. Non ci sono nemmeno opzioni di personalizzazione! E dove non c’è interattività, non ci sono hacker.

Ciascuno del team ][ ha le proprie preferenze riguardo al software e alle utilità per
pentest. Dopo qualche consultazione, si è scoperto che la scelta variava così tanto che era possibile formularla
un set di programmi collaudati da vero gentiluomo. Questo è ciò che abbiamo deciso. A
Non fare un miscuglio; abbiamo diviso l'intero elenco in argomenti. Oggi guarderemo
Debugger e disassemblatori sono tutto ciò che serve per invertire le applicazioni.

OllyDbg

Se hai mai letto articoli sul cracking o, ad esempio, hai guardato tutorial video da
il nostro invertitore Cr@wler, il nome “Olka” dovrebbe esserti familiare. Questo
Debugger a 32 bit in esecuzione su ring-3 con un'interfaccia ben studiata e utile
funzioni che facilitano notevolmente il processo di debug. IN OllyDBG
è integrato uno speciale analizzatore che riconosce e indica visivamente
procedure, cicli, costanti e stringhe incorporate nel codice, accesso alle funzioni API,
parametri di queste funzioni, ecc. Per un principiante (e non solo): questo è esattamente ciò
necessario! La versione 1.10 è ancora in uso e da allora è in circolazione la versione beta del secondo ramo
Marzo non ha subito cambiamenti, ma è già possibile apprezzarne numerosi
innovazioni del debugger. Il lavoro va avanti da molto tempo e quindi lo sviluppatore lo ha già fatto
c'è qualcosa da mostrare (principalmente il nuovo motore). La beta difficilmente può essere presa in considerazione
come strumento principale per questioni serie, quindi mi affretto ad avvisarti:
La stabilità del nuovo motore è ancora un sogno, quindi usa la beta
a proprio rischio e pericolo.

Qui c'è da dire che OllyDbg è diventato un debugger standard per l'utente, preso
adottato dagli hacker e hanno subito voluto migliorarlo. Ci sono molti
assemblaggi non standard: alcuni correggono gli errori di Olga, altri espandono la funzionalità,
altri ancora lo nascondono ai protettori. Svantaggio: il "motore" del debugger funziona
tramite l'API di debug di MS, che soffre di una serie di limitazioni intrinseche, lasciandosi alle spalle
contenente molte tracce difficili da rimuovere e un facile bersaglio
tecnologie anti-debug.

Debug dell'immunità

Un noto mod dell'omonima azienda, specializzato in sicurezza e
ho incrociato Olga 1.10 con Python, un linguaggio interpretato molto
È facile e veloce scrivere script. Certo, puoi scriverli direttamente in Olga, ma non lo è
troppo comodo, devi fare tutto manualmente e risolvere i problemi tipici (come
ricerca in memoria), che sono stati risolti da tempo.

IN Debug dell'immunità include molte librerie scritte in Python e
su misura per le esigenze degli hacker. Le librerie vengono chiamate da programmi Python,
tra cui searchcrypt.py, un eccellente strumento di identificazione
i seguenti algoritmi crittografici: AES, BLOWFISH, CAMELLIA, CAST, MD5, RC2,
RC5, RIPEMD160, SHA1, SHA256, SHA512.

Immunity Debugger è utilizzato da molti professionisti della sicurezza,
pubblicare expolit di prova scritti in Python e destinati a
per funzionare esclusivamente nell'ambiente di questo debugger. E sebbene sia un hacker con una testa
capirà l'algoritmo di funzionamento dell'exploit senza Immunity Debugger, porting
exploit in qualsiasi altro linguaggio, prima o poi il debugger finisce in
computer, diventando spesso lo strumento principale che sostituisce Olga.

YDbg

Un mod popolare e molto potente, basato su Olga 1.10 e raccolto nella sua
la distribuzione contiene un numero enorme di plugin, script e molti altri
strumenti utili. A differenza di Immunity Debugger, su cui si concentra
specialisti della sicurezza, YDbg scritto da hacker e per hacker che sfondano
protezione con protettori (quelli che resistono attivamente a questo stato di cose e
pieno di tecniche anti-debug che riconoscono principalmente la presenza di Olga
finestra con il suo nome e le voci del menu). Pertanto, la prima cosa che attira la tua attenzione quando
avviando YDbg (il cui file eseguibile viene rinominato da OLLYDBG.EXE a SND.exe),
Queste sono voci di menu "sgualciti". Nello specifico, "Memory" è diventato "M3m0ry", "SEH
chain" in "S3H chain", "Breakpoints" in "Br3akp01nts", ecc. In una parola, tutto
I punti "hacker" sono stati modificati: prova a trovarli (ovviamente, nelle nuove versioni
protettori, probabilmente verrà visualizzato il rilevamento di YDbg, ma per ora si sta nascondendo con successo
cumuli di difese che bruciano Olga). La distribuzione YDbg comprende 36 popolari
plugin (e non è più necessario setacciare Internet alla loro ricerca). Mi sono messo in mezzo a loro
il vero diamante è IDA Sigs, il cui nome parla da solo. Si si!
Questo è un plugin che supporta le firme IDA e le visualizza come commenti
chiamate funzioni in Olga o YDbg. Un altro plugin utile è Red-hawk
("Red Hawk") è una barra degli strumenti che ti consente di farlo
in particolare impostare i breakpoint sulle funzioni desiderate con un semplice movimento del mouse
(ad esempio, in Visual Basic è qualcosa come __vbaStrCmp o __vbaStrCopy,
utilizzato rispettivamente per confrontare e copiare stringhe). Principianti
gli hacker si limitano a strillare di gioia perché il falco rosso è in realtà
un tutorial di hacking, ma prova a indovinare cosa devi fare! \SCRIPT Directory
contiene 637 script, destinati principalmente alla rimozione di vari
protettori/packer di file eseguibili e automazione di tutte le attività di routine.

SoftICE

Un debugger ben noto (anche a chi non si è nemmeno avvicinato al cracking)
per Windows, in esecuzione a livello di kernel. A differenza di un debugger di applicazioni come
ad esempio OllyDbg, SoftICEè in grado di mettere in pausa tutte le operazioni in Windows, che
molto importante per il debug dei driver. Funziona ignorando l'API di debug di MS, che
complica notevolmente l'anti-debug, tuttavia, dato che per gli sviluppatori di sicurezza
il ghiaccio molle è il nemico numero uno, quasi tutti i protettori lo riconoscono facilmente
presenza nel sistema. Pertanto, non è possibile fare a meno di estensioni speciali
(di cui parleremo più avanti). SoftICE è stato originariamente sviluppato da NuMega,
che lo ha incluso nel pacchetto software di sviluppo rapido
driver ad alte prestazioni chiamati Driver Studio, che
è stata successivamente acquisita da Compuware. Ricordi quanti manuali diversi esistono?
si trattava di installare Soft-Ice sotto Windows XP? Ahimè, a cominciare dal whist,
Il debugger non funziona. Gli sviluppatori hanno sospeso lo sviluppo nell'aprile 2006.
Non può essere trovato sul sito ufficiale ed è disponibile solo su torrent.

Debug Microsoft

Parte del WDK (Windows Driver Kit - ex Driver Development Kit o
DDK), nonché nel kit degli strumenti di debug. Entrambi sono gratuiti, ma WDK è molto di più
di volume maggiore e richiede la preregistrazione per ricevere Windows
Live ID, mentre gli strumenti di debug sono distribuiti senza registrazione insieme all'SDK,
che include documentazione, file di intestazione, librerie e diversi
esempi di come scrivere plugin.

Debug Microsoft può funzionare sia a livello di applicazione (ring-3) che a
livello del kernel. Fino a XP, il debug del kernel richiedeva almeno due macchine,
collegato tramite un cavo COM, ma ora ne basta uno.

È disponibile in due edizioni: windbg.exe - interfaccia grafica e cdb.exe -
interfaccia della riga di comando. Entrambi sono solo involucri sottili
dbgeng.dll, in cui, di fatto, è implementato il principale “motore” di debug,
protocollo di scambio documentato. Pertanto, per non scrivere più
tracciante da zero, dbgeng.dll può essere utilizzato come “base” per
scrivere decompressori universali per file eseguibili.

Debugger del kernel Syser

Esistono solo tre debugger del kernel decenti: SoftICE, Syser e Microsoft Kernel
Debugger, ma SoftICE non funziona su Vista e Server 2008 e Microsoft Kernel
Il debugger non è l'opzione migliore per scopi di hacking. Resti Syser, Quale
gli hacker lo hanno adottato e lo stanno utilizzando attivamente. È stato scritto da due
gli intraprendenti avversari cinesi Wu YanFeng e Chen JunHao. Essenzialmente Syser
— debugger a livello di kernel con un'interfaccia a finestra grafica. Consente di eseguire il debug
sia le applicazioni che i driver. Combina le funzioni di IDA Pro, Softice e
Ollydbg. Supporta l'evidenziazione dell'elenco del disassemblatore, il caricamento dinamico e
scarico, tutti i comandi del debugger SoftICE, lavoro completo con Unicode e
sistemi multiprocessore. Molti piccoli dettagli sono stati elaborati: ad esempio, è corretto
gli appunti funzionano, permettendoti di copiare i dati dal livello Ring 3 al
Squillo 0. Molte operazioni possono essere automatizzate utilizzando script. Necessario
affermano che Syser è il successore di SoftICE, dal quale si dice siano stati ritirati
interi moduli. Ha molti vantaggi, ma anche molti svantaggi
In realtà, devi usarlo insieme a Microsoft Kernel Debugger.

G.D.B.

Debug GNU– il debugger principale per UNIX, focalizzato su un aspetto completamente diverso
tipo di pensiero rispetto a tutti i debugger di cui sopra. Non è solo interattivo
debugger, piuttosto è una macchina controllata da programma, flessibile e potente
interfaccia. Eseguire il debug di programmi "onesti" con il suo aiuto è un piacere,
ma in termini di anti-debug le cose vanno male. GDB non tenta nemmeno di resistere e
funziona attraverso la libreria ptrace (che in realtà non è affatto una libreria, ma
chiamata di sistema). GDB è fondamentalmente incapace di eseguire il debug di programmi che non lo sono
vogliono essere sottoposti a debug. E tali programmi stanno gradualmente iniziando ad apparire.

Naturalmente oltre a GDB ci sono altri debugger per niks, ad esempio
Lin-Ice, ma poiché le tecnologie anti-debug sotto UNIX sono appena iniziate
sviluppare, nella maggior parte dei casi GDB andrà benissimo.

IDA Pro

IDA Proè sia un disassemblatore interattivo che un debugger. Lei
ti permette di trasformare il codice binario di un programma in testo assembly che può
essere utilizzato per analizzare il funzionamento del programma. È vero, vale la pena dirlo
Il debugger ring-3 integrato è piuttosto primitivo. Funziona tramite MS Debug
API (su NT) e tramite la libreria ptrace (su UNIX), rendendolo facile preda di
meccanismi di difesa. Ma IDA Pro è un disassemblatore interattivo con molto più di
storia decennale, la cui prima versione fu pubblicata il 6 maggio 1991. Yuri
Caronte, insieme a Ilfak, iniziò a lavorare in una direzione dove nessuno era mai andato prima.
denaro investito. Prima di questo, i disassemblatori venivano scritti esclusivamente in Pioneer
entusiasmo parallelamente allo studio dell'assemblatore e furono presto abbandonati.
C'è da meravigliarsi che i ragazzi siano riusciti a risolvere quasi tutti i fondamentali
problemi di smontaggio su cui gli altri semplicemente non volevano lavorare
sviluppatori, sapendo che non ci sarà un ritorno rapido e che il progetto richiederà decenni
lavoro duro. Dalla quinta versione, IDA Pro aveva tutto ciò di cui hai bisogno nel suo arsenale
per la decompilazione automatica, e non solo la decompilazione, ma molto
decompilazione di alta qualità. Al momento l’ultima revisione è la 5.5 del 12 giugno.
Gli utenti innamorati del prodotto generano molti plugin utili, tra cui
supportare diversi linguaggi di scripting per scrivere script in aggiunta a
IDC integrato. Per esempio,
IdaRUB
aggiunge il supporto Ruby e
IDAPython - Python.
Qui c'è da dire che a partire dalla versione 5.4 IDAPython viene preinstallato
Distribuzioni IDA.

Raggi esagonali

Quindi gli sviluppatori hanno pensato e deciso che erano già in grado di ottenerlo
codice umano in assembler, allora è una buona idea aggiungere un'altra funzionalità che traduca
Codice assembly cinese in un elenco accessibile e comprensibile nel linguaggio C.
Il lavoro intenso cominciò a bollire, durante il quale sempre più novità
trappole che richiedevano tempo, impegno e attività cerebrale per orientarsi. IN
Di conseguenza, è nato quello che richiedeva l'installazione sul computer
STO ARRIVANDO. Al decompilatore viene fornito un binario come input, quindi vengono specificati un numero di parametri
che Hex-Rays sputa il codice sorgente in puro C - per lo più comprensibile e
accessibile. È vero, non è necessario affrettarsi a ricompilarlo in formato binario, perché
poiché nella maggior parte dei casi al momento della compilazione vedrai tanti errori quanti
Non l'ho ancora visto. Uno dei motivi è la mancanza di supporto per le risorse in Hex-Rays.

W32DASM

Un ottimo disassemblatore, comodo e comprensibile. Set di funzionalità in termini di
professional è piuttosto limitato e in generale è tempo di classificarlo come uno strumento da
secolo scorso, ma no... W32DASM fornisce un buon elenco ed è per i principianti
Un'ottima opzione per capire e capire cosa è cosa. Inoltre, è per lui
fare affidamento su numerosi manuali per principianti, incluso il nostro manuale per
principianti "Craccare è facile" ().

DeDe

PEiD

Qualsiasi prodotto commerciale deve essere ragionevolmente ben protetto.
Gli sviluppatori utilizzano deliberatamente vari tipi di packer e cosiddetti
protezioni che utilizzano vari tipi di agenti anti-debug per massimizzare
impedendo che il programma venga violato. Puoi aggirarli, ma per farlo devi farlo chiaramente
immagina cosa è stato utilizzato per proteggere il programma, per quale plugin
usa un debugger e questo ti farà girare. Definire con grazia il nome e
la versione del packer è capace di una piccola utilità PEiD. In realtà, è per questo che lei
necessario.

PE Esploratore

Un programma per visualizzare e modificare file PE, a partire da EXE, DLL e
Controlli ActiveX, che terminano con screensaver SCR (Screensaver), applet
pannelli di controllo CPL, SYS e binari per la piattaforma Windows Mobile. Infatti,
questa non è un'utilità, ma un intero set di strumenti per vedere dall'interno come
il programma o la libreria è in esecuzione. Include un visualizzatore di titoli,
esportazione di chiamate di funzioni API, editor di risorse, disassemblatore.

IDA Pro è un programma unico che ha ricevuto riconoscimenti in tutto il mondo e ora in russo, compreso. Se parliamo di smontaggio, questa utility non ha concorrenti. Tutto quello che devi fare è scaricare ID Pro in un unico file e installarlo per iniziare a utilizzarlo appieno. Vale la pena notare che il prodotto è disponibile nelle versioni Standard (supporta più di 20 famiglie di processori popolari) e Advanced (progettata per 50 o più). A seconda dello scopo previsto, vale la pena scegliere i parametri appropriati. Inoltre, una delle versioni può essere ampliata o semplificata in caso di necessità.

Per scaricare IDAPro gratuitamente, devi solo fare clic sul collegamento. Il programma di installazione è multipiattaforma e supporta set di comandi a 32 e 64 bit. La versione russa per Windows è installata per impostazione predefinita; puoi cambiare la lingua nel menu delle impostazioni.

Cosa c'è di speciale nel programma? L'utility è un disassemblatore professionale, che contiene già la maggior parte dei moduli e delle funzioni. Ciò semplifica notevolmente il tuo lavoro e ti consente di elaborare grandi quantità di dati più velocemente. C'è una ricerca conveniente nell'ambiente di lavoro. Con il suo aiuto, puoi trovare e sostituire rapidamente la parte desiderata del codice. Il prodotto viene installato sul computer senza software aggiuntivo. Dopo l'installazione finale, è necessario riavviare il sistema affinché le nuove impostazioni abbiano effetto e affinché l'utilità sia visibile nell'elenco dei programmi.

Puoi anche impostare l'associazione (ad esempio, aprire file di questo formato tramite questo programma in Windows). È più conveniente scaricare semplicemente IDAPro ed eseguire il processo di disassemblaggio piuttosto che compilare i dati tramite diverse applicazioni. Tutte le impostazioni dell'utente vengono salvate. L'ambiente di lavoro dispone già di modelli già pronti che puoi modificare, eliminare o crearne di nuovi. Ciò aumenta il comfort di utilizzo del prodotto nel suo insieme. Le azioni recenti possono essere annullate utilizzando la navigazione o una scorciatoia da tastiera standard.

I principali vantaggi del programma includono:

  • distribuzione gratuita;
  • versioni utente e professionale;
  • compilazione veloce dei dati;
  • cercare una parte del codice ed evidenziarla;
  • non carica il sistema durante il funzionamento.

I migliori articoli sull'argomento