Zoom Icon

Ollydbg e VB Part4

From UIC

Ollydbg e Visual Basic - La parola Magica

Contents


Infos
Author: Cocco
Email: Kobra1505@libero.it
Website: --
Date: 16/06/2006 (dd/mm/yyyy)
Level: Working brain required
Language: Italian Image:Flag_Italian.gif
Comments: Traduzione Italiana a cura di DesTroYer



Introduzione

Ciao a tutti, incominceremo questo tutorial chiarendo che la tecnica usata funziona tanto in VB5 come in VB6, personalmente non mi piacciono i programmi in VB, solo che oggigiorno esistono gran quantità di programmi fatti con questo linguaggio di programmazione e non ci sono molte tecniche che aiutino i crackers, comunque fra i due preferisco il Visual Basic 6.0.

Vedremo che OllyDbg è più potente di quello che immaginiamo se sappiamo utilizzarlo correttamente inoltre crackare programmi in VB sarà più piacevole.

Quello che voglio realizzare con questo tutorial è portare un granello di sabbia, e di aiuto, al momento in cui ci troveremo a confrontarci con questo linguaggio.

L'unica cosa che mi rimane da dire è che se qualcuno vuole correggere, aumentare, o togliere qualcosa di questo tute lo faccia pure, in nessun momento si pretende che sia una guida chiusa bensì tutto il contrario.


Tutorial

Un po' di teoria


Bene, come ormai tutti sanno i programmi in Visual Basic lavorano in una maniera differente dagli altri programmi Perché dico "Differente?" perché utilizzano costantemente alcune librerie esterne, chiamate MSVBVM50.DLL in Visuale Basic 5.0 e MSVBVM60.DLL per la versione 6.0. Queste librerie sono le addette a "tradurre" il codice del programma, per esempio le APIs.

La cosa interessante è che quando disassembliamo un programma fatto in VB sicuramente non capiremo per la prima volta un tubo di quello che vediamo e questo è normale, quindi abbiamo bisogno di nuove tecniche di cracking o dell'aiuto di altri programmi per uscire vittoriosi (Chi non conosce a Smart Check? ;)

Nei programmi fatti in Visual Basic, si usano generalmente i registri: EAX, ECX, ed EDX.

Bene, quello che faremo è "dare la caccia" letteralmente in memoria ai movimenti permettendoci di entrare nel codice nel momento in cui i nostri dati sono preparati per essere manipolati, ovvero, giusto dove vogliamo. ;)

La parola magica


Visual Basic 5.0

*CALL [EAX+000000A0]
*CALL EDX+000000A0]
*CALL [ECX+000000A4]

Visual Basic 6.0

*CALL [EAX+000000A0]
*CALL [ECX+000000A0]

Cosa sono? Bene… un esempio e vediamo…
Nota:
Dipendendo dal tipo e quantità di chiamate alla DLL varierà tra un registro ed un altro.
Anche delle APIs utilizzate per il programma.
Per il nostro studio utilizzeremo un programma Shareware fatto in VB6:

Image:Ollydbg_vb_part4_image01.gif

Per prima cosa guardiamo un po', andiamo al menù HELP e selezioniamo REGISTER, completiamo i dati:

Image:Ollydbg_vb_part4_image02.gif

Premiamo OK e

Image:Ollydbg_vb_part4_image03.gif

Caspita… credevo di avere più fortuna jeje.

Image:Ollydbg_vb_part4_image04.gif

Apriamo l'Eseguibile con OllyDbg, Olly lo carica e l'analizza, bene, fermiamoci qui:
Ora supponiamo che cercando nelle STRINGS REFERENCES non troviamo niente.Supponiamo anche per un momento che non ci sono APIs che ci servono per prendere il testo.
Che facciamo???
C'è un piccolo trucco che ci permette di brekkare e fermare l'esecuzione del programma giusto quando si stanno preparando i dati per essere manipolati. Cioè, fermare il programma quando legge i dati che introduciamo. ;)
La cosa migliore è che non utilizzeremo APIs né niente che possa assomigliargli.
Andiamo…
Ricapitoliamo le cose, abbiamo l'Olly col programma aperto …Nella prima linea del disassemblato facciamo CLIC Destro - SEARCH FOR - COMMAND.

