- UNIVERSITA' ITALIANA CRACKING -
1° Corso per Studenti

 CRACKARE UN PROGRAMMA


INTRODUZIONE:  

Benvenuti nel primissimo progetto della UIC, in questo documento vi verrà spiegato il funzionamento di un determinato tipo di protezione utilizzato dai programmatori e poi vi verrà chiesto di crackare un determinato e semplicissimo programma scritto per l'occasione, il limite di tempo è per il 1° settembre dopodichè tutte le soluzioni che arriveranno non saranno ritenute valide, buon lavoro.


Scarica qui il programma per questo corso (5 kb)


Allora ragazzi, quest'oggi si parla di cracking vero e proprio, vi è mai capitato di andare nel menu di registrazione di qualche programma e di aver visto un menu nel quale vi veniva chiesto di inserire nome e numero? Bhè sicuramente si dal momento che questo è il sistema di protezione più utilizzato, in questo corso spiegherò il funzionamento di questa protezione e vi spiegherò come è possibile crackarla senza dover studiare l'algoritmo per farne un keymaker.

Una volta inserito un nome (Quequero) e premuto OK il programma non fa altro che calcolare con una routine proprietaria un numero che va poi a confrontare con il numero inserito da noi, se combaciano allora si ha la registrazione con tutti i suoi vantaggi, potremmo quindi comprare il codice legalmente ma anche così non scopriremmo ciò che ci interessa cioè: come è protetto il programma. Con un po' di Zen scopriamo subito che le vie di registrazione possibili sono: forzare la registrazione stessa cambiando qualche jmp, far credere al programma di essere registrato cambiando il codice che all'avvio va a cercare nel registro il seriale oppure creare un keygenerator. La soluzione che adotteremo oggi sarà la prima, ma non disperate, nei prossimi corsi spiegheremo tutte le altre.

Bene bene, una volta avviato un programma con questo tipo di protezione avrete circa tre possibilità per breckare all'interno del codice e queste sono:

- mettere un breakpoint su GetWindowTextA, in sice: bpx GetWindowTextA

- mettere un breakpoint su GetDlgItemTextA, in sice: bpx GetDlgItemTextA

- mettere un breakpoint su hmemcpy, in sice: bpx hmemcpy

Fatto ciò, in ognuno dei tre casi premete ok e sice popperà, uscite dalla chiamata con F11 e fate F12 finchè sulla barra verde in basso non vedete scritto il nome del programma al posto di Kernel32!....Oppure User32!..ecc...

Steppate come siete soliti fare con F10-F8 e cercate la/le chiamata/e che genera/no il seriale, una volta oltrepassata la call che fa i vari calcoli potreste avere il serial in qualche registro o nello stack in forma crittata o più semplicemente in forma pura, state attenti perchè spesso una chiamata calcola un seriale ed una seconda chiamata fa dei calcoli sul numero pervenuto ecc...Passate tutte le chiamate il programma certamente farà un check sul risultato e deciderà se il seriale era esatto o meno, bene questo è il momento nel quale dovrete agire. Vi do alcuni consigli, spesso e volentieri troverete qualcosa del genere:

call 00412345
test eax, eax
jnz  giusto_seriale
call MessageBoxA_Seriale_errato

in pratica la chiamata riporta 1 in eax se il serial era esatto e 0 se era sbagliato, anche se può essere il contrario, altre volte avrete avanti cose del genere:

mov  eax, tuo_serial
mov  ebx, serial_esatto
cmp  ebx, eax
jne  Beggar_off
call MessageBoxA_Registrazione esatta

in pratica se andrete a spulciare nel registro avrete in questo caso chiaramanete il serial, per crackare queste due protezioni basta solo forzare i jump, potete anche trovare dei check multipli e spesso il serial viene Xorato (andate a leggere il mio aritcolo sullo xor alla UIC) per non essere reso visibile in questo modo:

mov  eax, tuo_serial
mov  ebx, serial_esatto
xor  eax, qualche_valore
xor  ebx, stesso_valore_di_sopra
cmp  ebx, eax
je   Registrazione_Avvenuta
.......

in pratica il vostro serial non si vede prima del check ma a voi non interessa perchè tanto quello che dovete fare è forzare il jump.

Ok per questa lezione ci fermiamo qui dal momento che questo metodo è il primo che si impara, impareremo altre tecniche nelle prossime lezioni e se tutti gli iscritti finiranno prima del 1° settembre la seconda lezione comparirà anch'essa prima.


OBIETTIVI:  
  1. Crackare il programma in modo da far apparire il messaggio di registrazione avvenuta avvalendosi solo di SoftIce e cambiando il MINOR NUMERO POSSIBILE di istruzioni
  2. Scrivere un tutorial dettagliato sui check del programma
  3. ***opzionale*** trovare il seriale esatto
  4. ***opzionale*** spiegare come viene generato il seriale

Quequero


[Back]