Corso UIC Newbies 03 Paradox Evil
From UIC
Corso UIC Newbies 03 Paradox Evil
Contents |
| Infos | |
|---|---|
| Author: | Paradox Evil |
| Email: | |
| Website: | Home page |
| Date: | 21/05/2000 (dd/mm/yyyy) |
| Level: |
|
| Language: | Italian |
| Comments: | |
Tools
Link e Riferimenti
Questo è il Corso UIC Newbies n°03 disponibile alla pagina Corsi UIC Newbies
Introduzione
HIGHGROW: SERIAL FISHING
Written by [Paradox Evil]
Highgrow, un programma che potrebbe interessare le migliaia di fumo-dipendenti che esistono sulla terra, (sbavate, sbavate... :-D)
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:
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:
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:
viene copiato in EAX
00407F4C mov edx, dword ptr [0041E0E8] 20 // nella DWORD puntata da 0041E0E8 invece si trova
// il numero di serie corretto
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 // 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
<code>
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
I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.
Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevoli e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.