FFContascatti 99 |
||
27-10-1999 |
by "Sator SSH" |
|
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 |
|
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 |
Tools usati |
URL o FTP del programma |
Il programma lo si può reperire al seguento indirizzo: http://members.xoom.it/ffsoft/
Notizie sul programma |
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
|
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 . :-) !!!