FFContascatti 99
Tecnica usata : Utilizzo di SmartCheck (Cracking in VB6)

 

27-10-1999

by "Sator SSH"

 
 

UIC's Home Page

Published by Quequero

We work in the dark.We do what we can.We give what we have.Our doubt is our passion,

Finalmente un tutorial sul VB :)..Raga se non odiassi quel linguaggio ne farei anche io...Per fortuna che c'è Sator :)

and our passion is our task.The rest is the madness of art.

Henry James.

UIC form
 E-MAIL : [email protected]
On IRC : Sator SSH - CHANNEL : #crack-it
On ICQ : UIN # 5954265
On POWWOW : Francesco
UIC form

Difficoltà

(X)NewBies (X)Intermedio ( )Avanzato ( )Master

 

Far credere al programma che il fake code da noi inserito sia sempre quello giusto !!! :-)))


FFContascatti 99

Tecnica usata : Utilizzo di SmartCheck (Cracking in VB6)

Written by Sator SSH

Introduzione


Come crackare programmi scritti in Visual Basic 6 per permetterne la registrazione pur inserendo qualsiasi codice.

Tools usati

SoftIce v4.01 - Wdasm v8.93 - SmartCheck v6.03

URL o FTP del programma

Il programma lo si può reperire al seguento indirizzo: http://members.xoom.it/ffsoft/

Notizie sul programma 

Credo che il nome del programma sia già di per se molto esplicativo.....o no? :-)

Essay

CRACKING IN VISUAL BASIC 6

REVERSING E PATCHING

Crackare programmi scritti in VB è la stessa ed identica cosa che crackare programmi scritti in altri linguaggi. L'unica vera differenza è che con gli usuali bpx si riesce a fare ben poco, in quanto essi, raramente usano le API standard di Windows. Si servono, infatti, intensamente delle funzioni contenute nella msvbvm60.dll trattasi di programmi scritti in VB6 o msvbvm50.dll se scritti invece in VB5 etc... (per la cronaca msvbvm sta per MicroSoft Visual Basic Virtual Machine). Altra cosa, di fondamentale importanza, è quella di settare i famigerati bpx sulle giuste funzioni, e questo è più che mai vero nel cracking in VB che in altri linguaggi. Passerete, altrimenti, secoli ad eliminare anche il più stupido dei NagScreens. Dunque, a questo punto editate per prima cosa il file winice.dat ed aggiungete la seguente riga:

EXP=C:\Windows\System\msvbvm60.dll

Questo per esportare sempre le funzioni di cui si serviranno i vari programmi ma ricordatevi di riavviare il computer dopo la modifica. Vi consiglio, inoltre, prima di iniziare, di disassemblare il programma e di stampare tutte le funzioni di cui essi si servono. A prima vista sembreranno ostiche e strane, ma vi posso assicurare che sono molto intuitive e prova e riprova, troverete senz'altro l'esatta funzione su cui settare i bpx per raggiungere l'esatta porzione di codice che interessa, e mettere così a segno le vostre malefatte :-))) !!! Bene, dopo questo scarno prologo andiamo ad iniziare...

CODICE D'ATTIVAZIONE

