Corso 9 - Soluzione Newbie
-=Tecnica usata: cracking=-


10/06/2000

by "fantoibed"

 

 

UIC's Home Page

Published by Quequero


Per il ciclo, volevo fare il keygen, ma non ne sono (ancora) capace..   ;-)


Grazie anche a te fanto, bel tute.

SATOR  AREPO  TENET  OPERA  ROTAS 

UIC's form
Usenet: alt.hackers.cough.cough.cough  
E-mail: fantoibed@iname.com  
Irc: #ahccc (...ma raramente!)  
UIC's form

Difficoltà

(X)NewBies ( )Intermedio ( )Avanzato ( )Master

 

Prendiamo il WinRar e facciamo in modo che accetti la registrazione anche immettendo un codice errato.


Corso 9 - Soluzione Newbie

-=Tecnica usata: cracking=-

Introduzione

Nell'incapacita' di scrivere un generatore di chiavi, mi sono limitato a crackare il programma. Tutto sommato sono ancora un newbie.... Speriamo che Quequero si accontenti ;-)

Tools usati

SoftIce
W32Dasm
Hiew

URL o FTP del programma

http://uic.server101.com/prj/winrar.zip

Notizie sul programma 

E' un noto programma per gestire file compressi in vari formati. Richiede una chiave che cambia in funzione del nome che inseriamo. Io mi limito a sostituire un paio di jump, in modo che la registrazione venga fatta correttamente, anche se viene inserito un codice sbagliato.

Essay

Se siete arrivati alla lezione 9, significa che avete gia' capito un po' come funzionano i programmi che si usano per crackare, quindi non mi dilunghero' molto nei particolari, e se c'e' qualche API di cui non ricordate la corretta sintassi, andatevela a rivedere nell'apposito SDK!

Scompattate il programma ed eseguitelo. Per farlo serve l' RK Manager di Quequero, o almeno l'RK.exe che e' contenuto nel pacchetto. L'RK Manager presuppone la presenza di rk.exe in c:\windows\command, se per voi risulta scomodo mettere il file in questa posizione, potete sempre, da Prompt di DOS, fare rk -x winrar.rk e tutti i file saranno scompattati in c:\winrar.

Eseguite WinRAR.exe. Andate sul menu', e selezionate registration dal menu options. Vi apparira' una dialog box con due Edit. Su una bisogna mettere il testo e sull'altra il codice di registrazione. Se fate qualche prova vi accorgete che lasciando in bianco l'edit del codice non succede niente, se mettete qualcosa a caso, invece, apparira' una message box con Caption="Warning" e Testo="Registration failed".


Potete agire in due modi:

1) Aprire Softice e inserire un: bpx GetItemTexta.

2) Disassemblare WinRAR.exe con il W32Dasm e cercare la stringa "Registration failed".


Supponiamo che abbiate scelto la seconda tecnica (cosi' vado meglio io a fare copia e incolla hehehe). Trovate qualcosa del genere:


 * Reference to Dialog: ABOUTRARDLG
           |
:00409DB7  push 00000065
:00409DB9  call 00406EC8
:00409DBE  pop ecx
:00409DBF  push eax

* Reference to String : "Registration failed"
           |
:00409DC0  push 00000366
:00409DC5  call 00406EC8
:00409DCA  pop ecx
:00409DCB  push eax
:00409DCC  mov ecx, dword ptr [ebp+08]
:00409DCF  push ecx

* Reference To: USER32.MessageBoxA
           |
:00409DD0  Call 0044D449
:00409DD5  xor eax, eax
:00409DD7  mov dword ptr [0045157C], eax
:00409DDC  jmp 00409EDA

Bene, bene, forse vi chiederete cosa succede all'indirizzo 0040E6C8, ma tanto abbiamo capito che se finiamo qui, significa che la registrazione e' fallita! Poco piu' in sotto, invece,possiamo scorgere qualcosa di piu' interessante:

 
* Jump at Address 
|:00409DB3(Conditional)
|
:00409DE1  push 00000040

* Reference to String: "Correct registration"
            |
:00409DE3  push 00000368
:00409DE8  call 00406EC8
:00409DED  pop ecx
:00409DEE  push eax

* Reference to String: "Thank you for support"
           |
:00409DEF  push 00000367
:00409DF4  call 00406EC8
:00409DF9  pop ecx
:00409DFA  push eax
:00409DFB  mov edx, dword ptr [ebp+08]
:00409DFE  push edx

* Reference To: USER32.MessageBoxA
            |
:00409DFF  Call 0044D449
:00409E04  xor eax, eax

E' evidente che il nostro scopo e' di fare in modo di arrivare proprio in questa parte di codice! Perche' cio' accada, come testimonia la prima Reference in alto, bisogna andare a guardare la condizione di salto contenuta nell'indirizzo 00409DB3. Il bello e' che questo e' l'unico indirizzo che punta in questa parte di codice, e se cercate la stringa "Correct registration", la trovate solo qui, quindi possiamo essere certi che non si tratta di un "falso". Vediamo un po' il codice:

 
* Jump at Address:
|:00409D56(Conditional)
|
:00409D73  xor eax, eax
:00409D75  lea edi, dword ptr [ebp+FFFFFE98] 

Nota: [ebp+FFFFFE98] contiene il vostro nick! Se non ci credete, salite un po' di righe e vedrete gli indirizzi dei buffer inerenti la due edit che sono stati passati alla funzione GetDlgItemTextA. Io tralascio quella parte di codice (senno' Quequero mi lincia!). Se proprio non ci credete andate a verificare!

 
:00409D7B  or ecx, FFFFFFFF
:00409D7E  mov esi, 0045BE70
:00409D83  repnz

