�����������������������������������������������������������������������������U
�                     [x] RingZ3r0  Proudly Presents [x]                     �
�        U�����������������������������������������������������������        �
         3        Il Reversing di un programma Visual Basic 5       3

                                  aLoNg3x

                               12 Marzo 1999

--==[   PREMESSA   ]==--------------------------------------------------------

LE INFORMAZIONI CHE TROVATE ALL'INTERNO DI QUESTO FILE SONO PER PURO SCOPO
DIDATTICO. L'AUTORE NON INCORAGGIA CHI VOLESSE UTILIZZARLO PER SCOPI ILLEGALI.

--==[  DIFFICOLTA' ]==--------------------------------------------------------

scala : *=Novizio, **=Apprendista, ***=Esperto, ****=Guru
target: N/R

--==[  TOOLS USATI ]==--------------------------------------------------------

* Softice        (Numega)
* Come al solito un cervello in buone condizioni :)

--==[ INTRODUZIONE ]==--------------------------------------------------------

Best viewed with old m$-do$ EditoR...

Salve a tutti,
con questa guida cerchero' di spiegare un primo tipo di approccio rispetto
alle protezioni di programmi scritti con il VB (arghhhh) scherzo.. Bill ;)
Infatti normalmente il metodo utilizzato e' diverso da quello tradizionale
dato che gli eseguibili del Vb per far qualsiasi tipo di operazione fanno
sempre riferimento a delle librerie di funzioni standard.
Nel caso del Visual Basic 5 alla MsVbVm50.Dll (size: 1.347.344)

--==[  LET'S GO :p ]==--------------------------------------------------------


Come spero gia' saprete disassemblando con il Wdasm l'exe non si ottiene
alcuna valida informazione dalle string references, quindi partiremo da un
approccio live con il Softice... Puo' comunque risultare utile salvare il
disassemblato per poi osservare con calma le parti piu' "interessanti" del
programma.

Il programma in questione e' un utilita' per inserire nei motori di ricerca
principali il vostro sito, si chiama "Dynamic Submission" (v. 4.031) prodotto
dalla Apex Pacific, comunque penso che questa procedura possa risultare comune
a molti programmi e non ritengo quindi necessaria una spiegazione specifica.
Spero che alla fine di questa spiegazione sarete in grado di comprendere la
protezione di una gran parte dei programmi in VB :)

A mio parere la prima cosa da fare consiste nell'inserire nel winice.dat
la dll del vb dalla quale verranno importati i symbols che ci consentiranno
facilmente di inserire "bpx" sulle funzioni che a noi interessano...

; ***** Examples of export symbols that can be included for Windows 95 *****
;       Change the path to the appropriate drive and directory
EXP=c:\windows\system\kernel32.dll
EXP=c:\windows\system\user32.dll
EXP=c:\windows\system\gdi32.dll
EXP=c:\windows\system\msvbvm50.dll <--- Questa riga e' quella che ci serve...

Riavviate quindi il PC caricando il caro Sice in memoria...
Fate partire il vostro programma target entrando nella finestra che vi chiede
i dati per la registrazione...

In questo prog. ci sono 4 campi:

- Series no.
- Register Code

"-.class" tppabs="http://www.crackstore.com/tutorz/-.class" Registered Name (scopriremo in seguito che questi due campi non servono
- Organisation     a niente ai fini della registrazione...)

Infatti tutto il check si basa sui primi 2 campi.
Scrivete i vostri dati preferiti (cercate di ricordarveli, dato che vi saranno
utili se li "beccate in giro" per la memoria...)
Prendete ora il programma PeBrowse e fate un bel Load dell'eseguibile in
questione... osservate attentamente la scheda delle funzioni importate...
Fate scorrere tutta la lista cercando di stare bene attenti :)
E' a mio parere fondamentale la "__vbaStrCmp" utilizzata dai progs in Vb per
confrontare due stringhe...
Normalmente i programmatori un po' sensati cercano di usare qualche trucchetto
per evitare (o per mascherare) questa funzione che vi fa comparire in memoria
i parametri passati che sono solitamente molto interessanti... o no ?? ;)
Invece in questo caso non ci sono strani problemi.. e tutto fila liscio come
spesso avviene...

Entrate quindi in Sice e settate un bpx sulla funzione __vbaStrCmp (se non
sapete usare questi comandi fondamentali, leggetevi una guida) tornate a Win
e premete il pulsante register...

