In questo tute cerkerò di registrare questa ver del prog trovando un nome e serial
validi :)
Vedrete ke sarà divertente xkè questo prog presenta vari aspetti ke lo rendono
interessante il tutto senza essere complicato :)
Advanced Dialer
Sottotitolo (come l'intestazione in alto)
Written by NikDH
Introduzione
Advanced Dialer è un programma ke serve x gestire una situazione in kui un utente abbia
+ numeri x kollegarsi alla rete :)
Lanciamo il prog e notiamo un nag di registrazione ke ci ci tiene informati su quanti
utilizzi ci rimangono e ci xmette di continuare o di accedere alla dlgbox x inserire i
dati x la reg
Anzitutto è bene notare ke il num di utilizzi rimanenti viene salvato nel reg nelle
kiavi proprie di questo prog di conseg se salviamo quella parte di registro x poi
ripristinarla quando il prog sta x scadere potremo continuare ad usarlo benissimo :)
Naturalmente si tratta solo di una osservazione in quando non vogliamo registrarlo sto
prog :)
Direi ke l'unika kosa appena appena difficile di sto prog è ke la routine di protez, la
nag e la dlgbox di reg kome risorse,... non sono nel file adialer.exe :)
Disasmandolo infatti non troviamo nulla di tutto questo e nemmeno nella sez resource
troviamo qlk traccia utile
Notiamo xò ke nel prog la sez di codice e di dati si kiamano CODE e DATA: ci troviamo di
fronte un prog kompilato kon un kompilatore borland, si tratta forse di un prog in delphi?
Forse è x questo ke le risorse non si vedono?
Proviamo ad aprirlo kol DeDe: nulla da fare :)
Si tratta probabilmente di un prog kompilato kol Borland C++
A questo punto allora rilanciamo il prog ed eseguiamo Spy++ e cerkiamo l'handle della nag
Una volta ottenuto lanciamo sice ed eseguiamo il comando: hwnd h_nag
Scopriamo kon nostra grande sorpresa ke l'owner non è il processo adialer ma un certo
processo params !!!
Andiamo a controllare nella dir di adialer e notiamo ke esiste un file kiamato params.ovl
Se lo provate ad aprire kon un qlk disasmer avrete una bella sorpresa: si tratta di un PE
in piena regola :)
Allora formuliamo un ipotesi: il processo params viene lanciato dal processo adialer e
proprio il processo params è responsabile della protezione :)
Verifikiamo la correttezza dell'ipotesi:
se andiamo a cerkare kome str reference 'params.ovl' all'interno di adialer troveremo ke
essa viene rikiamata in 2 punti all'interno della stessa funzione:
ecco il punto ke ci interessa
CODE:00417D92 lea eax, [ebp+path_adialer_params_ovl] ; eax
-> path dove stanno adialer.exe e tutti
i suoi file tra i quali appunto params.ovl
CODE:00417D95 mov edx, offset
aParams_ovl ; edx -> 'params.ovl'
CODE:00417D9A call @@LStrCat
Questo codice si occupa di concatenare alla str ke kontiene il path dove sta il programma
Advanced Dialer il nome del file params.ovl: lo scopo di questo codice è facilmente
intuibile, probabilmente si dovranno eseguire certe operazioni su quel file, molto
probabilmente verrà karikato :)
Infatti a conferma della nostra ipotesi troviamo poko dopo:
La cosa dovrebbe insospettirci ovvero vedere ke poko prima di una kiamata ad una call
viene passato in un reg un ptr ad una str ke rappresenta il path completo di un file ke
deve essere karikato in mem :)
Andando a curiosare nella funz troviamo:
...
CODE:0041589D lea eax, [ebp+var_20C]
CODE:004158A3 push eax
CODE:004158A4 push 0
CODE:004158A6 call j_CreateProcessA
Ekko la kiamata a CreateProcess() ke motiverebbe la presenza di params.ovl a questo non ci
resta ke settare un bpx sulla riga cs:41589D x controllare ke addr viene spostato in eax e
scopriremo ke si tratta proprio del path di 'params.ovl' :)))
Bene ora ke abbiamo ben kiaro kome avviene il karikamento in mem di quel file procediamo
ad analizzarlo :)
Anzitutto rilanciamo di nuovo il prog in questione e stavolta clickiamo sul bottone
'Register' nella nag inizile, a questo punto apparirà la dlgbox di reg,
lanciamo Spy++ e guardiamo e puntiamo il mirino su di essa: notiamo subito ke essa
appartiene alla classe TRegistrationDlg indizio sufficiente x farci pensare ke questo prog
sia stato scritto in delphi, ricorriamo quindi al DeDe :)
Il DeDe agisce con piacere sul file params.ovl rikonoscendolo kome eseguibile delphi :)
A questo punto spostiamoci nella voce 'Procedure' e notiamo subito ke la classe
TRegistrationDlg sta nella unit Regkey :)
Clickandoci sopra vedremo apparire tutti gli eventi collegati a questo form ed in
particolare notiamo OkBtnClk :)
Si tratta appunto dell'evento collegato alla pressione del tasto Ok in questa DlgBox di
registrazione: è proprio quello ke cerkiamo, analizziamo il codice ad esso relativo :)
A questo punto ci troviamo di fronte a codice kiarissimo :))))))
004B9B7B mov edx, [ebp+ptr_mio_serial]
004B9B81 pop eax
004B9B82 call f_check_code
Vediamo ke vengono passate nei reg 2 val tra i quali c'è il nostro serial ed un altro val
(kissa ke sarà :))) ), al ritorno questa funzione setta o meno lo ZeroFlag a seconda se i
2 val sono uguali e questo appunto condiziona il risultato del jmp seguente :)
Beh kome avrete kapito basterà guardare nella zona di mem puntata da eax appena dopo
l'istruz di pop x poter sniffare il serial corretto :)
E' bene osservare anke ke la funz ke calcola il serial si trova a:
004B9B4F mov eax, [ebp+ptr_mio_name] ; variabile in input
ovvero qui il val viene letto dalla funz
004B9B55 lea edx, [ebp+ptr_serial_corretto] ; variabile in output ovvero qui il val viene scritto dalla funz
004B9B5B call sub_46C2E4
Kome vedete vengono passati sempre tramite i reg i ptr alle zone di mem in kui stanno il
nome in base al quale generare il serial ke verrà poi salvato nell'altra zona di mem :)
Andando a guardare dentro quella call non dovrebbe essere difficile riuscire a capire
l'algo e kreare un bel keygen :)))
Ciao
NikDH
Note finali
Beh non è stato molto difficile ma ritenevo questo prog abbastanza interessante dal
punto di vista didattiko :)
Rakkoglie un po' di tutto: prog scritto in Delphi, protez in un file diverso dall'exe
primario,... e il tutto senza essere troppo complicato, mi piaceva :)
Ringrazio ovviamente tutta la UIC a cui devo TUTTO TUTTISSIMO :)
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.