mercoledì 28 dicembre 2011

WinZip 9.0 vergognosamente reversato

Ho gia' fatto qualche articolo introduttivo per farvi conoscere il mondo del reverse engineering e so che la maggior parte di voi avrà pensato che il reversing di software veri (e non di semplici CrackMe) sia una cosa per geni che studiano il reversing da anni, per questo voglio dimostrarvi che non è così.
In questo articolo vorrei, appunto, illustrarvi quanto il reversing di software proprietari non sia lontano anni luce dalle conoscenze di un reverser apprendista, analizzando e crackando con voi il secondo software di compressione piu utilizzato al mondo.
Prerequisiti:
Per addentrarvi in questo articolo, si presume che abbiate almeno qualche base di programmazione asm x32 (o superiore), una conoscenza relativamente elevata della CPU (quindi dello stack, dei registri e dei flags), e un minimo di dimestichezza col vostro debugger (io faro' riferimento ad OllyDBG).
Iniziamo:
Come prima cosa scarichiamo il programma in questione (WinZip 9.0) dal web o da QUA, installiamolo, e diamolo in pasto al debugger.
Premiamo quindi F9 per avviare il programma e posizioniamoci sulla finestra di registrazione.
Torniamo, ora, a guardare il debugger e notiamo facilmente che le API che chiama il programma sono le classiche di windows; da questo possiamo dedurre che il programma legge il nostro username e la nostra password con una CALL a "GetDlgItemTextA".
Apriamo quindi la command box e posizioniamo 2 bp sulle 2 chiamate (2 perche' deve leggere usn e psw).
Adesso proviamo a mettere usn e psw inventati e vediamo come ragiona il programma (ovviamente al premere del tasto "enter" olly lo brekkerà).
A questo punto siamo arrivati al momento in cui il programma legge l' username, crea la password in base all'username e confronta la password vera con quella immessa da noi.
Adesso steppiamo con F8 fino a che il programma non legge la nostra password e fermiamoci alla seconda call. Guardiamo qualche riga piu' avanti e notiamo che c'e' il classico schema:

CALL
TEST pass.nostra, pass.vera
Jcc (mi sembra un Je ma non posso verificare visto che sono sull'ipod)

Da questo possiamo dedurre che quella call elabora la password, quindi entriamo nella Call con F7.
Dentro questa call c'e' una seconda call che elabora appunto la password.
Quindi l'ultima cosa che dobbiamo fare e' brekkare sulla call e riavviare il programma con Ctrl+F2.

Adesso il programma si fermera sulla call e questa, elaboerera' la password e la mettera' nello stack; quindi steppando 2 volte con F8, dopo un "POP EBX", ci ritroveremo la password in EBX.

Spero di essere stato abbastanza chiaro nella spiegazione e spero di avervi fatto capire quanto il reversing vero non sia proprio una cosa da alieni.
Infine, nel caso abbiate problemi nel trovare la password mandatemi una mail e sarò felice di aiutarvi.

Nessun commento:

Posta un commento

Ti potrebbero anche interessare

Related Posts Plugin for WordPress, Blogger...