OLLYDBG E DELPHI PARTE III:

Autore : Coco

Traduzione Italiana : DesTroYer

[email protected]

Published at: http://quequero.org

Ciao a tutti!, E' da un po che abbiamo iniziato lo studio sulla struttura interna dei programmi compilati in Delphi, questa volta sono particolarmente emozionato dovuto al tema che affronteremo in questo tutorial.

Nei tutorals precedenti abbiamo visto come era possibile fermare l'esecuzione di un programma quando premevamo un bottone, questo è stato possibile grazie agli Eventi e come potevamo fermarci su qualunque "elemento" di un programma che si potesse "Cliccare", cioè premere col puntatore del Mouse.

Ma che succede quando arrivano nelle nostre mani di Cracker programmi senza pulsanti (bottoni)?, o con radio buttons?, la cosa effettivamente cambia, ma ricordare che abbiamo nelle nostre mani l'attrezzo perfetto: OLLYDBG.

Quello che impareremo in questo tutorial funziona con qualunque tipo di protezione: Quando premiamo un bottone, senza pulsanti, pulsanti disabilitati, radio buttons, check box, etc. jeje. :)

La cosa migliore di tutto è che questa tecnica è valida tanto per Windows 98- che per Windows Xp.

NOTA:

È della massima importanza sapere che affinché il metodo che impareremo  funzioni bisogna che siano vere i 2 condizioni:

·         L'eseguibile deve essere Decompresso.

·         L'eseguibile non deve essere del tipo DCONSOLE PACKAGE (tipo di raccolta utilizzato in genere negli Installatori)

COMINCIAMO:

Come ebbi modo di dire precedentemente, la programmazione nell'ambiente Windows si caratterizza per essere orientata agli eventi, questo significa che un programma non deve eseguirsi necessariamente in forma sequenziale, ma certe porzioni di codice si eseguiranno quando succede un certo evento.

Gli eventi sono segni che l'ambiente riceve da distinti elementi, come possano essere il mouse, la tastiera o un temporizzatore. Questi eventi sono reindirizzati alle applicazioni che dovranno rispondere adeguatamente in caso di accettazione. Certi eventi possono essere gestiti direttamente da  Windows, altri rimarranno a carico del linguaggio che stiamo usando, ed un terzo gruppo saranno quelli che arrivano fino al nostro programma. In Delphi tutto il codice che scriviamo andrà praticamente associato a qualche evento. Questo è molto importante comprenderlo, normalmente gli eventi ai quali reagiranno i componenti saranno le pressioni sulla tastiera o il mouse, attivazioni dei componenti, etc.

VARIABILI E COSTANTI

A differenza di altri linguaggi come il C, Delphi usa riferimenti nelle dichiarazioni di variabile  significa che utilizza un puntatore ad una direzione dove si immagazzina il dato che vogliamo scrivere o leggere.

PROCEDIMENTI E FUNZIONI

A differenza di Visual Basic, il linguaggio Delphi usa procedimenti e funzioni per eseguire il codice che utilizza il nostro programma. Tra tutti e due la differenza principale è che le funzioni ricevono parametri e restituiscono il risultato nel nome della funzione, come in VB. Invece, i procedimenti si incaricano di eseguire un codice prescritto che si basano su parametri che si qualificano di "entrata", "uscita" e di "entrata/salita", attraverso i quali invieremo dati e riceveremo risultati.

ALL'OPERA!:

In questo tutorial vedremo come fermare l'esecuzione di un programma in DELPHI, questo ci permetterà di osservare il codice giusto quando: pressiamo un bottone, segniamo check box e la cosa migliore di tutto: QUANDO NON CI SIANO BOTTONI CHE PERMETTONO DI INTRODURRE IL SERIALE!

Un Esempio vale più di1000 Parole:

Crackme RUNNIN' BUTT-ON di Terminale Cilla:

Come esempio utilizzeremo un crackme senza bottoncini per inserire il seriale.

Vediamo che il crackme ci chiede User Name e Seriale e ha 1 bottoncino REGISTER!

Ma non vi fidate, il bottone REGISTER! non fa niente, serve solo per depistarci, infatti solo introducendo il Seriale Corretto arriveremo al messaggio di Auguri.

Supponiamo per un momento che non abbiamo riferimenti a stringhe di testo e per renderlo più interessante supponiamo anche che non abbiamo APIs dove mettere un  BP.

Non funziona neanche cercare: "nome del bottone - Click" perché non dobbiamo premere un bottone per introdurre testo, solo inserire il seriale corretto,

Che facciamo ora?

Cerchiamo la seguente catena di testo in HEX:    

FF FF FF 8B D8 8B C7 8B CB 33 D2

Bene, apriamo l'eseguibile con OLLYDBG, saliamo fino alla prima linea del disassemblato nella finestra del CPU:

Una volta lì, pressiamo CTRL+A (ANALYSIS) affinché OllyDbg analizzi il codice 

è molto importante fare in primo luogo un'analisi.

Quindi pressiamo F9, RUN, affinché il crackme si carichi completamente, mettiamo come dati: User Name: Cocco Seriale: 112, dopo, andiamo in OLLYDBG e saliamo alla prima linea nuovamente. Quindi pressiamo CTRL+B, SEARCH, e nella finestra che appare inseriamo la catena di testo in HEX :

RICORDATE:

CHECK: ENTIRE BLOCK

