KeyGen fishing in GetRight 3.2 e 4.2< |
|
|
26/12/99 |
by "AndreaGeddon" |
|
|
Published by Quequero |
|
Il cucchiaio non esiste... |
Oki, stavolta niente commenti cattivi per Andrea :)....Peccato, � la parte pi� bella, quella che rende il tute pi� leggero da leggere :))))...Cmq bravo, ottimo il tute sul getright :) |
... ma la forchetta si! |
UIC's form |
|
UIC's form |
Difficolt� |
(X)NewBies (X)Intermedio ( )Avanzato ( )Master |
Vediamo come si fa a trovare un seriale valido per Getright 3.2 e 4.2. Scriver� presto il prossimo tute su una nuova versione.
Introduzione |
Questo serial fisching me lo porto appresso da quando ho iniziato la carriera di reverser. Il problema qui non � la difficolt�, � la pazienza. Infatti la routine � facile da capire, ma il brutto � trovarla nel mare di codice inutile... comunque, un p� a culo l'ho trovata, dopodich� � stata ua questione di qualche minuto. Onde evitare che l'iflessibile mannaia dell'intrpido correttore Quequero mi cada tra capo e collo (come nel mio ultimo tute), premetto che la mia tastiera � ancora quella del 486, ed ha dei problemini, soprattutto con il tasto "n" , quindi � probabile che scappi qualche n di troppo. Siate comprensivi :-)
Tools usati |
- SoftIce
URL o FTP del programma |
http://www.headlightsw.com/getright
Notizie sul programma |
Serial number senza nome. Solo un seriale numerico di 12 cifre.
Essay |
Iniziamo. Avviate GetRight e andate su Help->About GetRight e premete sul pulsante Enter Code... Apparir� la fiestrella col textbox. notate subito chepotete inserire solo numeri, e non ci sono restrizioni sulla lunghezza del seriale, a parte che il numero massimo di cifre che potete inserire � 30. Ma un serial di 30 cifre mi sembra un p� strano. Inoltre, avendo giocato con i vari keygen del getright, � stato facile notare che il seral deve essere di 12 cifre. Ma noi questo non lo sappiamo, quindi iniziamo inserendo un numero a caso (io di solito inserisco sempre nome e serial di 12 cifre, e molte volte ci azzecco). Settate un bpx getwindowtexta e premete su Ok. Il softice popper�. Premete F12 e sarete nel processo del getright. Ora iniziano i cazzi. Se provate a steppare con F8, vi ritroverete ben presto persi nel groviglio immenso di call, il che render� molto difficile seguire il tutto senza prendere appunti su carta delle varie call e dei vari indirizzi. Inoltre vedrete che il programma ha a che fare con una marea di numeri da 12 cifre in memoria. Non scrivetevli, quelli fanno parte della BlackList, cio� dei numeri che non possono essere pi� utilizzati. Se per curiosit� volete inserirne uno, il programma vi dir� di non piratare il software, e verr� disabilitato il tasto Enter Code. Per far tornare tutto alla normalit� dovrete cancellare la seguente chiave nel registro:
HKEY_CURRENT_USER\Software\HeadLight\GETRIGHT
Anche nel caso vi siate gi� registrati potete cancellare la chiave per tornare non registrati. Quindi, lasciamo stare i controlli con la blacklist e cerchiamo una routine che ci possa servire. Se siete beoti come me, ci arrivate dopo un saaaaacco di stepping, senn� basta seguire la logica. Allora, dopo che il softice � poppato e che siamo tornati al processo del getright, ci troveremo all'indirizzo 0047740F. Iniziamo a steppare con F10. Cerchiamo una routie che ci possa sembrare sospetta, ma al tempo stesso non vogliamo entrare in tuuuutte le call che troviamo. Allora steppando con F10 possiamo osservare tutte le call su cui passeremo sopra. Steppate, eseguite i molti RET, steppate, finch� arrivate alla linea
00433FA3 CALL 0043096A
TEST EAX, EAX
JZ xxxxxxxx ---> indirizzo porno? no. Non ricordo le cifre :-)
Questa � la prima call che abbia di seguito unn test eax, eax e un jz. Quindi attira la nostra attenzione. Entriamoci, e ci ritroveremo nella tana del bianconiglio (si vede che ho appena visto matrix?). Iniziamo a steppare pure qui con F10, tutte le call e sub-call sono inutitli, non perdeteci tempo come me ;-). Innanzitutto, dopo qualche linea si arriva subito al dunnque, cio� al controllo del numero di cifre del serial:
00430988 CMP dword ptr [eax-08|, 0C
JZ xxxxxxxx
XOR eax, eax
okay, quindi se il serial non � di 12 cifre (0C hex) il JZ non viene eseguito, viene azzerato eax e veniamo buttati fuori dalla routine. Inoltre l'azzeramento di eax verr� controllato quando torniamo alla linea 00433FA3, sotto la call. In effetti, tutta questa routine deve restituire unn non-zero in eax, altrimenti il programma capisce che il serial � sbagliato. Ma allora non possiamo semplicemente modificare il JZ sotto il TEST eax, eax? Si, ma il programma non � cos� stupido. Non vi dar� il messaggio di errore, ma ci sono altri innumerevoli check del serial, se volete tentare l'approccio del cracking, allora divertitevi a trovare tutti i controlli! Comunque, ora sappiamo per certo che il serial deve essere di 12 cifre (e non perch� ve l'ho detto io). Continuiamo. Uscite da questa routine, riarrivate alla linea 0043096A, e visualizzate il registro ECX. Ci troverete un putatore del tipo 013Axxxx. Questo � l'indirizzo del serial che stiamo per analizzare. Nota che questo indirizzo cambier� ogni volta che rieseguite la routine, quindi ogni volta che tronate in questa routine dovrete rivedere ecx per sapere quale locazione contiene il serial che fra poco verr� elaborato. Visualizzate tale locazione e lasciate la data window su quella locazione. Iniziate a steppare. Dopo la linea:
apparir�, due righe sotto la locazine del serial, un numero seguito da uo spazio, poi da due cifre. Se andate avanti e rimanete a guardare la data window, vedete che compariranno incolonnati 12 numeri (ma v�... quelli del serial??) solo che non saranno nell'ordine in cui li avete scritti. Okay, quindi qui vengono presi tutti i numeri del serial. E' un buon indizio. Ma che ci fa? Beh, vi risparmio la curiosit� di entrare nelle call e sub-call, e vi posto il codice relativo alla prima cifra:
:00430995 push esi
:00430996 push edi
:00430997 lea eax, dword ptr [ebp-0C]
:0043099A push 00000005
:0043099C push eax
:0043099D mov ecx, ebx
:0043099F call 00469718
prende la prima cifra:004309A4 push dword ptr [eax]
:004309A6 call 00458AF0
:004309AB pop ecx
:004309AC mov esi, eax
:004309AE lea ecx, dword ptr [ebp-0C]
:004309B1 mov dword ptr [ebp-10], esi
:004309B4 call 0046F992
:004309B9 push edi
:004309BA lea eax, dword ptr [ebp-14]
:004309BD push 00000008
:004309BF push eax
:004309C0 mov ecx, ebx
:004309C2 call 00469718
prende la seconda cifra:004309C7 push dword ptr [eax]
:004309C9 call 00458AF0
:004309CE pop ecx
:004309CF mov dword ptr [ebp-0C], eax
:004309D2 lea ecx, dword ptr [ebp-14]
:004309D5 call 0046F992
:004309DA mov eax, dword ptr [ebp-0C]
:004309DD push 0000000A
:004309DF add eax, esi
somma le due cifre prese:004309E1 pop ecx
mette il divisore (0A hex) in ecx:004309E2 cdq
azzera edx:004309E3 idiv ecx
dividi la somma delle due cifre per 10 (0A):004309E5 cmp edx, 00000009
il resto � 9?:004309E8 je 004309EE
se si, salta:004309EA and dword ptr [ebp-08], 00000000
azzero un valore (che poi mi determiner� l'azzeramento di eax):004309EE cmp dword ptr [ebp-10], 00000000
:004309F2 mov esi, 004C033C
Non metto tutta la routine perch� � lunga, comunque � identica a questo frammento: prende una cifra, poi un'altra, le somma, divide il rusltato per 10 decimale e controlla che il resto sia uguale ad un dato valore. Quindi ci saranno 6 coppie di numeri con 6 divisioni per dieci, e sei resti diversi. Ora, le cifre vengono prese non nell'ordine in cui le abbiamo scritte. Se fate un p� di prove otterrete la seguente tabella:
La cifra presa per 1� corrisponde alla 6� cifra del serial inserito.
La 2� alla 9�
La 3� alla 2�
La 4� alla 7�
La 5� alla 3�
La 6� alla 12�
La 7� alla 4�
La 8� alla 5�
La 9� alla 8�
La 10� alla 11�
La 11� alla 1�
La 12� alla 10�
In base al serial inserito, ho notato che a volte vengono frapposti degli zeri tra le cifre, non ho ben capito il perch� ma sembra non disturbare il normale calcolo del serial. Ora proseguendo oltre il frammento di codice che vi ho messo, andate a trovare gli altri cinque IDIV e vedete quali sono i valori dei resti che il programma controlla. Se nonn li trovate, eccoveli:
1� coppia: resto 9
2� coppia: resto 3
3� coppia: resto 8
4� coppia: resto 0
5� coppia: resto 5
6� coppia: resto 2
A questo punto dovreste aver capito come generarvi un qualsiasi seriale valido, o no? Semplice, il prog prende la prima coppia di numeri che ha preso, li somma, li divide per 10. Per essere valida il resto della divisione deve essere di 9. E cos� via per le altre 5 coppie. Vediamo quindi un serial al volo:
1� coppia: 6� cifra e 9� cifra
(9�+6�)mod(10) deve essere = 9. Se scelgo i numeri 5 e 4, ottengo:
5+4 = 9, 9 mod 10 = 9 ok
2� coppia: 2� cifra e 7� cifra
8+5 = 13, 13 mod 10 = 3 ok
3� coppia: 3� e 12�
5+3 = 8, 8 mod 10 = 8 ok
4� coppia: 4� e 5�
7+3 = 10, 10 mod 10 = 0 ok
5� coppia: 8� e 11�
3+2 = 5, 5 mod 10 = 5 ok
6� coppia: 1� e 10�
1+1 = 2, 2 mod 10 = 2 ok
ora non ci rimane che ricostruirci il numero per intero, cio�:
1� 2� 3� 4� 5� 6� 7� 8� 9� 10� 11� 12�
1 8 5 7 3 5 5 3 4 1 2 3
et voil�, abbiamo il nostro serialuccio 185735534123. Abbiamo anche l'algo per farci il nostro bel keymaker.
UPDATE PER LA VERSIONE 4.2 ---------------------------------------------------------------------------------------------------------
Allora, ho scricato getright versione 4.2 che dovrebbe essere l'ultima in circolazione al momento in cui scrivo. Volevo fare un altro tutorial, ma visto che il serial fishing � praticamente identico, mi limito a fare un update di questo tutorial. Anche qui si inizia a breakre su getwindowtexta. Iniziate a steppare fino ad arrivare alla riga:
0047B381 CALL 0049973B
Steppate su questa call e verr� eseguito il essagebox di errore. Quindi dobbiamo vedere dove il codice sceglie se passare di qui o meno. Se risaliamo di qualche riga troviamo il seguente codice:
0047B36C CALL 0047607E vai ad una routine
TEST EAX, EAX controlla se eax=0
JZ se lo � salta al messaggio di errore
MOV ECX, EDI altrimenti prosegui
CALL XXXXXXXX ...
JMP 0047B388 e salta OLTRE il message di errore
vediamo che l'errore � determinato dal valore di eax. Viene spontaneo entrare nella call prima di test eax, eax, ma non ci troverete niente di importante. Quindi la routine che checka il seriale deve essere da un'altra parte. Continuate a risalire, e arrivate alla riga:
0047B307 CALL 00475B75 chiamata a routine
TEST EAX, EAX controlliamo il valore restituito
JZ 0047B365 salta alle routine che ho commentato poco fa
Anche da qui vediamo che il JZ ci manda dritti alle routine di poco fa (0047B365), quindi vediamo nella call che cosa succede. Entriamo e ci ritroviamo alla liea 00475B75. Date un'occhiata e... voil�. La routine di controllo. E' identica a quella del getright 3.2 , quindi adesso tornate su e leggete la parte che spiega questa routine per trovarvi il serial (che poi � lo stesso della versione 3.2). A parte gli indirizzi, la sequenza di istruzioni � pressoch� identica.
E pure qui abbiamo finito.
AndreaGeddon
|
Saluto tutti gli amici della mailing list. Saluto phobos con il quale ho condiviso questo cracking. Saluto cod, syscalo, e tutti gli altri che ora non mi vengono in mente. Saluto Quequero se e solo se non scriver� commenti cattivi su questo tute! :-P
Disclaimer |
Home
Anonimato Assembly
CrackMe ContactMe Forum Iscrizione
Lezioni Links Linux NewBies News Playstation
Tools Tutorial Search
UIC Faq