Zoom Icon

FFContascatti 99

From UIC

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

Contents


Infos
Author: Sator
Email: satorssh@freemail.it
Website: None
Date: 27/10/1999 (dd/mm/yyyy)
Level: Working brain required
Language: Italian Image:Flag_Italian.gif
Comments: Finalmente un tutorial sul VB :)..Raga se non odiassi quel linguaggio ne farei anche io...Per fortuna che c'è Sator :)

Frase: We work in the dark.We do what we can.We give what we have.Our doubt is our passion, and our passion is our task.The rest is the madness of art. Henry James



Abstract

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


Introduzione

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


Tools


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.


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

I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.

Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevoli e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.