Dunque, dopo aver scaricato il programma, installiamolo e lanciamolo. Ci apparirà una form in cui inserire il codice d'attivazione oppure valutare il programma. Terminato il periodo di valutazione (30 gg.) dovremo per forza registrarlo e non ci è più consentito andare avanti nella valutazione (ovvio, no ?) per cui saremo costretti per forza di cose a chiudere il programma e non poterlo più usare. A questo punto non ci rimane altro che piangere... :-) ma no, non sia mai!!! Abbiamo due possibilità: trovare l'esatto codice d'attivazione o patchare il programma in modo tale che accetti qualsiasi stringa da noi inserita e fargli credere così che è quella giusta. Io personalmente opto per la seconda soluzione in quanto mi piace più bypassare e/o disattivare le routine che presiedono al controllo dell'immissione del giusto codice, che invece la ricerca di quello esatto (Anche se la prima è meno professionale e soprattutto più difficile :))) NdQue). Ma a noi che ce ne frega di te....direte voi. Giusto. Continuiamo...Immettiamo allora un codice qualsiasi e vedremo che non succede nulla. Il tasto 'OK' per la conferma dell'immssione non si attiva... accidenti, e mo' so cavoli e amari pure ;-). Bene, a questo punto potremmo usare il Softice e settare un bpx su HMEMCPY e poi inserire il primo numero...ci ritroveremo nel debugger, ma posso assicurarvi che così facendo si arriva si alla soluzione ma dopo esservi distrutti tutti o quasi i neuroni. C'è una via più semplice: usare SmartCheck della Numega (la stessa casa di software produttrice di Softice... Che Dio la benedica !!!). È in pratica più o meno un debugger che mostra in real-time gli eventi che si susseguono durante il funzionamento di un programma in VB. Lanciamo SmartCheck e configuriamolo a dovere. Se non lo si è già fatto e non masticate bene l'inglese, può esservi d'aiuto il tutorial che potete trovare qui.
Carichiamo il programma in SmartCheck, click sulla freccina nella barra degli strumenti e via...aspettiamo la famosa form per immettere il nostro codice fasullissimissimo.... eddai, un pò di serietà perdinci...ok va bene...(limitatevi ad inserire un solo carattere). Fatto? Ok...proseguiamo, se andate in fondo alla pagina alla ricerca degli ultimi eventi troverete esattamente all'evento n. 108104 la referenza "txt(0)_Change", aprite l'evento e troverete a 108179 un' altra referenza "fltok.68030009 <-- False (Boolean)"...bhè più chiaro di così si muore. Click su questa voce e annotatevi l'indirizzo che compare nella finestra dei dettagli, a lato del nome del programma, nel nostro caso 90BE8.
Disassemblato il programma, (vedi sotto) portatevi all'indirizzo di cui sopra che equivale a 490BE8 in Wdasm. Noterete che il disassemblatore vi porterà invece a 490BE7 (niente paura...è la stessa cosa, sarà un piccolo bug di SmartCheck?)

* Reference To: MSVBVM60.__vbaFreeVar, Ord:0000h

:00490B9A Call dword ptr [00401020]
:00490BA0 cmp bx, di
<---- Esegue il solito confronto
:00490BA3 je 00490BA9
<---- Salta se eax=1,non salta se eax=0
:00490BA5 xor eax, eax
<---- Azzera il registro
:00490BA7 jmp 00490BAC
<---- Routine di controllo

Jump at Address:
|:00490BA3(C)
|
:00490BA9 or eax, FFFFFFFF
<---- Eax deve assumere questo valore per i nostri scopi

Jump at Address:
|:00490BA7(U)
|
:00490BAC ............................
......................................
......................................
:00490BDF ............................

* Reference To: MSVBVM60.__vbaObjSet, Ord:0000h

:00490BE0 Call dword ptr [004010B0]
:00490BE6 push eax

* Reference To: MSVBVM60.__vbaLateIdSt, Ord:0000h

:00490BE7 Call dword ptr [00401258]
<---- Qui
:00490BED lea ecx, dword ptr [ebp-38]

Come avrete già notato a 490BA3 c'è un salto condizionato dopo il solito compare, che non viene eseguito perchè il carattere da noi inserito è fasullo.Forzandolo invece, la routine preposta al controllo si comporterà diversamente in quanto viene ad essere eseguita anche l'istruzione a 490BA9. Come conseguenza di ciò cosa avremo? Ma ovvio, l'inserimento di qualsiasi codice con il tasto "OK" sempre attivo fin dall'immissione del primo carattere. Premuto "OK" il programma chiederà ora le vostre generalità: Una volta terminato, andate in Info Contascatti e vedrete il vostro bel codice e la voce Registrato a: contenente il vostro nome. Oh Yessss...!!!!

N.B. Se spulciate per bene il programma, usando SmartCheck, scoprirete altre interessantissime cose. Si può per esempio agire sul controllo di ogni singolo carattere inserito e addirittura trovare l'esatto codice d'attivazione. Bhè, vedete un pò voi!!!!

