Reverse engineering.

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Fondamenti di Informatica
Linux examples of Buffer overflow attacks
INFORMATICA Altre Istruzioni di I/O
Funzioni e procedure Ogni linguaggio di programmazione ad alto livello mette a disposizione del programmatore questi strumenti, ed il C non è da meno!
Uso avanzato di C.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Code::Blocks Ambiente di sviluppo.
Code::Blocks Ambiente di sviluppo.
Array multidimensionali
Sviluppo di programmi strutturati
PUNTATORI Introduzione
PHP.
Linguaggi di Programmazione e compilatori
Type Checking (1° parte)
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Informatica Generale Susanna Pelagatti
Introduzione al linguaggio C
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
Analisi e Verifica di Programmi Laboratorio di AVP Corso di Laurea in Informatica AA Tino Cortesi.
Caratteri e stringhe di caratteri
PROGRAMMI DI RICERCA E ORDINAMENTO
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Esercizi su strutture dinamiche Fondamenti di Programmazione Canale AD a.a. 2009/2010.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
Algebra di Boole ed elementi di logica
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
Testing e Debugging.
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
7) Creazione di un programma eseguibile
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Strutture di controllo in C -- Flow Chart --
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Algebra Lineare Esercizi assegnati.
I File.
Le funzioni.
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
void binario(int n); …………………
Massimo Comun Divisore
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
1 Gestione dei File. 2 Perché i file? Sono strutture dati persistenti Sono solitamente memorizzati sui dischi –Si usano dall'interno dei programmi Realizzano.
Unità Didattica 3 Linguaggio C
FASTVID RENTALS: BUSINESS MODELING 1. Business Modeling One of the major problems with most business engineering efforts, is that the software engineering.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Anno accademico Le istruzioni di controllo in C.
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
la traduzione dei programmi
Informatica A.A. 2009/2010 Parte 4 Dai diagrammi di flusso alla programmazione strutturata: le istruzioni if, for, while, … Corso A: Prof. Stefano Berardi.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Sottoprogrammi e funzioni
© Copyright NTT DATA Italia – All Rights Reserved The information contained in this document is the property of NTT DATA Italia S.p.A. and the addressee.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Marzo 2014.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Binary Translation. Cambio di architettura Problemi E il vecchio software?
1 Laboratorio di Programmazione di Sistema - C Susanna Pelagatti Ricevimento: Me ,
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su Alberi.
XVRC2 Emanuele Ruffaldi Giugno Tre esperimenti con S3D ► Estensioni del Linguaggio ► Pre-Compilatore ► Esecuzione dentro il Java L C J.
Linguaggio C: Funzioni e Puntatori Laboratorio di Programmazione Gruppo 1.
Transcript della presentazione:

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