Blanch 1.9e
Serial Fishing

Data

by bender!

 

09/09/2003

UIC's Home Page

Published by Quequero

"wafers, lots of wafers"

Grazie bender soprattutto per la mini-introduzione all'Olly che puo' comunque tornare utile.

hi hi hi!

....

E-mail: [email protected]

....

Difficoltà

(!)NewBies ( )Intermedio ( )Avanzato ( )Master

 

Come registrarsi senza reversare chilometri di code - sfruttando i punti deboli della protezione.


Blanch 1.9e
Serial Fishing
Written by bender!

Introduzione

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 usati

Tools usati:
OllyDbg 1.09d

URL o FTP del programma

http://oneguycoding.com/

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...
-FINE NOTA-
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...

00401A6A push eax                   ->Pointer al code
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...

0040B0EF push edx                   ->viene pushato un numero calcolato in precedenza (arg)...
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! E' 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 l'OllyDbg leggendo queste righe... è un'eccellente debugger.
Cmq... per qualsiasi cosa, mandatemi un'email e... grazie a tutta la UIC! :-P [bender!]

Disclaimer

Vorrei ricordare che il software va comprato e  non rubato, dovete registrare il vostro prodotto dopo il periodo di valutazione. Non mi ritengo responsabile per eventuali danni causati al vostro computer determinati dall'uso improprio di questo tutorial. Questo documento è stato scritto per invogliare il consumatore a registrare legalmente i propri programmi, e non a fargli fare uso dei tantissimi file crack presenti in rete, infatti tale documento aiuta a comprendere lo sforzo immane che ogni singolo programmatore ha dovuto portare avanti per fornire ai rispettivi consumatori i migliori prodotti possibili.

Noi reversiamo al solo scopo informativo e di miglioramento del linguaggio Assembly. Beh, anche per divertirci :-D