Nota: tolgo parte del codice che non mi interessa, visto che non sto' facendo un keygen... sigh! (Verra' anche per me il momento...)

:00409D96  lea eax, dword ptr [ebp+FFFFFE50]
:00409D9C  and ecx, 00000003
:00409D9F  lea edx, dword ptr [ebp+FFFFFE98]
:00409DA5  repz
:00409DA6  movsb
:00409DA7  push eax
:00409DA8  push edx
:00409DA9  call 004272C0

Nota: In eax e edx vengono caricati i puntatori al testo delle due edit: il codice in eax, il nick in edx, e tutto viene demandato alla subroutine che si trova all'indirizzo 004272C0. Qui c'e' il grosso dell'algoritmo che quelli che faranno il keygen dovranno reversare.

:00409DAE  add esp, 00000008
:00409DB1  test eax, eax
:00409DB3  jne 00409DE1
:00409DB5  push 00000030

Finalmente ritroviamo l'indirizzo che ci manda alla parte di codice corrispondente al messagebox "Correct registration".

Apriamo Hiew, andiamo alla linea 00409DB3 e sostituiamo il...

jne 00409DE1

...con un...

jmp 00409DE1

Occhio al tipo di numerazione! Fatto? Salvate le modifiche. Se non sapete come fare queste operazioni con Hiew, rileggetevi il mio tutorial Totally Newbies 1  (...ecchecazzo!!! Mica dovro' ripetere la stessa solfa cento volte!!! ;-))) )

Bene bene, fate ripartire WinRAR.exe e registratevi con un nick e un codice a caso! :-))))

Se guardiamo sulla barra del titolo, compare ancora la scritta "evaluation copy", e tutto cio' non e' simpatico!!! Riprendiamo in mano il nostro disassemblato WDasm32 e cerchiamo la scritta "evaluation copy". La troviamo in un solo punto( che culo!):


:00414C59  cmp dword ptr [0045157C], 00000000
:00414C60  jne 00414C91

* Reference to String: "evaluation copy"
            |
:00414C62  push 00000369
:00414C67  call 00406EC8
:00414C6C  pop ecx
:00414C6D  push eax

Nota: Alla riga 00414C59 c'e' un controllo, che se da' esito positivo, cioe' se i quattro byte che si trovano all'indirizzo [0045157C] non sono tutti nulli, fa saltare il programma alla linea 00414C91, altrimenti prosegue dritto passando la stringa "evaluation copy" alla procedura 00406EC8. Io non ho nemmeno guardato cosa succete laggiu', ma gia' so che non mi interessa!

Proseguendo nel codice, ci sono dei comandi che aggiungono la scritta "evaluation copy" al titolo della finestra. Io non li riporto per non appesantire il tutorial con troppo codice, comunque lascio queste righe nel sorgente HTML, poi sara' Quequero a decidere se lasciare le cose cosi' come sono, visualizzarle o cancellarle completamente. ;-)

Andiamo, invece a vedere cosa succede alla riga 00414C91, che mi sembra molto piu' interessante.

* Jump at Address:
|:00414C60(Conditional)
|
:00414C91  lea eax, dword ptr [ebp+FFFFFE00]
:00414C97  push eax
:00414C98  mov ecx, dword ptr [00455A7C]
:00414C9E  push ecx

* Reference To: USER32.SetWindowTextA
            |
:00414C9F  Call 0044D34D
:00414CA4  mov esp, ebp
:00414CA6  pop ebp
:00414CA7  ret

Avete visto cosa succede? Esattamente nulla!!! Yoohoo!!!  Ahem, Direte: ma questo qua e' diventato matto tutto d'un colpo!  Invece no (anche se e' tutto da dimostrare...). Quello che intendevo dire e' che il "non fare nulla" e' proprio quello che vogliamo che il nostro programma faccia: invece che aggiungere la scritta "evaluatation copy" e chiamare la funzione SetWindowTextA, esegui tale funzione e basta!

Riapriamo Hiew, andiamo alla linea 00414C60 e sostituiamo il...

jne 00414C91

...con un...

jmps 00414C91

A questo punto, salviamo le modifiche e avremo il nostro bel programmino WinRAR in grado di accettare qualsiasi codice di registrazione e privo dell'antiestetica espressione "evaluation copy".

Saluti, fantoibed

Note finali

Saluto tutti quelli dell' UIC, tutti gli Spippolatori (anche quelli che non mi conoscono), tutti gli amici dei newsgroups alt.hackers.cough.cough.cough e free.it.hackers.

Disclaimer

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.


UIC's page of reverse engineering, scegli dove andare:
Home   Anonimato   Assembly    ContactMe   CrackMe   Forum   Iscrizione
Lezioni    Links   Linux   NewBies   News   Playstation
Search   Tools   Tutorial   UIC Faq   XXX Page
UIC