Se avete fortuna il sice dovrebbe "breakkare" (se cio' non avvenisse allora
vi conviene dare un bello sguardo alle functions importate e cercare quale
potrebbe essere quella giusta, continuando comunque a sperare di non aver
beccato un bravo programmatore che vi sta facendo perdere un sacco di tempo
con trukketti vari.. ;p

Se invece tutto e' andato nel migliore dei modi vi dovreste trovare alla prima
istruzione della funzione __vbaStrCmp all'interno della DLL di VB... premete
quindi F11 per giungere fino al ret della func. e tornare quindi al nostro
caro .exe

Nel caso di questo programma, vado avanti un po' a "steppare" giungendo fino
ad un test eax,eax seguito da un jmp condizionale...
Una tecnica che io spesso utilizzo per reversare i progs consiste nel
modificare l'EIP in modo da invertire l'effetto del jmp in modo tale da vedere
una possibile finestra di messaggio che mi puo' fornire importanti
informazioni, anche perche' non ho il supporto "off-line" delle string
references" del wdasm...

In questo caso invertendo gli effetti del jmp mi appare una segnalazione che
indica di inserire i miei dati personali, c'e' quindi un semplice controllo se
ho inserito ho meno il nome.

Nota: __vbaStrCmp riceve due parametri che confronta... eax = 0 = uguali
                                                              1 = diversi

Guardate anche dove ci sono i due push prima della funzione e vedrete che i
valori pushati puntano in memoria alla locazione della stringa del nome e ad
una stringa nulla. Capito ??? :)

Ok, ora mettiamo sempre valori a caso e clikkiamo nuovamente per registrarci,
il sice brekka per il solito primo controllo, premiamo F5 per rimandare in RUN
e incrociando le dita troviamo un secondo break... ottimo :)

Ripremente F5 in modo tale da vedere il messaggio che vi annuncia che il SN
e' sbagliato...

Rifate tutta 'sta procedura ma ora uscite dal secondo break con F11 e settate
un bpx poco prima della seconda chiamata alla __vbaStrCmp
Nel mio caso c'e' una call prima della quale viene pushato un parametro...
Se vado a debuggarci sopra scopro che quello e' il series no. e la func mi
ritorna in eax (in CHIARO) il register code per quel numero seriale :)

Questo parametro in eax viene poi pushato prima della String Compare e se
andate una decina di righe prima a guardare, scoprirete anche il push del
codice che noi avevamo inserito... in poche parole quindi alla funzione
di compare son passati due parametri:

1 - Il Codice di Registrazione da noi inserito
2 - Il codice corretto (generato dalla call alla quale viene passato il SN)

Siamo quindi quasi giunti alla fine... ("Era ora !!!" direte voi... :)
Ora possediamo il codice di registrazione corretto... possiamo quindi usare
quello oppure modificare la call di generazione in modo tale da farle
tornare magari un Codice identico al numero seriale...

La cosa importante e' comunque aver imparato nuove cose riguardo alla tecniche
di protezione di programmi scritti in Vb.

Una piccola osservazione: Se andate un attimo a smanettare con il regedit,
scoprirete una cartellina relativa a questo programma con dentro i dati
rigurdanti la registrazione...

Ci sono da notare 3 cose piuttosto importanti:

1) Modificando Nome e Organizzazione non succede un cazzo...
2) Abbiamo la possibilita' di cambiare il numero seriale... (ovviamente poi
   il codice che abbiamo non andra' piu' bene....
3) MOLTO importante: quei coglionazzi dei programmatori hanno lasciato una
   variabile booleana idiota che chekka se il prog. e' registrato o meno..
     0 ==> Registrato
     1 ==> Evaluation
   Sigh.... mi viene da piangere a vedere certe cazzate.... se fossi il
   proprietario di questa S-house licenzierei i coders all'istante e assumerei
   il "buon" aLoNg3x ;))) che ne dite ? :p

--==[ NOTE FINALI ]==---------------------------------------------------------

Spero che questo tute vi sia stato d'aiuto.... segnalatemi se c'e' qualche
errore o qualche altra minchiata....

Se volete ulteriori spiegazioni, scrivetemi a:

aLoNg3x --- along3x@geocities.com

Ricordate comunque di non usare le vostre conoscenze a fini illegali....
Ringrazio come al solito tutto il gruppo Ringzer0 e tutti quelli che mi danno
sempre una mano... (un grazie anche a Samp3i... lui sa perche':)
Saluto tutti gli amici del chan #crack-it e tutti quelli conosco che magari
fanno parte di altri gruppi :)

Infine suggerisco a tutti di ascoltare i Lag-wagon... il migliore gruppo
musicale del mondo ! (state tranquilli.. non mi passano una percentuale... ;)

Ciauz.

"...Le poete est semblable au prince des nu�es
Qui hante la tempete et se rit de l'archer;
Exil� sur le sol au milieu des hu�es.
Ses ailes de g�ant l'empechent de marcher."

Tratto da "L'Albatros" --- Charles Baudelaire

--==[     EOF      ]==--------------------------------------------------------