assembly and reverse engineering

Download Assembly and Reverse Engineering

Post on 09-Jun-2015

857 views

Category:

Technology

4 download

Embed Size (px)

DESCRIPTION

Il documento si propone di analizzare le tecniche di base per effettuare il reverse engineering. Verranno inoltre prese in esame le caratteristiche principali di alcuni dei tool utilizzati nel reverse engineering .

TRANSCRIPT

  • 1. LUIGI CAPUZZELLOReverse Engineering Tecniche di base per il reverse engineering Versione: 1.0Luigi Capuzzello 05/12/2013http://www.linkedin.com/pub/luigi-capuzzello/7/561/12a http://www.slideshare.net/luigicapuzzello @FisherKasparov luigi.capuzzelloIl documento si propone di analizzare le tecniche di base per effettuare il reverse engineering. Verranno inoltre prese in esame le caratteristiche principali di alcuni dei tool utilizzati nel reverse engineering .

2. Definizioni Generali.2Sommario Definizioni Generali.............................................................................................................................3 Memoria...........................................................................................................................................3 Registri.............................................................................................................................................4 Principali Direttive Assembly..............................................................................................................6 Dati: estrarre informazioni...............................................................................................................6 Istruzioni di SALTO.........................................................................................................................6 Metodi di Indirizzamento.................................................................................................................6 LEA, LDS, LES................................................................................................................................7 LOOPE, LOOPZ, LOOPNE, LOOPNZ...........................................................................................7 MOV.................................................................................................................................................7 PUSH, POP, PUSHF, POPF, PUSHA, POPA, PUSHAD, POPAD................................................7 PTR...................................................................................................................................................7 Stringa - Direttiva STOS, STOSB, STOSW....................................................................................7 Stringa - Direttiva CMPS, CMPSB, CMPSW..................................................................................8 Stringa - Direttiva LODSB, LODSW, LODSD (ESI --> EAX).......................................................8 Stringa - Direttiva MOVS, MOVSB, MOVSW, MOVSD (ESI --> EDI).......................................8 Stringa - Direttiva REP, REPE, REPZ, REPNE, REPNZ (CX).......................................................9 Stringa - Direttiva SCAS, SCASB, SCASW....................................................................................9 Gestione dei messaggi in windows....................................................................................................11 OllyDbg e i messeggi.....................................................................................................................13 Reverse Engineering: ricerca di un seriale.........................................................................................14 WindAsm........................................................................................................................................15 Hiew...............................................................................................................................................16 Patch mediante file c++..................................................................................................................16 OllyDbg..........................................................................................................................................17 P32Dasm........................................................................................................................................18 PEditor............................................................................................................................................18 Regmon...........................................................................................................................................18 Filemon...........................................................................................................................................18 Programmi Criptati.............................................................................................................................19 VISUAL BASIC: API SU CUI SETTARE UN BREAKPOINT......................................................20 Usare SmartCheck..........................................................................................................................21 Configurare SmartCheck............................................................................................................21 Capire le API in SmartCheck.....................................................................................................22 Consigli per usare SmartCheck..................................................................................................23Luigi Capuzzello 3. Definizioni Generali.3Definizioni Generali. Memoria. In generale facendo riferimento a questa figura potremo dare le seguenti definizioni:Supponiamo di avere un processo caricato in memoria, il processo contiene una sezione (RData) e allinterno della sezione ho unistruzione. Allora definiamo: Raw Offset: lindirizzo che aveva quella sezione quando era su disco; Virtual Offset: lindirizzo della sezione a partire dalla base della RAM; Image Base (Base Address): indirizzo in RAM in cui viene caricato il mio processo. Generalmente: o .exe hanno Base Address = 0x00400000; o .dll hanno Base Address = 0x10000000; RVA: indirizzo dellistruzione a partire dallimage base; Virtual Address: indirizzo della istruzione in RAM: VA = RVA + Base Address; Virtual Size: dimensione in RAM della mia sezione; Raw Size: dimensione su disco della mia sezione; Un indirizzo di memoria potr essere sempre indicato come segment:offset segment sar sempre un valore a 16 bit offset sar un valore a 16 o 32 bit a seconda del tipo di processore. Nel caso di processore a 16 bit loffset deve poter essere di 16 (e non di 0) per indicare un segmento di 64Kb. La RAM poi divisa in pagine di memoria della grandezza di 4.096 byte (10 bit) I segmenti o paragrafi sono sempre lunghi 65.536 byte (16 bit)Luigi Capuzzello 4. Definizioni Generali.4Registri.Esistono fondamentalmente otto registri. La lettera E indica che i registri sono a 32 bit. Il legame tra con i registri a 16 bit il seguente: AL: AX: EAX:1 byte ---> FF 2 byte ---> FF FF 4 byte ---> FF FF FF FFIl significato di ogni registro il seguente: RegistroNomeUsoEAXAccumulatorManipolazione degli operandi e dei risultati delle operazioni logico-aritmetiche, nonch, in genere, del valore restituito dalle funzioni al codice chiamante.EBXBase AddressingPuntatore ai dati contenuti nel segmento DS (ad esempio, viene usato per contenere l'indirizzo del primo byte di un array o di un tipo di dato complesso, come una struttura o un record).ECXCounterUsato come contatore nei cicli, nelle istruzioni di shifting e rotazione e nelle operazioni di manipolazione di stringhe.EDXDataPuntatore nelle operazioni di I/O nonch come registro ausiliario in alcune istruzioni aritmetiche (moltiplicazione e divisione).ESISource IndexUsato nelle operazioni di manipolazione di stringhe, come puntatore ai dati di partenza. Viene usato anche per contenere l'offset di dati contenuti nel segmento DS (rispetto all'indirizzo di base contenuto in EBX).EDIDestination IndexUsato nelle operazioni di manipolazione di stringhe, come puntatore ai dati di destinazione. Viene usato anche per contenere il puntatore ai dati (o all'indirizzo) di destinazione contenuti nel segmento ES o l'offset di dati contenuti nel segmento DS (rispetto all'indirizzo di base contenuto in EBX).EBPBase PointerPuntatore ai dati sullo stack (ad esempio, i parametri e le variabili locali di procedure eLuigi Capuzzello 5. Definizioni Generali.5funzioni). Viene usato anche per contenere l'indirizzo dei dati contenuti nel segmento SS. ESPStack PointerEsistono Puntatore all'ultimo elemento posto sullo stack. Viene anche usato per contenere l'indirizzo di offset di dati contenuti nel segmento SS (rispetto all'indirizzo di base contenuto in EBP).poi cinque segmenti usati dal processore per elaborare un processo: CS: Code Segment; il segmento usato di default per le istruzioni; SS: Stack Segment; il segmento usato di default per lo stack; DS: Data Segment; il segmento usato di default per gli accessi alla memoria in RW; ES: Data Segment; il segmento usato di default per gli operandi di dest. e per la manipolazione di stringhe Per modificare i segmenti di default occorre utilizzare loperatore :Esempio: mov es:[eax],edxLuigi Capuzzello 6. Definizioni Generali.6Principali Direttive Assembly. Dati: estrarre informazioni. TYPE: dimensione in bytes di ogni singolo elemento del dato LENGTH: numero di elementi che compongono il dato SIZE: fornisce il numero di bytes totali che formano il dato SEG: Fornisce il segmento in cui inserito il dato OFFSET: Fornisce l'indirizzo del primo bytes del dato relativo al suo segmentoAd esempio: DatiSEGMENT Prova DW 232 DUP (5) ENDSDati... MOV MOV MOV MOV MOVAX,TYPE Prova CX,LENGTH Prova DX,SIZE Prova BX,SEG Prova SI,OFFSET Prova; ; ; ; ;AX = 2 BX = 232 DX = 232 * 2 BX = Dati SI = 0 (in questo caso Prova il primo elemento)Istruzioni di SALTO Le piu' comuni sono: je (jump if egual) salta se si e' verificata una condizione di eguaglianza in un confronto jne (jump if not egual) salta se non si e' verificata una condizione di eguaglianza jz (jump if zero) salta se il se il bit del registro di flag che rappresenta lo zero

Recommended

View more >