Blanch 1.9e
From UIC
Blanch 1.9e: Serial Fishing
Contents |
| Infos | |
|---|---|
| Author: | Bender0 |
| Email: | |
| Website: | http://www.bender0.altervista.org/ |
| Date: | 09/09/2003 (dd/mm/yyyy) |
| Level: |
|
| Language: | Italian |
| Comments: | |
Introduction
Bene bene bene... Un serial fishing facile facile per Blanch 1.9e. Ovviamente da bravi reverser non toccheremo nessun byte del programmino, ma otterremo il serial corretto.
Tools
Link e Riferimenti
http://oneguycoding.com/ per recuperare Blanch.
Notizie sul Programma
Una simpatica quanto inutile launch bar - beh, dobbiamo reversarla, non usarla! La protezione: classico name\serial.
Essay
Per la cronaca, questo è il mio primo tute... Detto questo, cominciamo.
Installato il programma bersaglio? Ok, apriamolo con l'Olly, e con F9 lo eseguiamo. Click destro, "About", "Registration": ecco gli Edit che ci interessano. Come al solito scriviamo a caso, "Register Copy" e... beh, sembra una MessageBox! Per entrare possiamo mettere un break o su GetDlgItemTextA o su MessageBoxA...
NOTA:
Per settare breakpoint on execution con l'OllyDbg si può usare il plug-in commandline (Alt+F1). Scrivendo "bpx MessageBoxA" si apre una finestra, delle "intermodular calls", con tutte le API che il programma chiama. Trovata la API interessata, con F2 si setta il breakpoint. Notare che se il programma chiama MessageBoxA 30 volte troverete 30 linee, e dovrete mettere un break su tutte.
Vi risparmio il lavoro: mettete il break solo sulla GetDlgItemTextA a 401A08.
Ancora "Register Copy" e siete dentro, un pò di stepping (Step Over->F8), e arriviamo qui:
00401A6B push ecx →Pointer al nome
00401A6C mov dword ptr [0042BB98], eax
00401A71 call 00401299 →Una call con nome e code come argomenti? mooolto sospetto...
00401A76 add esp, 0000000C
00401A79 test eax, eax →controlla il risultato...
00401A7B jne 00401AA2 →...e decide se fotterci o ringraziarci!
00401A7D push FFFFFFFF
00401A7F Call USER32.MessageBeep
00401A85 push 00000010
00401A87 push 00428F1C →"Registration Error"
00401A8C push 00428E38 →"Error registering! Please try again."
00401A91 push esi
00401A92 Call USER32.MessageBoxA →MessageBox di errore tipo "ritenta sarai più fortunato"...
...
00401AA2 push 00000030
00401AA4 push 00428E30 →"Thanks"
00401AA9 push 00428DF8 →"Thanks for your All in One Guy Registration!"
00401AAE push esi
00401AAF Call USER32.MessageBoxA →MessageBox di ringraziamento
Certo, arrivati a 401A79 potremmo cambiare la zero flag (nella Registers Window, click sul numero vicino alla Z e Enter), un F9 e compare la MessageBox giusta... ma nel registro di win finisce il code sbagliato, e al prossimo avvio il prog sarà unregistered (notare la nag screen). Ricordate la call sospetta? Arrivati lì, Step Into(F7), e ci troviamo di fronte a una routine piuttosto lunga... ma dopo tre pagine di code, cosa vedo? Un mare di codice senza senso?!? No, questo:
0040B0F0 push 00429A3C →viene pushata la stringa "%lx" (format control string)!!!
0040B0F5 push 0042C8D4 →e un indirizzo (output string)...
0040B0FA call 0041ABD0 →ecco la call...
Non ho capito come si fa a far risolvere le funzioni del C all'Olly... ma qui non serve! È indubbiamente una chiamata alla sprintf... e sappiamo che pushando "%lx" il numero in edx verrà stampato sulla stringa di output come un esadecimale con le lettere minuscole... che sia il serial? Per scoprirlo, Step Over sulla call e date un'occhiata a fianco alla riga 40B0F5. Se l'Olly trova un pointer a qualcosa di notevole, come una stringa, lo scrive a fianco... Beh annotatevela: al nome "bender!" corrisponde "10660fe".
Togliete i break, scrivete lo stesso nome e il serial appena fishato e, guarda un pò, si registra!
Ricapitolando: il prog prende nome e codice, chiama una funzione che fa dei calcoli (che non abbiamo dovuto reversare), e stampa il risultato su una stringa, che confronta poi col nostro codice... E il risultato della funzione decide la registrazione.
Note Finali
Beh, se vendessi le mie appz a 20 dollarozzi le proteggerei meglio!
Spero che qualcuno impari a usare OllyDbg leggendo queste righe. È un'eccellente debugger.
Per qualsiasi cosa mandatemi un'email e... grazie a tutta la UIC! :-P
Disclaimer
I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.
Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevoli e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.