Reverse engineering è smontare un oggetto per vedere come funziona al fine di duplicare o migliorare l’oggetto. La pratica, presa da vecchie industrie, è ora frequentemente usata nell’hardware e nel software del computer. L’ingegneria inversa del software comporta l’inversione del codice macchina di un programma (la stringa di 0 e 1 che viene inviata al processore logico) nel codice sorgente in cui è stato scritto, usando le dichiarazioni del linguaggio del programma.
L’ingegneria inversa del software viene fatta per recuperare il codice sorgente di un programma perché il codice sorgente è stato perso, per studiare come il programma esegue certe operazioni, per migliorare le prestazioni di un programma, per correggere un bug (correggere un errore nel programma quando il codice sorgente non è disponibile), per identificare contenuti dannosi in un programma come un virus o per un programma scritto per l’uso con un microprocessore per l’uso con un altro. Il reverse engineering allo scopo di copiare o duplicare programmi può costituire una violazione del copyright. In alcuni casi, la licenza d’uso del software proibisce specificamente il reverse engineering.
Qualcuno che fa reverse engineering sul software può usare diversi strumenti per disassemblare un programma. Uno strumento è un dumper esadecimale, che stampa o visualizza i numeri binari di un programma in formato esadecimale (che è più facile da leggere del formato binario). Conoscendo gli schemi di bit che rappresentano le istruzioni del processore così come le lunghezze delle istruzioni, il reverse engineer può identificare certe porzioni di un programma per vedere come funzionano. Un altro strumento comune è il disassemblatore. Il disassemblatore legge il codice binario e poi visualizza ogni istruzione eseguibile in forma di testo. Un disassemblatore non può dire la differenza tra un’istruzione eseguibile e i dati usati dal programma, quindi viene usato un debugger, che permette al disassemblatore di evitare di disassemblare le porzioni di dati di un programma. Questi strumenti potrebbero essere usati da un cracker per modificare e ottenere l’accesso a un sistema informatico o causare altri danni.
Il reverse engineering hardware consiste nello smontare un dispositivo per vedere come funziona. Per esempio, se un produttore di processori vuole vedere come funziona il processore di un concorrente, può acquistare il processore di un concorrente, smontarlo e poi fare un processore simile. Tuttavia, questo processo è illegale in molti paesi. In generale, l’ingegneria inversa dell’hardware richiede una grande esperienza ed è abbastanza costosa.
Un altro tipo di ingegneria inversa comporta la produzione di immagini 3-D di parti fabbricate quando un progetto non è disponibile al fine di rifabbricare il pezzo. Per il reverse engineering di un pezzo, il pezzo viene misurato da una macchina di misura a coordinate (CMM). Mentre viene misurato, un’immagine 3-D viene generata e visualizzata su un monitor. Al termine della misurazione, l’immagine viene dimensionata. Qualsiasi parte può essere sottoposta a reverse engineering usando questi metodi.
Il termine forward engineering è talvolta usato in contrasto con il reverse engineering.