Reverse engineering
I programmi Ciò che fanno non è un segreto
Reverse engineering Studia il software “all’indietro”
Reverse engineering Importante per debugging Indispensabile per scrivere drivers o compilatori Ritenuta “illegale”
Reverse engineering Disassembling Decompiling
Disassembling Creare codice assembly da un programma binario Non è possibile per qualsiasi programma in input (Halting problem)
Decompiling E’ possibile?
Decompilazione Linguaggi compilati: dipende… Linguaggi interpretati: si
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
Decompilation
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
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); }
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);
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;
Conclusioni Attualmente, la totale decompilazione automatica non è ancora possibile.
Debuggers
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.”
In USA Digital Millennium Copyright Act Una delle linee più dure (si sta parlando di abolizione)
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: http://www.mpowernet.com/kamal/www.fravia.org http://www.quequero.tk http://www.program-transformation.org