OLLYDBG E VISUAL BASIC :

LA PAROLA MAGICA

Autore: Cocco

Traduzione Italiana : DesTroYer

[email protected]

Published at: http://quequero.org

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  craccare 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.

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:

Visuale 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:


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


Premiamo OK e

                           


Caspita… credevo di avere più fortuna jeje.

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.


E nella finestra inseriamo la parola magica:

CALL [EAX+000000A0]


Premiamo FIND
Olly si fermerà nel primo riferimento:


Ora mettiamo qui un BP con F2:

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

 


Steppiamo fino a:

0041C3AE API: MSVBVM60.__vbaVarTstEq, comparazione)

entriamo dentro con F7.

Tracciamo fino a:


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


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

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:


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.

Il Crackme v2.0 di Eterno Bliss:


Lo carichiamo con l'OllyDbg, CLIC Destro - SEARCH FOR - COMMANDY
mettiamo la parola magica: CALL [EAX+000000A0]


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

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

Come il programma prende i nostri dati. Jeje.

Il Crackme v3.0 di Eterno Bliss:


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

Cocco.

[email protected]

Traduzione Italiana : DesTroYer

[email protected]