Zoom Icon

OllyDbg e Delphi - Parte III

From UIC

OllyDbg e Delphi Parte III

Contents


Infos
Author: DesTroYer
Email: Kobra1505@libero.it
Website: Home page
Date: 14/10/2006 (dd/mm/yyyy)
Level: Working brain required
Language: Italian Image:Flag_Italian.gif
Comments: E' stato tradotto da un articolo di Cocco



Introduzione

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 tutorials 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)


Tools


Notizie sul Programma

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.


Essay

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.

Image:Destroyer_olly_delphi_p3_001.jpg

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:

Image:Destroyer_olly_delphi_p3_002.jpg

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

Image:Destroyer_olly_delphi_p3_003.jpg

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

Image:Destroyer_olly_delphi_p3_004.jpg

RICORDATE:

CHECK: ENTIRE BLOCK

NESSUN CHECK: CASE SENSITIVE

Bene, pressiamo OK e vediamo:

Image:Destroyer_olly_delphi_p3_005.jpg

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

Image:Destroyer_olly_delphi_p3_006.jpg

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:

Image:Destroyer_olly_delphi_p3_007.jpg

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:

Image:Destroyer_olly_delphi_p3_008.jpg

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 !

Image:Destroyer_olly_delphi_p3_009.jpg

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:

Image:Destroyer_olly_delphi_p3_010.jpg

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:

Image:Destroyer_olly_delphi_p3_011.jpg

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.

Image:Destroyer_olly_delphi_p3_012.jpg

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,



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


Note Finali

Bene, siamo arrivati alla fine del tutorial, spero che vi sia piaciuto, se volete contattarmi potete farlo a: co2_cracker@hotmail.com

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

A Satya di Izhal (Maxi T.)

A The_Chameleon

Grazie.

Cocco.


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.