NESSUN CHECK: CASE SENSITIVE

Bene, pressiamo OK e vediamo:

OllyDbg brekka nella catena di testo inserita ora quello che dobbiamo fare è evidenziare la linea dove comincia la CALL, marcata in Rosso, facendo Un CLIC sulla linea e dopo : CTRL+R (FIND REFERENCES):

Con questo si aprirà una nuova finestra mostrando Tutti i posti da dove è chiamata questa parte di codice

                                         

bene, nell'immagine possiamo vedere che questo pezzo di codice è chiamato da varie parti.

Ora quello che dobbiamo fare è: CLIC DESTRO-SET BREAKPOINT ON EVERY COMMAND

Con questo Olly collocherà un BP in ogni comando:

bene, quando abbiamo già i BP messi facciamo CLICK sull'icona corrispondente nel CRACKME nella  barra  (sta in secondo piano), ed OLLYDBG brekka nel primo Breakpoint, quello non c'interessa, cosicché togliamo quel BREAKPOINT (F2), e premiamo F9 (RUN), facciamo nuovamente clic sul crackme nella barra  ed Olly brekka un'altra volta in un BP, neanche questo ci serve cosicché lo togliamo con F2 e pressiamo F9 (RUN) nuovamente e facciamo clic nel crackme nella barra , ora si!, il crackme passa in primo piano e l'Olly non si ferma in nessun BP.

Ora dobbiamo solo inserire un valore qualunque ed OLLYDBG fermerà giusto sul codice che è eseguito quando inseriamo il seriale, cioè Giusto Dove Vogliamo!

La cosa migliore di tutto è che non utilizziamo APIs !!!

Ora, introduciamo un 2 nel campo dello seriale, per completare il mio seriale di 1122,

Ed automaticamente Olly brekka in:

OLLYDBG brekka nel BP che ho evidenziato in azzurro che corrisponde all'User Name, ma sotto possiamo vedere altri BP e dove c'è la linea Grigia, vediamo che vengono presi i dati del Seriale

Jeje.

NOTA:

Ogni BP che rimane da eseguire, (come possiamo vedere nell'immagine di sopra, corrisponde ad altri maneggiamenti che l'eseguibile fa al nostro User Name e Seriale!!!!!

SENZA PREMERE NESSUN PULSANTE

Vediamo un altro crackme

PHROZEN CREW: PC CRACK-io #1

Vediamo che il crackme non ha bottoni per accettare il seriale ed un NOT Registered !

                                       

Carichiamo il crackme in OLLYDBG, pressiamo F9 (RUN) completiamo il seriale, parzialmente. (io uso sempre: 1122 ed ora metterò 112, il 2 che manca lo metterò più tardi,) Ritorniamo ad Olly, pressiamo CTRL+A (ANALYSIS), saliamo fino alla prima linea del disassemblato, e pressiamo: CTRL+B e completiamo con:

FF FF FF 8B D8 8B C7 8B CB 33 D2

Ed Olly ci mostra:

bene, saliamo fino a dove comincia la chiamata (CALL) (marcata con Rosso)

e pressiamo: CTRL+R (FIND REFERENCES TO), con questo si aprirà una nuova finestra coi riferimenti , e facciamo: CLIC DESTRO-SET BREAKPOINT ON EVERY COMMAND ora, facciamo clic sull'icona del crackme, minimizzato in secondo piano, sulla barra  ed Olly brekka in un BP, questo BP non c'interessa cosicché lo togliamo con F2 e pressiamo F9 (RUN), facciamo nuovamente clic sull'icona del crackme nella barra ed il crackme passa in primo piano, ed Olly non si ferma in nessun BP. Bene!!!

Introduciamo un numero : il N° 2 che manca per completare il mio seriale, ed Olly brekka in:

OLLYDBG brekka nel BP ed una linea sotto vediamo che vengono presi i nostri dati;)

Jeje.

UN ALTRO ESEMPIO …: PER CHIARIRE LE COSE

Mi sembra giusto fare un altro  esempio, considerando  che abbiamo lavorato sempre con eseguibili decompressi.

Lame CRACKME by YODA

Ora   utilizzerò un crackme compresso.

Il PeID mi dice: UPX 0.89.6 - 1.02 / 1.05 - 1.22 (Delphi) stub -> Markus & Lazlo

Bene, utilizziamo sempre la stessa procedura di quando vogliamo cercare la catena di testo, OLLYDBG non la trova nonostante ci sia realmente.

Questo errore si deve al fatto che non è possibile analizzare un file compresso.

Nell'immagine possiamo vedere la catena, benché OLLYDBG dica di non trovare niente,

FIG. 1,:                                                                                     FIG. 2 :

                       

figura 1: Compressa                                    figura 2 senza compressione

Quindi come potete vedere quello che è presente nella parte sinistra la troviamo anche sulla destra (dove è racchiusa la chiamata).

CONCLUSIONI:

Bene, siamo arrivati alla fine del tutorial, spero che vi sia , se volete contattarmi potete farlo a: [email protected]

RINGRAZIAMENTI:

Devo ringraziare infinitamente i due amici che si sono disturbati per farmi avere i Crackmes per questo tutorial  cedemtomeli  disinteressatamente:

A Satya di Izhal (Maxi T.)

A The_Chameleon

Grazie.

Cocco.

Traduzione Italiana : DesTroYer

[email protected]