|
Compare 1.0
(Un ottimo "allenamento" per i Totally NewBies) |
|
12/01/00 |
- by "**Sciamano**"
- (alias @exe)
|
|
|
UIC's Home Page |
Published by Quequero |
|
Il tutorial è estremamente semplice e per questo
adatto a tutti i newbies che vogliono fare un po' di pratica |
|
UIC's form |
-
- E-mail: [email protected] or [email protected]
- Uin: 57813248
|
UIC's form |
Difficoltà
|
(X)NewBies ( )Intermedio ( )Avanzato ( )Master |
|
Questo è il programma più semplice da patchare che mi sia capitato per le mani,
ottimo per i SuperUltraNewbies che per la prima volta vogliono provare l'ebbrezza di
crackare qualcosa ;-) Il tutorial presuppone una conoscenza dei comandi più elementari di
Softice ed il significato delle istruzioni basilari dell'Assembly (call, test, jne, jmp,
ret). Che???.. Non sapete di cosa parlo?? Beh... che aspettate a leggervi i primi
tutorials di Quequero??? ;-)
- Compare 1.0
Un ottimo "allenamento" per i Totally NewBies
Written by **SCiaMaNo**
- Cercheremo insieme di eliminare una finestra che compare all'avvio del programma e ne
impedisce l'uso per trenta secondi circa, vi accorgerete che riuscire in questo sarà
estremamente semplice e senza difficoltà alcuna!
- SoftIce 4.x
- Hiew 6.1x
http://iaw.on.ca/~randb/compare/compare.zip
- Come si può intuire dal nome serve a confrontare due files e determinarne le
differenze. La scelta è caduta su questo programma per la sua "gentile
disponibilità" nell'essere analizzato ed utilizzato a scopo didattico ;)
Bene, bene... eccoci quì ad aggiustare questo piccolo programmino difettoso,
- infatti appena avviato compare una finestra fastidiosa che avvisa della mancata
registrazione e non può essere eliminata per ben 30 secondi o poco più, sino a che il
pulsante con la scritta "OK" non diventa attivo....
Ma possibile che per poter utilizzare un programma si deve attendere 30 secondi e passa???
Mah... vediamo come risolvere il problema ;-)
- Una volta installato il programmello, appena proviamo a lanciarlo ci compare la nostra
simpatica messagebox, cosa può venire in mente ad una persona normale..??
- Proprio così.., carichiamo il nostro softice, premiamo CTRL-D e settiamo un breakpoint
in questo modo:
- bpx MessageBoxA, premiamo F5, avviamo il programma e..... azz.. non
succede niente.., sice non poppa :\
- perchè mai?? Se le casse del computer sono accese ci si accorge di un particolare..,
quando compare la messagebox, questa è accompagnata da un suono un po diverso dal
solito.. mmmh... evidentemente abbiamo settato il breakpoint sbagliato; riproviamo questa
volta con bpx MessageBeep, lanciamo nuovamente il programma ed ecco che
ci troviamo in sice, esattamente dentro alla user32 MessageBeep :)
- A questo punto premiamo F12 e ci troviamo fuori dalla Call proprio su di un Ret:
- * Reference To: user32.MessageBeep, Ord:0000h
:00407176 Call 00405184
- :0040717B ret ............................. ci si trova qui'
Naturalmente la call è quella che fa comparire la nostra finestra, pigiamo quindi F10
per eseguire il ret in modo da spostarci nella routine superiore e vedere cosa è stato a
mandarci dritti dritti alla call rompiballe
:00438186 call 00407174
- :0043818B mov ecx, 0043A6A0 .............................ed eccoci
quì
Perciò la call all'indirizzo :00438186 è quella che dobbiamo evitare. Diamo
un'occhiata un po più ampia:
* Jump at Addresses:
- :004380F8(C)
:0043815F call 00405F34
- :00438164 test al, al
- :00438166 jne 0043820A ............................. da tener
d'occhio
- :0043816C mov eax, dword ptr [ebp-04]
- :0043816F cmp byte ptr [eax+000002A4], 01
- :00438176 jne 00438485 ............................. da tener
d'occhio
- :0043817C mov eax, dword ptr [0043A624]
- :00438181 call 00423E50
- :00438186 call 00407174
- :0043818B mov ecx, 0043A6A0 ............................. ci
ritroviamo qui' dopo il ret
- :00438190 mov edx, 00435710
- :00438195 mov eax, dword ptr [0043A624]
- :0043819A call 00423F5C
Bene bene, al di sopra della nostra call vediamo due salti condizionati, entrambi ci
portano oltre la call incriminata, quale modifichiamo? :P
- Digitiamo in sice : bc* in modo da cancellare i precedenti breakpoint e
ne settiamo uno sul 438176 jnz con un doppio click del mouse; usciamo con
F5 e rilanciamo il programma.., eccoci di nuovo sul nostro jne il quale, secondo sice, non
salta. Premiamo F5 ed eccoci davanti alla nostra finestra, attendiamo i 30 secondi
(....bzzzzzzzzz...) sino a che si attiva il tasto "OK", lo
clickiamo (si scrive cosi?), e ci ritroviamo ancora una volta in sice ma questa volta il
jne salta =)
- Beh.. penso che sia perfettamente chiaro quale jne modificare; il primo non salta in
ogni caso, il secondo salta solo dopo la comparsa della messagebox.
Quello che dobbiamo fare è quindi far si che salti in ogni occasione cambiandolo in un
jmp incondizionato ;)
- Apriamo con Hiew il file in modo da vederne il codice asm, premiamo F5 e digitiamo il
nostro indirizzo; una volta li apportiamo le nostre modifiche cambiando:
:00438176 0F8509030000 jne 00438485
- :0043817C A124A64300 mov eax, dword ptr
[0043A624]
in
:00438176 E90A030000 jmp 00438485
- :0043817B 90
nop
- :0043817C A124A64300 mov eax, dword ptr
[0043A624]
- Le scritte in giallo non sono altro che le istruzioni visualizzate in forma esadecimale.
Il nop aggiunto serve a compensare il byte in eccesso, infatti il jne originario era
formato da 6 byte, una volta trasformato in jmp se ne ritrova solo 5.
Okay, ora il compare.exe è (S)PATCHATO ma si può fare ancora qualcosa
per completare il tutto ;-)
- Se lanciate programma ed andate su Help/About Compare vedrete la scritta:
- Name....: Unregistered
- Serial..: None
- Visto che il programmillo non ci ha impegnato per niente, perchè non sistemare anche
queste? :)
- Ok, con un qualsiasi Hex editor aprite il file compare.exe andate su Find (o Search) e
cercate la parola "Serial", una volta trovata potrete cambiare le scritte
"Unregistered" ed "None" con quello che volete facendo attenzione a
non sovrascrivere altri byte utilizzati ;-)
Ora penso proprio di aver detto tutto, spero di essere stato chiaro abbastanza e di non
aver fatto troppi casini visto che anche io sono un newbies che si cimenta in quest'arte
da molto poco ...ma che dico poco.... pochissimo :-)
CiAo da **SCiaMaNo** (alians
@ExE)
Come avrete constatato ho scelto il programma più semplice da patchare e di facile
interpretazione che ho trovato in giro, questo per permettere a chi è agli inizi di
comprendere la logica di base di quest'arte. Per me che non provengo da studi informatici
imparare il Reversing è un modo stimolante per avvicinarmi all'Assembly e alla
programmazione in generale. Ringrazio per tutto ciò Quequero per aver creato la UIC
che mi sta dando la possibilità di imparare, per questo un grazie va anche ai grandi
della ML che si impegnano attivamente a farla crescere diffondendo il sapere e regalando a
noi NewBies il loro tempo.
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 Links
NewBies News Forum Lezioni
Tools Tutorial