Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Rendere possibile l'interfacciarsi con il legacy code (di cui non si ha il codice sorgente
originale).
Rompere le protezioni (ie. Stupire i vostri amici e risparmiare qualche $$).
Studiare virus e malware.
Valutare la qualit e la solidit di un software.
Aggiungere funzionalit ad un software esistente.
La prima categoria reversare il codice quando il sorgente non disponibile, al fine di interfacciarsi
con binari gi esistenti. Non discuter molto di questo argomento, in quanto noioso.
La seconda categoria (la pi grande) consiste nel rompere le protezioni. Con questo si intende
bypassare i Trial/Demo, oltrepassare i sistemi di controllo delle licenze, o comunque tutto ci che ci
permette di ottenere un software commerciale in modo gratuito. Di questo discuteremo a lungo.
La terza categoria ci d la possibilit di studiare virus e codice malware. richiesto il reverse
engineering, perch non sono molti i programmatori di virus che danno informazioni su come
hanno scritto il codice, quello che f, e come lo far (a meno che non siano veramente stupidi).
Questo un campo piuttosto eccitante, ma richiede una grande quantit di conoscenze. Di questo
parleremo in seguito.
La quarta categoria ci d la possibilit di testare la sicurezza e le vulnerabilit del software. Durante
la creazione di software di grandi dimensioni (il sistema operativo Windows per esempio), il
reverse engineering usato per fare in modo che il sistema non contenga importanti vulnerabilit,
falle di sicurezza, e di renderlo il pi difficile possibile da craccare.
L'ultima categoria permette l'aggiunta di funzionalit a un software gi esistente. Personalmente,
penso che sia una delle pi divertenti. Non ti piace la grafica utilizzata nel software di web design
che utilizzi? cambiala. Vuoi aggiungere una voce di menu per crittografare i documenti del vostro
programma di videoscrittura preferito? Aggiungila. Vuoi infastidire i tuoi colleghi a non finire con
l'aggiunta di finestre di messaggio sprezzanti alla calcolatrice di Windows? Allora facciamolo!
Vedremo come pi in avanti nella serie.
1. Disassemblers
I disassemblatori tentano di prendere il codice macchina da un eseguibile e di visualizzarlo in un
formato pi amichevole. Sono anche in grado di estrapolare dati come le chiamate di funzione, le
variabili passate e le stringhe di testo. Questo rende il look e il codice di un'eseguibile pi leggibile
rispetto a una serie di numeri legati insieme. Ci sono molti disassemblatori , alcuni dei quali
specializzati in cose specifiche (come ad esempio i binari scritti in Delphi). Per lo pi si tratta di
usare quello a voi pi comodo. Mi sono sempre ritrovato a lavorare con IDA (c' una versione
gratuita disponibile su http://www.hex-rays.com/), cos come con un paio di disassemblatori meno
noti che posso aiutarci in situazioni particolari.
2. Debuggers
I Debugger sono come il pane e il burro per i reverse engineers. In primo luogo analizzano il
binario, in modo molto simile a un disassembler Debugger quindi consentono di eseguire il codice,
riga per riga dandoci modo di studiare i risultati prodotti. Questo ha un valore importantissimo al
fine di scoprire come funziona un programma. Infine, alcuni debugger consentono di modificare
alcune istruzioni nel codice e di eseguire nuovamente il programma con questi cambiamenti in atto.
Esempi di debugger sono Windbg e OllyDbg. Uso quasi esclusivamente OllyDbg
(http://www.ollydbg.de/), salvo per il debug in modalit kernel , ma a questo penseremo pi avanti.
3. Hex editors
Gli editor esadecimali(o hex editors) consentono di visualizzare i byte effettivi di un binario, e di
modificarli. Forniscono inoltre la possibilit di cercare dei byte specifici, risparmiando le sezioni di
un binario su disco e molto altro ancora. Ci sono molti editor esadecimali gratuiti, e la maggior
parte di loro andr bene. Non li useremo moltissimo , ma in seguito ci torneranno sicuramente di
grande aiuto.
Ci sono strumenti che prenderemo lungo il cammino, come gli script, unpackers, identificatori di
packer etc. Anche questa categoria una sorta di riferimento alle API di Windows. Le API sono
enormi, e, a volte, complicate. E 'estremamente utile per il reverse engineering sapere esattamente
cosa stanno facendo le funzioni che vengono chiamate.
7. Birra.
Come potete notare ci sono delle cartelle per le bitmap (qualsiasi grafica il programma visualizza),
Menu (le voci di menu in alto), Dialog (le finestre di dialogo, insieme con il testo e i pulsanti),
String Table, IconGroup etc. Sentitevi liberi di pasticciare con queste cose. Solo assicuratevi di
salvare le modifiche in un'altro file (sarebbe davvero odioso dover reinstallare Windows solo per
una stupida calcolatrice). In particolare, provate a fare questo: Fate clic sul segno pi accanto al
Menu. Vedrete una cartella con un numero come un nome. Questo l'ID che Windows user per
accedere a questa risorsa del programma. Aprite pure questa cartella. Ora dovreste vedere un'icona
per "Inglese (Stati Uniti)", o qualcosa di simile. Se ci fate clic su vedrete un diagramma di come
sar il men (potete cliccare dappertutto- funziona proprio come il menu vero e proprio).
Ora, fate clic sul menu "Scientifico". Il campo della Caption dovrebbe cambiare in &Scientific.
La e commerciale l per dirvi qual' la 'Hot-Key', in questo caso 'S'. Se invece volessimo
cambiarla in 'e' , il risultato sarebbe simile a Sci&entific. Quindi non vi piaciono le hotkeys
(Tasti di scelta rapida) per la Calcolatrice? Potete cambiarli !! Ma facciamo qualcosa di diverso. Nel
campo Caption, sostituite la &Scientifica con &Nerd. Questo cambier l'opzione di menu a
"Nerd" e la nuova hot-key sar 'N' (Ho dato un'occhiata alle altre opzioni del menu e nessun'altra
opzione faceva utilizzo di 'N' come hot-key). Dovreste fare questo per tutte le voci del menu.. Ora,
andate in File (in XN Resource) e fate "Salva con nome ..." Salvate la nuova versione della
calcolatrice con un nome diverso (e preferibilmente in una posizione diversa) ed eseguitela.
Naturalmente, non c' bisogno di fermarsi qui. Con lo scopo di far impazzire i miei colleghi, ho
cambiato tutti i numeri nelle loro calcolatrici.
-R4ndom
ps. I miei ringraziamenti vanno a Lena151, per avermi mostrato la via, A.S.L., Snaker, Qwerton e
Jibz per avermi mostrato i segreti, e Olly, Yoda-mmi, UCF e Colin Wilson per avermi fornito gli
strumenti necessari.
Tradotto con amore da Gmarksa(Versione Beta). Link guida originale in lingua inglese :
http://octopuslabs.io/legend/blog/archives/7.html
Letture consigliate
1. Assembly Language. Assembly Language For Intel Based Computers
is the de-facto book on it . You can also check out some web sites that offer a tremendous amount
of downloads , instruction , sample code , and help . Another good resource is The Art of
Assembly. I will be including this in one of the next tutorials, but you can also download it here .
2. The PE file structure. One of the best resources is from Microsoft themselves: An in-depth
look into the Win32 Portable Executable File Format . Another good document (with lots of pretty
pictures) is PE File Structure . It is a downloadable PDF.
3. Windows Operating System Internals. The de-facto book is Microsoft Windows Internals by
Mark Russinovich. Its about as exciting as womens baseball, but it is THE resource.
4. Cracking tutorials. www.Tuts4You.com is the place to be.