Reverse engineering

Reverse engineering. Che cos’è il reverse engineering?
Il reverse engineering è l’atto di smontare un oggetto per vederne il funzionamento. Viene effettuata principalmente per analizzare e acquisire conoscenze sul funzionamento di un oggetto, ma spesso viene utilizzata per duplicarlo o migliorarlo. Molte cose possono essere sottoposte a reverse engineering, tra cui software, macchine fisiche, tecnologia militare e persino funzioni biologiche legate al funzionamento dei geni.

Questa pratica viene applicata all’hardware e al software dei computer e deriva da modelli più antichi. Il reverse engineering del software si concentra sul codice macchina di un programma, ovvero la stringa di 0 e 1 che viene inviata al processore logico. Le dichiarazioni del linguaggio del programma vengono utilizzate per trasformare il codice macchina nel codice sorgente originale.

A seconda della tecnologia, le conoscenze acquisite durante il reverse engineering possono essere utilizzate per riutilizzare oggetti obsoleti, effettuare un’analisi di sicurezza, ottenere un vantaggio competitivo o semplicemente insegnare a qualcuno come funziona qualcosa. Indipendentemente dal modo in cui viene utilizzata la conoscenza o dal suo scopo, il reverse engineering è il processo di acquisizione della conoscenza da un oggetto finito.

Qual è il suo scopo?
Lo scopo è scoprire come funziona un oggetto o un sistema. Le ragioni per farlo sono molteplici. Il reverse engineering può essere usato per imparare come funziona qualcosa e ricreare l’oggetto o creare un oggetto simile con miglioramenti aggiuntivi.

Spesso l’obiettivo del reverse engineering di software o hardware è quello di trovare un modo per creare un prodotto simile in modo più economico o perché il prodotto originale non è più disponibile. Il reverse engineering nella tecnologia dell’informazione viene utilizzato anche per risolvere problemi di compatibilità e far funzionare l’hardware o il software con altri hardware, software o sistemi operativi con cui non era originariamente compatibile.

In taluni casi questa attività viene svolta quando il team di sviluppatori deve lavorare su di un software la cui documentazione è sconosciuta o è andata persa. Spesso su software vecchi. Con questo studio si vuole capire come il software è scritto e/o come poterlo integrare con altri sistemi oppure come modificarlo.

Il software Logic Pro di Apple, che consente ai musicisti di comporre, registrare, arrangiare, modificare e mixare la musica, può essere un buon esempio di ciè che stiamo trattando. Logic Pro è disponibile solo per dispositivi Mac ed è relativamente costoso. Il programma ha diversi strumenti digitali proprietari. Con un po’ di attenzione, un programmatore potrebbe decodificare questi strumenti digitali, capire come funzionano e personalizzarli per utilizzarli in Logic Pro o per renderli interoperabili con altri software musicali compatibili con Windows.

Come funziona questo processo ?
Il processo di reverse engineering è specifico per l’oggetto su cui viene eseguito. Tuttavia, indipendentemente dal contesto, esistono tre fasi generali comuni a tutti gli sforzi di reverse engineering. Esse comprendono:

  • Estrazione delle informazioni. Si studia l’oggetto di reverse engineering, si estraggono le informazioni sulla sua progettazione e si esaminano tali informazioni per determinare come i pezzi si incastrano tra loro. Nell’ingegneria inversa del software, ciò potrebbe richiedere la raccolta del codice sorgente e dei relativi documenti di progettazione da studiare. Può anche comportare l’uso di strumenti, come un disassemblatore, per scomporre il programma nelle sue parti costitutive.
  • Modellazione. Le informazioni raccolte vengono astratte in un modello concettuale, in cui ogni pezzo del modello spiega la sua funzione nella struttura complessiva. Lo scopo di questa fase è prendere le informazioni specifiche dell’originale e astrarle in un modello generale che possa essere usato per guidare la progettazione di nuovi oggetti o sistemi. Nel reverse engineering del software questo modello può assumere la forma di un diagramma di flusso dei dati o di un diagramma di struttura.
  • Revisione. Si tratta di rivedere il modello e di testarlo in vari scenari per assicurarsi che sia un’astrazione realistica dell’oggetto o del sistema originale. Nell’ingegneria del software ciò può assumere la forma di test del software. Una volta testato, il modello può essere implementato per riprogettare l’oggetto originale.

Nel caso del software si prevede l’uso di diversi strumenti. Uno strumento è un dumper esadecimale, che stampa o visualizza i numeri binari di un programma in esadecimale. Conoscendo gli schemi di bit che rappresentano le istruzioni del processore e le lunghezze delle istruzioni, il reverse engineer può identificare le parti di un programma per vedere come funzionano.

Un altro strumento di reverse engineering del software è il disassemblatore. Legge il codice binario e visualizza ogni istruzione eseguibile come testo. Il disassemblatore non è in grado di distinguere tra un’istruzione eseguibile e i dati utilizzati dal programma, per cui viene utilizzato un debugger per impedire al disassemblatore di disassemblare le porzioni di dati di un programma. Questi strumenti potrebbero essere utilizzati da un cracker informatico per accedere a un sistema informatico o causare altri danni.

