(TUTORIAL 2) Introduzione A OllyDbg
(TUTORIAL 2) Introduzione A OllyDbg
Una panoramica
In seguito riportata l'immagine della schermata principale di Olly, suddivisa nelle varie sezioni:
1. Disassembly
Questa finestra contiene il codice disassemblato del file binario e le sue informazioni, come gli
"opcodes" (di cui parleremo presto) e le istruzioni in assembly. La prima colonna riporta l'indirizzo
(nella memoria) dell'istruzione, la seconda contiene il cosidetto "opcode" a cui viene associato
almeno una istruzione (alcune ne hanno pi di uno). Questa l'unica informazione che la CPU pu
leggere ed elaborare, infatti costituisce il "linguaggio macchina" ovvero il linguaggio del computer.
Se provate ad analizzare il contenuto di un file binario usando, ad esempio, un editor esadecimale,
potete notare che contiene proprio questi opcode e nient'altro. Una delle principali operazioni di
Olly quella di disassemblare il "linguaggio macchina", ovvero trasformare gli opcode in assembly,
rendendo pi "umana" la loro lettura e interpretazione. La terza colonna contiene, appunto, il
linguaggio assembly. Per coloro che non sono abituati a vedere questo tipo di codice, la sua lettura
potrebbe apparire comunque poco amichevole, ma presto imparerai che lavorare con l'assembly
molto pi facile rispetto a lavorare con gli opcode.
L'ultima colonna invece contiene il commento di Olly riguardo l'istruzione; spesso contiene il nome
delle chiamate API (Application Programming Interface,
https://it.m.wikipedia.org/wiki/Application_programming_interface), come ad esempio
"CreateWindow" e "GetDlgItemX". Olly inoltre prova ad aiutarci a capire il codice dando un nome
alle chiamate che non sono parte delle API come, nel caso del seguente screen,
"ImageRed.00510C84 e ImageRed.00510BF4. Potrebbero apparire poco utili ma Olly ci
permette di rinominarli con nomenclature pi adatte. Si posso anche inserire i propri commenti in
questa colonna; basta fare doppio clic sulla riga e un pops up si aprir consentendovi di inserire il
vostro commento. Questi ultimi verranno poi automaticamente salvati per la volta successiva.
2. I Registri
Ogni CPU ha in s una raccolta di registri. Si potrebbero definire come delle speciali variabili
utilizzate dal processore per salvare alcune piccole quantit di informazione. In seguito riportata
l'immagine della finestra dei registri, suddivisa nelle varie sezioni:
Nel primo "settore" in alto vengono definiti i registri principali; Nel caso i registri vengano
modificati, cambieranno colore dal nero al rosso (ci rende veramente facile trovare i contenuti
modificati). Per modificarne il contenuto, sufficiente cliccarci due volte. Questi registri hanno
molteplici utilit, ma torneremo a parlarne dopo.
Il settore intermedio dedicato alle "flags", anche queste delle particolari variabili utilizzate dalla
CPU per "segnalare" alcuni particolari eventi (due numeri sono uguali, un numero maggiore di
un'altro, ecc). Il doppio click su di esse ne cambia il valore. Le flags hanno sempre un ruolo
importante nell'attivit di reversing.
Infine l'ultimo settore riguarda i FPU, ovvero i registri "Floating Point Unit". Questi vengono presi
in considerazione ogni volta che la CPU effettua dei calcoli matematici con numeri decimali e per
questo motivo vengono raramente usati dai reverser, se non durante l'analisi di cifrari.
3. Lo Stack
Lo "stack" una parte della memoria riservata al file binario per memorizzare delle informazioni
temporanee. Quest'ultime comprendono i puntatori agli indirizzi di memoria, le stringhe, i marcatori
(markers) e i pi importanti nel nostro caso, gli indirizzi di ritorno quando il codice chiama una
funzione. Quando un metodo (o funzione) di un programma chiama un'altro metodo, il controllo
deve dunque essere spostato a questo nuovo metodo in modo che possa ritornare. La CPU deve
memorizzare dove questo nuovo metodo stato chiamato cosicch quando questo termina,
l'esecuzione del programma riprende da dove il metodo stato chiamato. In conclusione, lo stack
quella porzione di memoria dove la CPU pu trovare gli indirizzi di ritorno.
Un'altra cosa da sapere sullo stack riguarda la sua struttura chiamata "LIFO" (First In, Last Out).
Una metafora comunemente usata per descrivere questa caratteristica la pila di piatti: quando
aggiungi (push) un piatto nella cima, tutti i piatti scalano di una posizione verso il basso; quando
invece rimuovi (pop) un piatto sempre dalla cima, tutti gli altri piatti si alzano di un livello.
Vedremo tutto questo in azione nel prossimo tutorial quindi non preoccupatevi se tutto ci pu
sembrarvi un po' confuso.
Nell'immagine soprastante, la prima colonna rappresenta l'indirizzo di ogni dato inserito nello stack,
la seconda colonna riservata alla rappresentazione in esadecimale 32-bit del dato e l'ultima invece
riporta l'eventuale commento di Olly; ad esempio, nel primo risultato il commento "RETURN to
kernel..." che indica l'indirizzo che verr letto dalla CPU quando il metodo corrente avr terminato
la sua esecuzione per ritornare alla posizione prima del "salto" alla funzione.
In Olly possibile premere il tasto destro del mouse sullo stack e scegliere modify per
modificarne il contenuto.
4. Il Dump
Prima, quando abbiamo parlato degli "opcode" che la CPU legge all'interno di un binario, avevo
anticipato che possibile "vedere" direttamente gli opcode attraverso un editor esadecimale. Beh,
con Olly quest'ultimo non necessario. La finestra del "dump" proprio un editor esadecimale
integrato che permette la visualizzazione del contenuto del binario con l'unica differenza che questo
tipo di informazione salvata nella memoria, non nel disco. Di solito viene rappresentata in due
modalit: esadecimale e ASCII, rispettivamente la seconda e terza colonna dell'immagine
soprastante (nella prima colonna invece riportato l'indirizzo di memoria dove "contenuto" il
dato). Olly inoltre consente la modifica del dump ed quello che vedremo pi avanti in un tutorial.
Questi sono i principali comandi per eseguire codice. Tenete presente che, soprattutto quando
iniziate a utilizzare Olly, tutti questi pulsanti sono accessibili anche dal menu a discesa "Debug" ,
quindi se non sapete qualcosa, potete usarlo come punto di riferimento.
Far un paio di osservazioni su alcune icone. Re-load sostanzialmente ci permette di riavviare
l'applicazione e metterla in pausa in corrispondenza dell'entry point. Tutte le patch (vedi pi avanti)
saranno rimosse, alcuni breakpoints disabilitati, e l'applicazione non eseguir alcun codice, beh,
almeno nella maggior parte dei casi. Run e Pause fanno proprio questo. Step In significa che
verr eseguita soltanto una riga di codice e poi il programma andr in pausa, richiama una chiamata
di funzione nel caso fosse presente. Step Over [F]fa la stessa cosa, ma passa al di sopra di una
chiamata a un'altra funzione. Animate proprio come Step In e Over fatta eccezione per il fatto
che lo f in modo lento, permettendovi di sbirciare[F]. Probabilmente non lo utilizzerete spesso, ma
Ognuna di queste icone apre una finestra, alcune le utilizzeremo spesso, altre invece un po piu
raramente. Dal momento che che le lettere utilizzate non sono tra le pi intuitive, potreste anche
fare come ho fatto io e iniziare a fare clic su ogni bottone finch trovate quello che vi serve.Sappiate
comunque che ogni bottone accessibile anche dal menu View ,questo potrebbe aiutarvi a
comprendere meglio le lettere a cui sono associati. Adesso per voglio esaminare insieme a voi
alcune delle finestre pi comuni :
1. (M)emory
2. (P)atches
Questa finestra visualizza tutte le "patch" fatte, in altre parole, qualsiasi modifica al codice originale
che avete realizzato. Da notare che lo stato impostato come attivo; se si ri-carica l' applicazione
(facendo clic sull'icona re-load) queste patch saranno disabilitate(e andranno perse).Al fine di
riattivare (o disattivarle) sufficiente fare clic sulla patch desiderata e premere la barra spaziatrice.
Questo vi permetter di impostare a vostro piacimento lo stato della patch su on oppure off. Inoltre
nelle colonne Old e New verranno mostrate le istruzioni originali, e quelle modificate.
3. (B)reakpoints
Questa finestra mostra dove sono impostati tutti i breakpoints in uso. Farete amicizia molto presto
con questa finestra
3. (K)all Stack
(Accidenti, proprio non riesco a capire come mai i principanti facciano cos tanta fatica a ricordare
queste icone ...)
Questa finestra diversa dallo "stack" che abbiamo visto in precedenza. Mostra molte pi
informazioni sulle chiamate compiute nel codice, i valori inviati a queste funzioni, e tanto altro
ancora.Vedremo qualcosa in pi a breve.
* Nel prossimo tutorial metter a disposizione la mia versione di Olly con molti 'aggiornamenti',
alcuni dei quali vi permetteranno di avere dei pulsanti che finalmente potrete capire. Ecco una foto
*
Il menu contestuale
Per l'ultimo elemento di questo tutorial, ho voluto farvi conoscere rapidamente il menu del tasto
destro in Olly. Da qui possibile eseguire moltissime azioni, e proprio per questo vi consiglio di
familiarizzare con tutti i comandi messi a disposizione da questo menu. Facendo clic sul tasto
destro del mouse in qualsiasi punto della sezione disassembly vi apparir questo:
Per ora mi limiter a ripercorrere gli elementi pi popolari. Man mano che acquisite esperienza,
finirete per sfruttare anche le opzioni meno utilizzate.
Binary consente la modifica dei dati binari byte per byte. Da qui per esempio, possibile
modificare una stringa sotterrata nel binario da "Unregistered" a "Registered" . Breakpoint
consente di impostare un punto di interruzione nel codice. Ci sono diversi tipi di breakpoints, ma li
andremo ad analizzare nel prossimo tutorial. Search For un sottomenu piuttosto grande , dov'
possibile cercare dati come stringhe,chiamate di funzione etc all'interno di un binario. Analysis
forza Olly a ri-analizzare la sezione di codice che si sta visualizzando. A volte Olly si confonde tra
la visualizzazione del codice o dei dati (ricordate che entrambi sono solo numeri)questo costringe
Olly a considerare dove siete nel codice e a tentare di indovinare a cosa questa sezione dovrebbe
appartenere.
Ricordate inoltre che il mio menu avr un aspetto diverso dal vostro, in quanto ho installato alcuni
plugin e aggiunto alcune funzionalit. Ma non preoccupatevi, torneremo su questo argomento nei
prossimi tutorial.
-Alla prossima.
R4ndom