|
Font Look
(quando i programmatori falliscono) |
|
08-02-2000 |
by
"syscalo" |
|
|
UIC's Home Page |
Published by Quequero |
|
Buon tutorial per NewBies, che impareranno anche a
muovere i primi passi col turbo debugger :))) |
|
UIC's form |
- Home page: http://syscalo.cjb.net
- E-mail: [email protected]
|
UIC's form |
Difficoltà
|
(X)NewBies ( )Intermedio ( )Avanzato ( )Master |
|
Un programma di cui devo ancora capire l'utilità, visto che la prima cosa che ho
cercato di fare è stata crackarlo ;) Comunque vi riporto una breve descrizione:
FontLook is a Windows 95/98/NT utility which enables you to display and print samples
of your Windows fonts and to preview or install fonts from CD-ROMs or other sources.
Vedete un po' voi se vi interessa.
- Font Look
(quando i programmatori falliscono)
Written by syscalo
- In questo tutorial vediamo di fregare in modo semplice e veloce un programma time-limit.
Ne approfitterò per presentarvi alcuni tools utili che se non avete dovete assolutamente
procurarvi.
- - Regmon: programma per vedere a quali chiavi del registro
accede un programma.
- - WDasm: disassemblatore - anche se io preferisco Ida ho
usato questo perchè è più semplice e visto che siete (siamo ;) agli inizi....
- - Regedit: programma per modificare le chiavi del registro
(fornito con win ;).
- - Tasm 5 - vi serve solo il turbo debugger 32 per il
momento: capirete dopo perchè ci è utile.
- - HexWorkshop: editor esadecimale (va benissimo anche un
altro).
- Il programma è reperibile presso il sito:
http://ourworld.compuserve.com/homepages/galcott
- Vediamo un po' cosa vuole da noi questo programmillo: innanzitutto avviamolo.
- Ecco un bel messaggio di benvenuto che ci dice che abbiamo di fronte un programma il cui
funzionamento è limitato a 30 gg di prova, e gentilmente ci dice anche quanti giorni ci
rimangono. Il programma però è una versione completa ed è possibile registrarlo
inserendo l'apposito codice; vedere menu Help|Enter Registration Code. Bene noi non
cercheremo il codice corretto (al massimo sarà per un altro tutorial per la UIC, e
soprattutto a quando avrò più tempo) ma vedremo di fare in modo che il programma generi
tutto ciò che gli serve per essere registrato.
- Iniziamo: il programma molto probabilmente salva dei dati nel registro di windows; per
controllare avviamo Regmon. Compare una schermata dove ci sono alcuni dati da sistemare;
noi modifichiamo solo la voce Process Include(s) che indica i programmi che verranno
monitorati: inserite fontlook e premete ok. Ora avviamo FontLook e andiamo a vedere cosa
ci dice regmon. Quando avviate FontLook fermatevi alla message box iniziale (non premete
ok) in quanto il programma qui deve avere già effettuato un check del tempo rimasto
quindi è inutile proseguire. Passiamo a Regmon e vediamo che vengono aperte con successo
(guardare nella colonna Result) le seguenti chiavi:
- HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
- HKEY_CURRENT_USER\Control Panel\Desktop
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Documents
- HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
- HKEY_LOCAL_MACHINE\Software\RGB
- Tra tutte queste è facilmente intuibile che è l'ultima ad essere quella
"propria" di FontLook (visto che le altre sono tutte chiavi del sistema
operativo)
- Inoltre viene fatta una QueryValueEx (lettura del valore) di tre valori a dir poco
sospetti:
- Ver ?
- Reg Probabilmete ;) conterrà il codice di avvenuta registrazione.
- Start Probabilmete contiene la data del primo avvio del programma per
mantenere il conteggio dei giorni.
-
- Se guardate la colonna Result il valore Reg non viene trovato, quindi vuol dire che
verrà creato solo quando ci saremo registrati correttamente.
- Proseguiamo; ora sappiamo cosa cerca il programma ma come fare per darglielo? Basta
lasciare fare tutto a lui ;)
- La soluzione è semplice: andiamo a cercare nel programma quel punto in cui deve
decidere se il codice da noi inserito è giusto o meno e poi, forzando un solo jump, lo
faremo autoregistrare!
- Registriamoci: menù Help|Enter registration code, compare la message box; inseriamo un
valore a caso 696969 e premiamo ok. Ecco un'altra message box che ci dice che il codice
inserito è sbagliato (ma va?! ;-). Prendiamo nota di questo ultimo messaggio:
"Incorrect registration key" e passimo all'attacco.
- Disassembliamo il programma: aprite WDasm e selezionate Disassembler|Open file to
disassemble ed andate a cercare il file fontlook.exe nella directory dove l'avete
installato (aspettate che WDasm abbia finito). Ora menù Refs|String data references e
scorrete la lista delle stringhe fino a che trovate "Incorrect registration
key". Una volta trovata fate doppio click su essa e chiudete la finestra. Ora nel
listato del programma troverete queste istruzioni:
-
- :0045037F push 00000030 ;salta qui se il codice
di registrazione è sbagliato
* Possible StringData Ref from Code Obj ->"Error"
|
:00450381 push 00450430
* Possible StringData Ref from Code Obj ->"Incorrect registration key"
|
:00450386 push 00450438 ;passa la stringa
"Incorrect registration key"
:0045038B mov eax, ebx
:0045038D call 00421560
:00450392 push eax
* Reference To: user32.MessageBoxA, Ord:0000h
|
:00450393 Call 004060F0 ;qui viene effettuata la
chiamata alla visualizzazione della message box di codice errato
-
- Ora risalendo poco più sopra troviamo le seguenti istruzioni:
-
- * Possible StringData Ref from Code Obj ->"Success"
|
:0045033A push 004503E8
* Possible StringData Ref from Code Obj ->"You have been successfully
registered."
|
:0045033F push 004503F0 ;passa la stringa
"You have been successfully registered
:00450344 mov eax, ebx
:00450346 call 00421560
:0045034B push eax
* Reference To: user32.MessageBoxA, Ord:0000h
|
:0045034C Call 004060F0 ;qui viene effettuata la
chiamate alla visualizzazione della message box di codice esatto
-
- Visto che la parte di programma che visualizza la message box di registrazione corretta
viene prima di quella di registrazione sbagliata dobbiamo ricercare il punto in cui viene
effettuato il controllo per vedere se il codice inserito è sbagliato, e salta alla
visualizzazione della mesage box corrispondente. Salendo ancora un po' nel codice troviamo
le seguenti istruzioni:
-
- :00450294 mov edx, dword ptr [ebp-08]
:00450297 pop eax
:00450298 call 00403CA8 ;in questa routine viene
fatto il controllo del codice di registrazione inserito
:0045029D jne 0045037F ;salta a visualizzare la
message box registrazione sbagliata
:004502A3 mov dl, 01 ;prosegue con l'esecuzione
del programma e visualizza la message box di registrazione corretta
-
- Senza volerci addentrare nella routine di controllo del codice, possiamo facilmente
intuire che ci saranno dei controlli che andranno a modificare il flag di zero; se vi
state chiedendo perchè, bhe è semplice: l'istruzione successiva alla call è jne, che
salta solo se il flag di zero è uguale a zero mentre non fa nulla se il flag di zero è
uno.
- Ora abbiamo due possibilità:
- a- la più immediata è quella di andare a modificare il jump in modo che non salti mai,
ad esempio sostituendolo con delle nop.
- b- procedere con un debugger e modificare il flag di zero "in diretta" e fare
in modo che il programma si autoregistri.
-
- Le proviamo tutte due, ma siccome siamo stravaganti iniziamo con la b ;)
- Ok aprite il vostro turbodebugger32, selezionate il file fontlook.exe e premete alt+F2;
vi appare la finestra dei breakpoints e qui dovete inserire l'indirizzo 0045029Dh avendo
cura di rispettare la forma richiesta dal debugger. Ora premete F9 (manda in esecuzione il
programma) e in FontLook andate nella message box di inserimento del codice, scrivete un
valore a caso (696969) e premete ok; tornate nel turbodebugger e vi troverete davanti il
jne 0045037F. Andate nella finestra dei flag (tutta a destra) e clickate con il pulsante
destro sulla lettera z (flag di zero) e selezionate toggle in modo che il suo valore passi
da 0 a 1. Premete F9 e siete magicamente registrati!
- Se andate a vedere nel registro di windows con il regedit ora nella chiave
HKEY_LOCAL_MACHINE\Software\RGB trovate il valore Reg di tipo DWORD impostato a 7. Alla
prossima installazione dovrete aggiungere solamente questo valore nel registro, senza
ripetere tutte le operazioni descritte qui.
-
- Passiamo all'attacco a:
- Premessa: se avete già eseguito la scelta b andate nel registro di windows e cancellate
il valore reg, altrimenti il programma sarà già registrato.
- Ritorniamo per un momento al WDasm. Posizionatevi sull'istruzione jne 0045037F
all'indirizzo 0045029D; ora guardate nella status bar del WDasm e trovate la scritta
@Offset:0004F69Dh; bene questa scritta indica quale è l'offset di questa istruzione
all'interno del file fontlook.exe. Ci serve ancora una cosa: l'opcode dell'istruzione per
sapere quali byte dobbiamo sovrascrivere; per saperlo basta guardare il listato in WDasm:
-
- :0045029D 0F85DC000000 jne 0045037F
-
- quello in giallo è l'opcode dell'istruzione. Ora dobbiamo sostituire tutti questi byte
con 90 (opcode dell'istruzione nop) quindi otterremo 909090909090.
- Per fare materialmente la sostituzione aprite il file fontlook.exe con l'editor
esadecimale, andate nel menù a Edit|Goto e nella casella offset inserite 4F69D e premete
ok; se guardate i byte dove c'è il cursore vedrete esattamente l'opcode dell'istruzione;
bene sostituitelo con i 90 e salvate le modifiche.
- Non resta che ripetere la procedura di registrazione e il programma aggiungerà la
chiave nel registro ed inoltre ci dirà già da subito che il codice da noi inserito
(qualunque esso sia) è corretto.
-
- Ehi, abbiamo terminato ;-) Ora possiamo dedicarci alle nostre ragazze, ognuno
la sua è!-)
-
- -=bye to all=-
- syscalo
- Vorrei ricordare che il software va comprato e non rubato, dovete registrare il
vostro prodotto dopo il periodo di valutazione. 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
Links NewBies News Iscrizione Lezioni
Tools Tutorial Search UIC Faq