HIGHGROW: SERIAL FISHING
(Break on: MessageBoxA)


21/05/2000

by "[Paradox Evil]"

 

 

UIC's Home Page

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

La prossima volta nel campo "E-mail" mettici la tua di email NON quella della MailingList :)
...ma non sanno proprio più cosa inventarsi per attirare la gente, eh!!!
UIC's form
E-mail: UIC@egroups.com --> Questa è la ML non la TUA mail :)
ICQ# 58925902, [PaRaDoX] oppure [PaRaDoX_UIC] sul canale IRC #crack-it
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)


HIGHGROW: SERIAL FISHING
Break on MessageBoxA 
Written by [Paradox Evil]

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

ProcDump v.1.6.2 FINAL (non indispensabile,comunque)
Soft-ice
WIN32DASM v.8.93

Url o FTP del programma

La pagina di Quequero :-D (Qué, mi viene da pensare che nei tuoi momenti di 'buio' ti dedichi alla ricerca di soddisfazioni particolari... questa ne è la prova :-DDD)......Ma che dici mai :) ki IO? Naaaaaa :)))))...Solo perchè c'ho una
mini coltivazione indoor? Eddai come siete pignoli :) NdQue

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

Quanto è stato detto in questo tutorial è puramente a scopo informativo e senza nessuna intenzione a fini di lucro.Se siete interessati all' appplicazione o gioco trattato in questa pagina siete pregati di comprarlo o pagare i relativi costi all'autoreo a chi per esso.Tutto quanto detto non ha valore se usato per scopi illegali o comunque che ledano privatamente e/o pubblicamente l'autore o gli autori dell'applicativo descritto nel presente tutorial.Noi reversiamo solo a scopo didattico e non con fini illegali.

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