Corso 9 - Soluzione Newbie |
|
|
10/06/2000 |
by "fantoibed" |
|
|
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 |
|
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.
-=Tecnica usata: cracking=-
Introduzione |
Tools usati |
URL o FTP del programma |
Notizie sul programma |
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
|
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 |