La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Reverse engineering. I programmi Ciò che fanno non è un segreto.

Presentazioni simili


Presentazione sul tema: "Reverse engineering. I programmi Ciò che fanno non è un segreto."— Transcript della presentazione:

1 Reverse engineering

2 I programmi Ciò che fanno non è un segreto

3 Reverse engineering Studia il software allindietro

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

5 Reverse engineering Disassembling Disassembling Decompiling Decompiling

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

7 Decompiling E possibile?

8 Decompilazione Linguaggi compilati: dipende… Linguaggi compilati: dipende… Linguaggi interpretati: si Linguaggi interpretati: si

9 Decompiling E possibile? 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 ProblemaDecompilatoreDecompilatore assembler Disassemblatore ideale Decompilato re bytecode Separare codice e dati sinosino Separare codici e costanti sinosifacile Recuperare parametri ecc. si no Analisi dei tipisi nosolo locali Dichiarare datisi banale Fondere istruzioni si nosi Salti strutturati, condizionali si nosi

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

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

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

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

16 Debuggers

17 Decompilazione In Italia si può: Con autorizzazione dellautore Con autorizzazione dellautore Se..è svolta da un soggetto in possesso legittimamente, di una copia del software 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...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 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, "Compilers - Principles, Techniques and Tools", Aho, Sethi, Ullman, "Advanced Compiler Design & Implementation", Steven Muchnick "Advanced Compiler Design & Implementation", Steven Muchnick "How debuggers work - Algorithms, Data Structures, and Architecture", Jonathan Rosemberg "How debuggers work - Algorithms, Data Structures, and Architecture", Jonathan Rosemberg A Conceptual Foundation for Software Re-Engineering,E. J. ByrneA Conceptual Foundation for Software Re-Engineering,E. J. ByrneLinks:


Scaricare ppt "Reverse engineering. I programmi Ciò che fanno non è un segreto."

Presentazioni simili


Annunci Google