Image:Ollydbg_vb_part4_image05.gif

E nella finestra inseriamo la parola magica:

CALL [EAX+000000A0]


Image:Ollydbg_vb_part4_image06.gif

Premiamo FIND
Olly si fermerà nel primo riferimento:

Image:Ollydbg_vb_part4_image07.gif

Ora mettiamo qui un BP con F2:

Image:Ollydbg_vb_part4_image08.gif

Nota:
Se continuiamo cercando "CALL [EAX+000000A0]" (CTRL+L) troveremo molti riferimenti che non ci serviranno, a noi interessa solo il primo che trova l'Olly, ricordare, solo la prima volta che Olly si ferma nella ricerca è quella CALL che c'interessa.
Ora premiamo F9 (RUN), completiamo i dati e pressiamo OK, OllyDbg si fermerà nel BP.
Se steppiamo di poche linee possiamo vedere come si prende il seriale che abbiamo inserito:
Nel mio caso: 1122

Image:Ollydbg_vb_part4_image09.gif

Steppiamo fino a:
0041C3AE API: MSVBVM60.__vbaVarTstEq, comparazione)

entriamo dentro con F7.
Tracciamo fino a:

Image:Ollydbg_vb_part4_image10.gif

Facciamo CLIC tasto Destro sul registro ECX - FOLLOW In STACK:

Image:Ollydbg_vb_part4_image11.gif

E vedremo nello STACK il Seriale corretto!: (Serial Fishing)

Image:Ollydbg_vb_part4_image12.gif

Adesso è meglio esemplificare quanto imparato.
Si tratta di una tattica in nostro favore.

Vediamo alcuni esempi …
(Un CrackMEs in VB)

Il secondo Crackme di Daniel


Eseguiamo il Crackme e vediamo:

Image:Ollydbg_vb_part4_image13.gif

Un pannello numerico per introdurre i dati.
Apriamo l'eseguibile con OllyDbg, ed una volta che termina di caricare, facciamo:
CLIC Destro - SEARCH FOR - COMMANDY
mettiamo la parola magica:

CALL [EAX+000000A0]

Mettiamo un BP e ricominciamo tutto (CTRL+F2), premiamo F9 (RUN), e disabilitiamo momentaneamente il Breakpoint, CTRL+B - Clic destro - DISABLE ALL) e introduciamo un Seriale qualunque, io uso: 1122, metto 112 e prima di inserire quell'ultimo 2, ritornare all'Olly, abilitare il BP e quando premiamo il 2, per completare la mia chiave: 1122, l'Olly prende il controllo fermandosi nel BP, tracciamo alcune linee e vediamo come vengono presi i nostri dati jeje

Image:Ollydbg_vb_part4_image14.gif

Il Crackme v2.0 di Eterno Bliss



Image:Ollydbg_vb_part4_image15.gif

Lo carichiamo con l'OllyDbg, CLIC Destro - SEARCH FOR - COMMANDY
mettiamo la parola magica:

CALL [EAX+000000A0]


Image:Ollydbg_vb_part4_image16.gif

Olly si ferma, mettiamo un BP, diamo F9 (RUN), completiamo con qualunque numero e premiamo REGISTER

Image:Ollydbg_vb_part4_image17.gif

Olly si ferma nel BP, tracciamo alcune linee ma sotto e vediamo:

Image:Ollydbg_vb_part4_image18.gif

Come il programma prende i nostri dati. Jeje.

Il Crackme v3.0 di Eterno Bliss



Image:Ollydbg_vb_part4_image19.gif


Note Finali


Bene… spero che d'ora in poi craccare in Visual Basic sia più piacevole.

Cocco.
co2_cracker@hotmail.com
Traduzione Italiana : DesTroYer
Kobra1505@libero.it


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.