Ingegneria inversa di un software
Il reverse engineering deriva dall’ingegneria meccanica. Ancora oggi si utilizzano la scansione 3D, la tomografia computerizzata, la misurazione a ultrasuoni e altri metodi per ottenere informazioni e capire il funzionamento di una macchina o di un dispositivo meccanico. Il reverse engineering inverte il processo di progettazione dell’ingegneria volto a creare i componenti di un prodotto e assemblare un dispositivo funzionante.
Attraverso questo processo inverso si ottengono informazioni sui singoli componenti per comprenderne appieno il funzionamento. Per questo motivo il reverse engineering è spesso applicato ai prodotti concorrenti, nella speranza di migliorare o adattare il proprio prodotto e renderlo più competitivo sul mercato. Il reverse engineering è utilizzato anche per molti altri scopi e non si limita unicamente all’hardware. Come e perché si utilizza il reverse engineering in ambito software?
L’ingegneria inversa in ambito software
Il reverse engineering del codice permette ai programmatori di invertire i processi di sviluppo e produzione di un software e quindi di ottenere uno sguardo prezioso dietro le quinte di un programma. La decostruzione e il reverse engineering di un software consentono di estrarre il codice sorgente di un’applicazione. Una volta ottenuto il codice, il software può essere letto da esperti come un libro aperto. A questo punto, programmatori e sviluppatori saranno in grado di comprendere, riscrivere o ricostruire l’architettura di un programma, il suo funzionamento e le sue strutture interne. La comprensione dei processi del software, ottenuta grazie al reverse engineering, permette anche di eliminare eventuali bug. Nel settore dei software, il reverse engineering viene utilizzato principalmente per lo sviluppo di nuovi prodotti, la risoluzione dei problemi o l’analisi di prodotti concorrenti.
Consiste nella ricostruzione di un prodotto già esistente, in questo caso di un software. Il prodotto viene “smontato” per comprenderne l’architettura, la struttura e il funzionamento. Lo scopo del reverse engineering in ambito software è quello di riprodurre il codice di un programma esistente. In questo modo è possibile ottimizzare il software correggendone gli errori di funzionamento, analizzare i programmi della concorrenza o sviluppare nuovi prodotti.
Processi di reverse engineering di un software
Il reverse engineering è necessario sia per lo studio dei prodotti di produzione industriale che per la ricostruzione di un software. La ricostruzione di un software prevede uno dei seguenti tre processi:
La ricostruzione del codice sorgente di un software
Un codice sorgente è il testo di un programma informatico scritto in un linguaggio di programmazione. Il computer converte automaticamente questo testo leggibile dall’uomo in un linguaggio macchina. Per accedere al codice sorgente di un software la traduzione del linguaggio macchina deve quindi essere invertita. A tale scopo si usa, ad esempio, un decompilatore. Si tratta di un programma per computer che dal codice binario genera un codice sorgente leggibile dall’uomo. Questo processo di traduzione inversa avviene automaticamente.
Se il codice binario non può essere ricostruito del tutto, è possibile utilizzare un disassemblatore. Questo programma converte il linguaggio macchina codificato e binario in un linguaggio assembly leggibile dall’uomo, che viene poi analizzato manualmente. Nella maggior parte dei casi i programmatori non riescono a ricostruire il codice sorgente completo. In linea di principio non è una cosa negativa, dato che lo scopo del reverse engineering di un codice è soprattutto la comprensione dell’idea alla sua base più che la ricostruzione completa del codice originale. Anche i codici parziali possono essere utilizzati per eseguire analisi comportamentali del software o per correggere errori. I decompilatori e disassemblatori sono utilizzati soprattutto dagli sviluppatori di software.
Comprendere le regole di un protocollo di comunicazione
Il reverse engineering è utilizzato dagli sviluppatori, ad esempio, per scrivere driver per sistemi operativi di cui non si conosce l’esatto funzionamento o la struttura. Con l’aiuto di uno sniffer è possibile accedere alle regole di un protocollo di comunicazione. Lo sniffer è uno strumento software per l’analisi del traffico di dati in una rete. Lo strumento può, ad esempio, rilevare anomalie nello scambio di dati tra due dispositivi. La valutazione di questi metodi di comunicazione fornisce ai programmatori informazioni su quali regole segue il protocollo corrispondente.
Creazione di un modello di un software
In questo caso si tende a parlare più di reengineering che di reverse engineering. Il codice sorgente ricostruito di un software viene in questo caso modificato e trasferito in un modello per essere elaborato ulteriormente. Questo permette, grazie al linguaggio di modellazione grafica UML, di integrare e creare progetti con altre parti software per la specificazione, la costruzione e la documentazione.
Quando è utilizzato il reverse engineering in ambito software?
Il reverse engineering del codice può essere utilizzato in una varietà di ambiti fornendo diversi vantaggi:
- Controllo e gestione della qualità del funzionamento del proprio software
- Ulteriore sviluppo del proprio software
- Analisi di protocolli di comunicazione di rete
- Rilevamento di virus informatici, trojan, ransomware e altri programmi dannosi
- Portabilità o manutenzione di abandonware
- Ricerca di bug nel software
- Esame generale di un formato di file per la propria comprensione
- Miglioramento della compatibilità di un software con piattaforme e software di terze parti
- Utilizzo di funzioni di piattaforma non documentate
Il reverse engineering in ambito software può inoltre essere utilizzato per analizzare i prodotti concorrenti. Anche se molte aziende vietano il reverse engineering dei propri prodotti dichiarandolo nei propri termini di licenza, l’analisi dei protocolli non è legalmente interessata da questo divieto. Questo perché il software in sé non è oggetto di indagine da parte degli strumenti di reverse engineering. Inoltre, tali clausole di licenza sono generalmente invalide in molti paesi. Gli utenti di un software acquistato hanno il diritto legale di sottoporlo a reverse engineering al fine di verificarne la sicurezza e risolvere eventuali bug.
Il reverse engineering di un software fornisce a programmatori e sviluppatori preziose informazioni sul funzionamento delle applicazioni digitali. Ciò consente una risoluzione mirata dei problemi e può fornire utili input per lo sviluppo del proprio software.