La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Reverse engineering.

Presentazioni simili


Presentazione sul tema: "Reverse engineering."— Transcript della presentazione:

1 Reverse engineering

2 I programmi Ciò che fanno non è un segreto

3 Reverse engineering Studia il software “all’indietro”

4 Reverse engineering Importante per debugging
Indispensabile per scrivere drivers o compilatori Ritenuta “illegale”

5 Reverse engineering Disassembling Decompiling

6 Disassembling Creare codice assembly da un programma binario
Non è possibile per qualsiasi programma in input (Halting problem)

7 Decompiling E’ possibile?

8 Decompilazione Linguaggi compilati: dipende…
Linguaggi interpretati: si

9 Decompiling E’ possibile?
The most commonly used commercial encryption method is compilation of sources into executables. In this view a CPU can be considered as a decryption device. - Frans Faase, 1996

10 Decompilation

11 Decompilazione Problema Decompilatore Decompilatore assembler
Disassemblatore ideale Decompilatore bytecode Separare codice e dati si no Separare codici e costanti facile Recuperare parametri ecc. Analisi dei tipi solo locali Dichiarare dati banale Fondere istruzioni Salti strutturati, condizionali

12 Esempio: dcc void main () { int loc1; int loc2; int loc3; int loc4;
printf ("Input number of iterations: "); scanf ("%d", &loc1); loc3 = 1; while ((loc3 <= loc1)) {   printf ("Input number:"); scanf ("%d", &loc2); loc4 = proc_1 (loc2); printf ("fibonacci(%d) = %u\n", loc2, loc4); loc3 = (loc3 + 1); } /* end of while */ exit(0); }

13 Esempio: REC main() { /* unknown */ void ebx; /* unknown */ void esi;
/* unknown */ void Vfffffffc; (save)"Input number: "; printf(); (save) & Vfffffffc; (save)"%d"; scanf(); ebx = Vfffffffc; esp = esp + 12; if(ebx > 1) { esi = fib(ebx - 1); eax = fib(ebx - 2) + esi; } else { eax = ebx; } printf("fibonacci(%d) = %d\n", Vfffffffc, eax); esp = ebp - 12; return(0);

14 Esempio: Boomerang Esempio di codice: int somma(int a, int b) {
return a + b; } int main() { printf("%i\n", somma(3, 4)); Output di The Boomerang: void main() { int local0; local0 = proc1(3, 4) ; local0 = printf("%i\n", local0) ; return ; } int proc1(int arg1, int arg2) { return arg2+arg1;

15 Conclusioni Attualmente, la totale decompilazione automatica non è ancora possibile.

16 Debuggers

17 Decompilazione In Italia si può: Con autorizzazione dell’autore
Se “..è svolta da un soggetto in possesso legittimamente, di una copia del software” “..al fine di ottenere, quelle informazioni necessarie, per garantire l'interoperabilità con un programma altrui o creato autonomamente.”

18 In USA Digital Millennium Copyright Act Una delle linee più dure
(si sta parlando di abolizione)

19 Bibliografia Libri: "Compilers - Principles, Techniques and Tools", Aho, Sethi, Ullman, "Advanced Compiler Design & Implementation", Steven Muchnick "How debuggers work - Algorithms, Data Structures, and Architecture", Jonathan Rosemberg “A Conceptual Foundation for Software Re-Engineering”,E. J. Byrne Links:


Scaricare ppt "Reverse engineering."

Presentazioni simili


Annunci Google