Seguici su Telegram, ne vale la pena ❤️ ➡ @trovalost
Vai al contenuto

Reverse engineering: cos’è e come funziona

Reverse engineering: il processo di analisi di un esistentesistema per identificarne le componenti e le loro interrelazioni e creare rappresentazioni del sistema in un’altra forma o in un livello di astrazione più elevato.

Il processo che consente di recuperare informazioni dal codice di un’applicazione è conosciuto come reverse engineering. Lo scopo di questo processo è invertire le trasformazioni applicate durante la compilazione del codice, al fine di comprendere il funzionamento interno dell’applicazione e ottenere conoscenze utili sul suo comportamento e sulla sua logica di esecuzione.

Esempio in linguaggio assembly (ASM):

Supponiamo di avere un’applicazione che contiene la seguente funzione in linguaggio C:

int somma(int a, int b) {
return a + b;
}

Dopo la compilazione, il codice assembly generato potrebbe apparire così:

somma:
 push ebp
 mov ebp, esp
 mov eax, [ebp+8] ; carica il primo parametro 'a' in eax
 add eax, [ebp+12] ; aggiunge il secondo parametro 'b' a eax
 pop ebp
 ret

In questo esempio di reverse engineering, possiamo vedere come la funzione ‘somma’ viene implementata a livello di linguaggio assembly. La funzione prende due parametri, ‘a’ e ‘b’, e restituisce la somma di essi. La compilazione del codice C ha trasformato l’operazione di somma in una serie di istruzioni assembly, che svolgono lo stesso compito ma a un livello più basso di astrazione. Mediante il reverse engineering, possiamo analizzare queste istruzioni assembly per capire come la funzione ‘somma’ viene effettivamente eseguita a livello di linguaggio macchina

Reverse engineering

Il reverse engineering può essere visto come una sorta di progettazione al contrario: si parte dal prodotto finito, che può essere di qualsiasi tipo, un dispositivo meccanico, elettronico, un software, lo si studia e analizza a fondo fino ad essere in grado di crearne uno che ne replichi il funzionamento, che migliori il dispositivo di partenza, che lo adatti a contesti diversi da quello per cui era stato progettato inizialmente. Viene in sostanza invertito il processo di progettazione, ottenendo informazioni sui singoli componenti a partire dal prodotto finito al fine di comprendere appieno il funzionamento del disposito che si sta analizzando.

A cosa serve il reverse engineering

In campo software il reverse engineering è utilizzato per vari motivi, il controllo e la gestione della qualità , analisi dei protocolli di comunicazione di rete, rilevamento di virus e altre minacce, portabilità  e manutenzione, ricerca bug, miglioramento della compatibilità  di un software con piattaforme e software di terze parti, e altro ancora. Inoltre viene spesso utilizzato per analiizzare prodotti concorrenti.

Reverse engineering in campo software

Invertendo il processo di sviluppo, i programmatori “smembrano” un software estraendone il codice sorgente. Fatto ciò, il software non ha più segreti, sarà  possibile riscriverlo e ricostruire l’architettura del programma, modificarne il funzionamento e le strutture interne. Una volta compresi i processi del software, sarà  anche possibile eliminare eventuali bug presenti. In ambito software si ricorre al reverse engineering principalmente per la risoluzione di problemi e l’analisi di prodotti concorrenti.

Il reverse engineering, per la ricostruzione di un software prevede il recupero del codice sorgente e la comprensione del protocollo di comunicazione

Il reverse engineering è legale?

Molte aziende vietano il reverse engineering dei propri prodotti dichiarandolo nei propri termini di licenza. Se prendiamo in esame un videogioco, per quanto concerne la parte puramente grafica, la legislazione è chiara e semplice da applicare, è facile intuire che replicare gli stessi ambienti, disegni, modelli 3d sia una violazione del diritto d’autore. Riguardo il codice le cose si complicano e non poco, praticando la reverse engineering si riesce a risalire a parte del sorgente e, una volta compreso il funzionamento si può creare un programma che svolga lo stesso compito allo stesso modo, ma il codice comunque diverso. La materia è complicata e controversa e non è oggetto di questa trattazione.

Un curioso esempio di reverse engineering è quanto è accaduto a Grand Theft Auto III, Vice City qualche mese fa, troverete maggiori dettagli a questo indirizzo.

Ricostruzione del codice

Il codice sorgente di un software è scritto in uno dei tanti linguaggi di programmazione esistenti. Affinchè il codice, cosଠscritto, possa essere compreso ed eseguito dal nostro computer, viene successivamente convertito in linguaggio macchina. Se si sta facendo reverse engineering, questo processo deve essere invertito, ovvero si parte dal linguaggio macchina e bisogna tradurlo. Si effettua l’operazione inversa alla compilazione, infatti si usano degli strumenti chiamati proprio decompilatori. Non sono altro che programmi che dal binario generano un codice human readable. Non si riesce quasi mai ad ottenere l’intero codice sorgente e spesso non si riesce ad ottenerlo se non in linguaggio assembly, che è sempre human readable ma molto a basso livello e molto vivino al linguaggio macchina. Il fine del reverse engineering software non è quella di ricostruire per intero il sorgente, quindi il fatto che non lo si riesca a recuperare non è del tutto un male, poichè l’attenzione è rivolta piu che altro all’idea che c’è alla base del funzionamento di un dato programma.

Esempio pratico

Supponiamo si stia analizzando un software che mette in comunicazione vari dispositivi tra loro. In questi casi è di vitale importanza riuscire a capire come avviene lo scambio di informazioni, bisogna cioè riuscire a risalire alle regole del protocollo di comunicazione. Per fare ciò si usano strumenti chiamati sniffer, che sono software in grado di analizzare il traffico dati in una rete.

👇 Da non perdere 👇



Questo portale esiste da 4462 giorni (12 anni), e contiene ad oggi 6614 articoli (circa 5.291.200 parole in tutto) e 13 servizi online gratuiti. – Leggi un altro articolo a caso
5/5 (1)

Ti sembra utile o interessante? Vota e fammelo sapere.

Questo sito contribuisce alla audience di sè stesso.
Il nostro network informativo: Lipercubo.it - Pagare.online - Trovalost.it.