Reversing Advanced Dialer
(Serial sniffing + altro)


Data

by "NikDH"

 

 

UIC's Home Page

Published by Quequero

Opiuuuuuum :)

Questo è il tuo spazio ci tengo a precisare ke non lo invaderei mai e poi mai :)
I just did it :)))

Ed io tra un po' diventerò cattivo  :))) cmq bravo il target è davvero interessante seppure molto semplice

Message in a bottle :)
UIC's form
Al mom no home page :)
E-mail: [email protected]
NikDH, #crack-it #ahccc
UIC's form

Difficoltà

(x)NewBies ( )Intermedio ( )Avanzato ( )Master

 

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

Tools usati

SoftICE
DeDe
Spy++

URL o FTP del programma

Cercate Advanced Dialer su
www.download.com

Essay

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:

CODE:00417DC7 mov eax, [ebp+path_adialer_params_ovl]
CODE:00417DCA call f_carica_processo ;

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.