|
|
|
21/05/2000 |
by "[Paradox Evil]" |
|
|
Published by Quequero |
|
Ma vieeeni un prog sulla Marijuana... e sul fumo... |
Bravo Paradox, sono molto felice che tu mi abbia mandato la soluzione ad questo corso, ma sono MOLTO infelice per il form che mi hai consegnato, è troppo chiedere un form DECENTE? Ci sono voluti 38 minuti per correggerlo tutto, la prossima volta usa il notepad o ti strozzo con le nude mani :)))) Bravo cmq :) ciauzzzzzz
|
...ma non sanno proprio più cosa inventarsi per attirare la gente, eh!!! |
| UIC's form |
|
UIC's form |
Difficoltà |
(X)NewBies ( )Intermedio ( )Avanzato ( )Master |
Highgrow, un programma che potrebbe interessare le migliaia di fumo-dipendenti che
esistono sulla terra, (sbavate, sbavate... :-D)
Introduzione |
Questo programma vi introduce nel magico mondo del ....fumo??!! O porca eva ma che cavolo di programma!!! Ma metterci qualche campione omaggio pareva brutto, eh!!! Ora ne dico quattro a chi l'ha fatto! (SBONK!)
Tools Usati |
Url o FTP del programma |
Notizie sul programma |
Ancora? Ma non avete letto sopra.... Su su ...
Essay |
Allora,bando alle ciance e veniamo subito ad occuparci del target in questione. E' necessario che faccia una premessa: nella sezione dei Tools usati ho voluto introdurre il ProcDump perché quando mi sono messo a debuggare ho trovato una grande quantità di INT 3 (CCh) che mi hanno fatto sospettare un eventuale crypting dell'exe principale. Perciò ho usato l'opzione PE Rebuilder del ProcDump che mi ha ricostruito il PE (e infatti la dimensione dell'exe è cambiata, ma presumo che questo non serva poi tanto ai fini della risoluzione del target... Qué illuminami...)...Certamente la scelta del PE Rebuilder non è stata delle migliori, dal momento che anche se il file è crittato non otterresti nessun cambiamento :) infatti il PE Rebuilder serve a ricostruire il PE quando per qualche motivo c'è un checksum errato o simili :))) NdQue
Ok, iniziamo con il debugging vero e proprio; una volta installato il programma (a proposito, potessi avere qui il suo ideatore, lo strozzerei: ma si può fare un' install menu' che dura una vita e che nemmeno lo puoi saltare!!!!!!), lanciatelo e portatevi subito alla nag di registrazione. Mettiamo dei valori a caso (io ho messo come serial 123456 e come nome [Paradox]) e apriamo indi il buon sice, settando i BPX su GetWindowTextA e su GetDlgItemTextA. Richiudiamo il debugger e proviamo a premere sul pulsante di registrazione. Nulla accade.. E ti pareva!... Ok, eliminiamo i due BPX precendenti (BC *) e stavolta proviamo a mettere un BPX Hmemcpy.. Stavolta sice poppa ma debuggando poco oltre ci accorgiamo di trovarci davanti a un codice un pò obsoleto...Pertanto scartiamo anche questa soluzione...
A questo punto mi sono soffermato sulla MessageBoxA che appare quando il codice è errato, e ho deciso di mettere un BPX su MessageBoxA. Detto fatto, la perseveranza viene sempre premiata! :-D Sice poppa e dopo aver premuto F11 e nuovamente sul pulsante ok del messaggio di errore,vediamo dove si arriva:
USER32.MessageBoxA, Ord:0188h
:00407F29 Call dword ptr [00437620]
:00407F2F push
00000456 ;
--> Sice
poppa qui (in questo momento EAX contiene il numero di caratteri che abbiamo immesso per
il seriale)
Adesso, torniamo poco più in alto e diamo un'occhiata a quanto segue:
:00407F17 cmp eax, 0000000F ; --> confronta EAX con 15
:00407F1A je
00407F47 ; --> Salta se
il valore è effettivamente uguale a 15
Capito cosa succede? Il programma va a ricercare in memoria che il numero dei caratteri che abbiamo messo sia uguale a 15 e questo perché il seriale dovrà essere di 15 caratteri.Ovviamente nel mio caso non essendolo,il flag Z non verrà settato e quindi niente salto.Cosa si puo' fare quindi? Bé, le soluzioni sono due: la prima consiste nel settare il Flag Zero come vero (quindi digitare R FL Z) per far avvenire il salto, ma visto che stiamo reversando e non krakkando torneremo al nostro bel target e immetteremo un seriale di 15 caratteri.Se dopo aver fatto cio' proviamo nuovamente a premere il pulsante Register, notiamo come nessuna MessageBox appaia.Tuttavia poiché tale procedimento ci impedirebbe di raggiungere il nostro obbiettivo, inserite nuovamente un qualsiasi numero di caratteri inferiore a 15 alla voce "Registration Code" e dopo aver nuovamente settato un BPX MessageBoxA (se l'avevate cancellato prima), date l'ok.Mettete un BPx sul codice visto prima (:00407F1A je 00407F47),cancellate il BPx sulla messagebox e riprovate.Stavolta sice poppa sul BPX da voi immesso e fate in modo che il jz venga eseguito.Vi ritroverete esattamente qui:
:00407F47 mov eax,
0041E468 ;--> 0041E468 contiene il seriale inserito, che viene
copiato in EAX
:00407F4C mov edx, dword ptr [0041E0E8] 20 ;--> nella DWORD puntata da 0041E0E8 invece si trova il
numero di serie corretto
Jump at Address:
:00407F6C(C)
:00407F52 mov cl, byte ptr
[eax] --> muove in CL il primo carattere del nostro seriale
:00407F54 cmp cl, byte ptr
[edx] --> confronta CL il primo carattere del seriale valido
:00407F56 jne
00407F72 ; -->
se i due valori non coincidono, salta per poi arrivare al messaggio d'errore, altrimenti
prosegue
:00407F58 or cl,
cl ; -->
1° controllo per vedere se CL contiene un carattere, se non è presente alcun
carattere...
:00407F5A je
00407F6E ; -->
... salta al controllo principale, altrimenti prosegue
:00407F5C mov cl, byte ptr [eax+01] --> muove in CL il secondo carattere del nostro seriale
:00407F5F cmp cl, byte ptr [edx+01] --> confronta CL il secondo carattere del seriale valido
:00407F62 jne
00407F72 ; -->
e nuovamente come sopra
:00407F64 add eax, 00000002 ; --> incrementa EAX
:00407F67 add edx, 00000002 ; --> incementa EDX
:00407F6A or cl,
cl ; -->
2° controllo per vedere se CL contiene un carattere, se non è presente alcun
carattere...
:00407F6C jne
00407F52 ; -->
... salta, altrimenti riesegue il ciclo, aumentando di volta in volta il controllo di 2
caratteri
Quando ha eseguito tutto il codice, presumendo che sia giusto, il programma salta all'offset
Jump at Address:
:00407F5A(C)
:00407F6E xor eax,
eax ; -->
azzera EAX
:00407F70 jmp
00407F77 ; -->
salta a 00407F77 (ma no! :-D)
Jump at Address:
:00407F70(U)
:00407F77 test eax,
eax ; --> azzera EAX
:00407F79 jne
00407FC6 ; -->
se il seriale immesso coincide con quello valido allora il flag zero non viene settato e
quindi il salto non avviene
:00407F7B push 000000C8
:00407F80 push 0041E468
... e pertanto arriviamo direttamente qui:
String Resource ID=3D00041: "Thank you for registering this version of HighGrow. .... ...."
GOOD WORK!
Ed ora occupiamoci del WIN32DASM. Vi sarete chiesti perché lo abbia nominato nella
lista dei tools usati. Bé innanzitutto perché è sempre e comunque utile, ma stavolta in
modo particolare..
Apritelo e caricate l'eseguibile di Highgrow; una volta fatto andate nella String
Reference List e ricercate la stringa che corrisponde al messaggio d'errore in caso di
errato seriale ("Invalid Registration Code Entered!!") e procedete come visto
con sice sino ad arrivare all'offset :00407F47. Notate niente nella riga sottostante?!!.
Si esatto proprio lui, il nostro bel seriale che ci viene fornito su un piatto
d'argento!!!!!
Se comunque volete crakkare anziché registrare il programma (bé, ma allora siete
proprio sadici! :-D) non dovete fare altro che trasformare il JNE all'offset :00407F79 in
un JE (e più precisamente da 754B a 744B) in modo che il programma sia registrato sempre
se il seriale NON è quello giusto.
E per finire una curiosità: l'autore del programma, durante la stesura deve aver
dichiarato il seriale che aveva in mente (che, per chi non l'avesse ancora trovato è
385-9015453-728) come costante fissa e univoca, motivo per cui se aprite il registro di
window e andate a curiosare dentro HKEY_CURRENT_USER\Software\Slick
Software\HighGrow alla stringa "Registration Code" vedrete che, nel caso
abbiate solo crakkato il programma (e quindi inserito un seriale a caso), il seriale sarà
sempre e comunque 385-9015453-728.
Se volete potete anche sbizzarrirvi a modificare alcuni parametri (come il numero di
caratteri da inserire nel campo del seriale oppure togliere il controllo del nome, ecc...)
Ok, e anche questa è fatta.... SEE YA!!!
Note Finali |
Che bello! La parte che preferisco di più!!
Allora, iniziamo col salutare gli amici di Crack-it, in particolare DED,
^D43M0N^, JOHNES, ANDREAGEDDON, [SiLENT],
AITTALAM, LITTLEJO, PISPOLA,[BLENDER] E PPINKER
ecc... (sorry ma lo spazio è tiranno :-< ), poi un tnx a TIN-MAN
per una piccola ma utile spiegazione, e infine un saluto alla CDT
Disclaimer |
| 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 |