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**

Introduzione

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!

Tools usati

SoftIce 4.x
Hiew 6.1x

URL o FTP del programma

http://iaw.on.ca/~randb/compare/compare.zip

Notizie sul programma 

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 ;)

Essay


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)           

                                                                                                    

Note finali

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.

Disclaimer

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 

UIC