Un Computer-aided design (CAD) è una tecnica di reverse engineering utilizzata per ricreare un pezzo fabbricato quando il progetto originale non è più disponibile. Si tratta di produrre immagini 3D del pezzo per poterlo rifabbricare. Una macchina di misura a coordinate misura il pezzo e, man mano che viene misurato, viene generata un’immagine wireframe 3D utilizzando un software CAD e visualizzata su un monitor. Al termine della misurazione, l’immagine del telaio viene dimensionata. Con questi metodi è possibile effettuare il reverse engineering di qualsiasi pezzo.

Esempi di reverse engineering
A seconda dell’applicazione, dello scopo e della tecnologia n troviamo diversi. Alcuni esempi sono:

Software
Esistono diversi casi in cui il reverse engineering viene utilizzato per disassemblare il software. Un esempio comune è quello di adattare un programma scritto per l’uso con un microprocessore a un altro. Altri esempi includono la ricostruzione del codice sorgente perduto, lo studio di come un programma esegue determinate operazioni, il miglioramento delle prestazioni e la correzione di bug o errori quando il codice sorgente non è disponibile.

Un esempio è Phoenix, una società di software statunitense che ha creato un software per il sistema di input/output di base (BIOS) compatibile con la versione proprietaria di IBM. Per farlo, Phoenix ha effettuato il reverse engineering della versione IBM in modo da proteggersi dalle accuse di copyright, registrando i passaggi seguiti e non facendo riferimento al codice proprietario.

Il malware è un altro settore in cui viene utilizzato il reverse engineering del software. Gli attori delle minacce spesso utilizzano l’offuscamento del codice del software per evitare che il loro codice maligno venga scoperto o compreso. I proprietari di software o sistemi infetti possono utilizzare il reverse engineering per identificare il contenuto dannoso, come un virus. La U.S. Defense Intelligence Agency ha dichiarato di voler utilizzare queste tecniche per il reverse engineering del malware nemico per creare le proprie armi informatiche offensive. Sono disponibili strumenti che aiutano il reverse engineering del malware, come il software Ghidra della National Security Agency, utilizzato per il reverse engineering del malware WannaCry, ad esempio.

Parti di computer
Se un produttore di processori vuole vedere come funziona il processore di un concorrente, può acquistare il processore di un concorrente, fare un’operazione di reverse engineering e poi utilizzare quanto appreso per produrre il proprio processore. Questo processo è illegale in molti paesi, richiede una grande esperienza ed è costoso. Il reverse engineering è spesso utilizzato per creare parti di ricambio quando le parti originali per le apparecchiature esistenti non sono più disponibili. Il reverse engineering di parti di computer viene fatto anche per migliorare la sicurezza. Ad esempio, il Project Zero di Google ha identificato le vulnerabilità nei microprocessori utilizzando il reverse engineering.

Valutazioni della sicurezza di rete
Anche le aziende che effettuano valutazioni sulla sicurezza delle reti utilizzano il suddetto metodo come uno dei loro strumenti. Dividono il loro gruppo di sicurezza in due squadre. Una squadra simula gli attacchi, mentre l’altra monitora la rete e analizza gli attacchi dell’altra squadra. Le informazioni ottenute da questi finti attacchi vengono utilizzate per rafforzare la rete aziendale.

Aspetti legali in Europa

In alcuni casi i licenziatari possono decompilare il codice del software senza violare la direttiva sul software. In una sentenza del 6 ottobre 2021 nella causa C-13/20, la Corte di giustizia dell’Unione europea (CGUE) ha stabilito che nella misura in cui la decompilazione è necessaria per eseguire il debug del software, indipendentemente dal fatto che sia vietata dal contratto di licenza, il licenziatario è libero di farlo senza essere soggetto all’articolo 6 della direttiva sul software. Tuttavia, la CGUE lascia aperta la possibilità per le parti di prevedere disposizioni contrattuali per concordare le fasi e le procedure per la correzione dei bug.

Considerazioni finali
Il reverse engineering ha molti usi legittimi nell’IT. Può essere un approccio legale ed etico per risolvere problemi di compatibilità, ricreare parti legacy, effettuare valutazioni di sicurezza, migliorare un prodotto esistente o renderlo più economico.

I passaggi necessari sono complessi e variano a seconda dell’oggetto dell’ingegneria inversa. Ad esempio, i professionisti della QA che vogliono risolvere i problemi degli utenti con i prodotti software possono eseguire il reverse engineering di un reclamo per arrivare alla sua causa. Identificare le cause dei problemi degli utenti non è facile, ma le tecniche di reverse-engineering eliminano alcune congetture.

(fonte)

Innovaformazione, scuola informatica specialistica promuove la cultura IT e la sua diffusione fra clienti e partners.

Per altri interessanti articoli nel mondo informatico potete visionare le sezioni dedicate del nostro blog QUI.

INFO: info@innovaformazione.net / Tel. 3471012275 (Dario Carrassi)

Vuoi essere ricontattato? Lasciaci il tuo numero telefonico e la tua email, ti richiameremo nelle 24h:

    Ti potrebbe interessare

    Articoli correlati