KeyGen fishing in GetRight 3.2 e 4.2<
Troviamo un seriale valido


26/12/99

by "AndreaGeddon"

 

 

UIC's Home Page

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
Home page:  www.andreageddon.8m.com
E-mail: [email protected]
IRC chan:   #crack-it
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.


KeyGen fishing in GetRight 3.2 e 4.2
Troviamo un seriale valido
Written by AndreaGeddon

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:

0043099F    CALL     00469718

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

 

Note finali

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

Queste informazioni sono solo a scopo puramente didattico.

 
UIC's page of reverse engineering, scegli dove andare:

Home   Anonimato   Assembly    CrackMe   ContactMe   Forum   Iscrizione      
       Lezioni    Links   Linux   NewBies   News   Playstation        
  Tools   Tutorial   Search   UIC Faq

UIC