Rilanciamo il programma e vediamo cosa succede: ORRORE e VITUPERIO!!! Di nuovo la form che ci invita a registrare il prodotto...con la differenza adesso che, anche a periodo di valutazione terminato, si può tranquillamente valutare di nuovo il programma; evidentemente non è del tutto convinto che sia stato registrato. Se eseguite il programma con FileMonitor vi accorgerete che legge un file proprietario di nome ffconta.c99 in cui è stato memorizzato il nostro codice fasullo che viene poi confrontato con una stringa rigorosamente criptata presente nel registro. (Se avete voglia andate a darci un' occhiata). Comunque niente paura! Fire your WinICE (diceva +OCR) La mia povera mente ricorda invece un tale +ORC non +OCR :)) NdQue, entrateci con CTRL+D e settate un bpx (l' ho trovato io per voi, quello giusto) su msvbvm60!__vbaStrErrVarCopy (proprio così... tutta 'sta pappardella per un misero breakpoint) Comunque almeno da me basta inserire il testo a partire da __vba....Non credo serva la stringa msvbvm60! NdQue. In ogni caso, debuggando, vi accorgerete che, tutte le funzioni chiamate dal programma, sono precedute dalla stringa "msvbmv60!", per cui, mi raccomando, non dimenticate di inserirla. Questo non è significativo infatti pure GetWindowText è preceduto da User32!GetWindowTextA, ma mica mettiamo i breakpoint su tutta la stringa! NdQue
Va bhè,caricate il programma e siete di nuovo in Ice... adesso premete 21 volte F5 in modo da farlo girare e arrivare nel punto in cui comparirà la fatidica form di registrazione, fatto questo premete F12 e vi ritroverete, dopo aver steppato un pochino nella porzione di codice che riporto pari pari, qui di seguito:

* Reference To: MSVBVM60.__vbaFreeVar, Ord:0000h

:00479D95 Call dword ptr [00401020]
<---- Routine di verifica e Form iniziale
:00479D9B cmp si, bx
<---- solito banalissimo compare
:00479D9E je 00479E46
<---- Controllo Form di Registrazione
:00479DA4 cmp dword ptr [004951A0], ebx
<---- altro solito banalissimo compare
:00479DAA jne 00479DBC
<---- Controllo Periodo di Valutazione

Jump at Addresses:
|:00478E22(U), :00478F44(U), :00479237(U)
|
:00479DAC push 004951A0
:00479DB1 push 0040D560

* Reference To: MSVBVM60.__vbaNew2, Ord:0000h

:00479DB6 Call dword ptr [004011BC]

Jump at Addresses:
|:00478E1C(C), :00478F3E(C), :00479231(C), :00479DAA(C)
<---- Questo è l'unico vero importante per il bypass della data.(A noi cmq ciò, non interessa). Giusto per dovere di cronaca.
|
:00479DBC ............................
......................................
......................................
:00479E27 call dword ptr [edi+000002B0]
<---- Inizia a creare la form di Registrazione
......................................
:00479E2F ............................

Dunque, se steppate arriverete alla call 479E27 che inizierà a creare la form di registrazione, per cui andate sopra, vedete il salto condizionato a 479DAA e lo modificate. Otterete solo il bypass del controllo sul periodo di valutazione.
Il controllo della registrazione e del nagscreen è effettuato dal salto condizionato a 479D9E. Se non eseguito NAG, se eseguito No NAG...chiaro?
Vi sarà molto più chiaro il tutto se andate a vedervi le 2 differenti routine a seconda che si effettui o meno il salto a 479D9E. (Sono semplicissime...ah dimenticavo, la funzione __vbaNew2 dovrebbe corrispondere più o meno al createwindow delle api standard di Windows).

 

P.S. Quanto detto in questo tutorial è vero anche per l'aggiornamento del programma alla versione 1.3, scaricabile dal sito dell'autore. Cambiano ovviamente indirizzi e offset!

PP.SS. Questo procedimento per reversare e/o patchare in VB6 è validissimo per tutti i programmi scritti in questo linguaggio... almeno con i programmi che ho provato io.

 

Sator SSH

 

Note finali

Desidero ringraziare innanzitutto Quequero che mi ha permesso di pubblicare questo tutorial e tutti quelli che con i loro suggerimenti e consigli mi hanno aiutato nell'apprendere le nozioni basilari del Cracking .Un caloroso saluto e ringraziamento va all'amico di tante notti insonni GR!SU' (che ormai è diventato più bravo di me) e a tutti gli altri cracker più anziani è più in gamba di me:

+ORC, Xoanon, ED!SON, Scacco, Cyborg, CbD, Keyboard Caper, Fravia e naturalmente anche a tutti quelli che involontariamente ho dimenticato di menzionare.

Disclaimer

Il presente documento è stato scritto solo ed esclusivamente per un uso puramente didattico, al fine di comprendere meglio alcune tecniche di protezione all'interno del codice programma. Pertanto non mi assumo nessunissima responsabilità circa l'uso illecito o non corretto, da parte di terzi, di questo tutorial, né tantomeno per eventuali danni che l'applicazione di quanto scritto, potrebbe arrecare ad eventuali software.
Se siete interessati ad un programma compratelo e registratelo !!!

Ciao a tutti e alla prossima…. :-) !!!


 
UIC's page of reverse engineering, scegli dove andare:

Home   Anonimato   Assembly   ContactMe   CrackMe   Links   
NewBies   News   Forum   Lezioni  
Tools   Tutorial 
UIC