Il reverse en­gi­nee­ring deriva dall’in­ge­gne­ria meccanica. Ancora oggi si uti­liz­za­no la scansione 3D, la to­mo­gra­fia com­pu­te­riz­za­ta, la mi­su­ra­zio­ne a ul­tra­suo­ni e altri metodi per ottenere in­for­ma­zio­ni e capire il fun­zio­na­men­to di una macchina o di un di­spo­si­ti­vo meccanico. Il reverse en­gi­nee­ring inverte il processo di pro­get­ta­zio­ne dell’in­ge­gne­ria volto a creare i com­po­nen­ti di un prodotto e as­sem­bla­re un di­spo­si­ti­vo fun­zio­nan­te.

At­tra­ver­so questo processo inverso si ottengono in­for­ma­zio­ni sui singoli com­po­nen­ti per com­pren­der­ne appieno il fun­zio­na­men­to. Per questo motivo il reverse en­gi­nee­ring è spesso applicato ai prodotti con­cor­ren­ti, nella speranza di mi­glio­ra­re o adattare il proprio prodotto e renderlo più com­pe­ti­ti­vo sul mercato. Il reverse en­gi­nee­ring è uti­liz­za­to anche per molti altri scopi e non si limita uni­ca­men­te all’hardware. Come e perché si utilizza il reverse en­gi­nee­ring in ambito software?

L’in­ge­gne­ria inversa in ambito software

Il reverse en­gi­nee­ring del codice permette ai pro­gram­ma­to­ri di invertire i processi di sviluppo e pro­du­zio­ne di un software e quindi di ottenere uno sguardo prezioso dietro le quinte di un programma. La de­co­stru­zio­ne e il reverse en­gi­nee­ring di un software con­sen­to­no di estrarre il codice sorgente di un’ap­pli­ca­zio­ne. Una volta ottenuto il codice, il software può essere letto da esperti come un libro aperto. A questo punto, pro­gram­ma­to­ri e svi­lup­pa­to­ri saranno in grado di com­pren­de­re, ri­scri­ve­re o ri­co­strui­re l’ar­chi­tet­tu­ra di un programma, il suo fun­zio­na­men­to e le sue strutture interne. La com­pren­sio­ne dei processi del software, ottenuta grazie al reverse en­gi­nee­ring, permette anche di eliminare eventuali bug. Nel settore dei software, il reverse en­gi­nee­ring viene uti­liz­za­to prin­ci­pal­men­te per lo sviluppo di nuovi prodotti, la ri­so­lu­zio­ne dei problemi o l’analisi di prodotti con­cor­ren­ti.

De­fi­ni­zio­ne: Reverse en­gi­nee­ring

Consiste nella ri­co­stru­zio­ne di un prodotto già esistente, in questo caso di un software. Il prodotto viene “smontato” per com­pren­der­ne l’ar­chi­tet­tu­ra, la struttura e il fun­zio­na­men­to. Lo scopo del reverse en­gi­nee­ring in ambito software è quello di ri­pro­dur­re il codice di un programma esistente. In questo modo è possibile ot­ti­miz­za­re il software cor­reg­gen­do­ne gli errori di fun­zio­na­men­to, ana­liz­za­re i programmi della con­cor­ren­za o svi­lup­pa­re nuovi prodotti.

Processi di reverse en­gi­nee­ring di un software

Il reverse en­gi­nee­ring è ne­ces­sa­rio sia per lo studio dei prodotti di pro­du­zio­ne in­du­stria­le che per la ri­co­stru­zio­ne di un software. La ri­co­stru­zio­ne di un software prevede uno dei seguenti tre processi:

  • Recupero del codice sorgente del software
  • Com­pren­sio­ne delle regole di un pro­to­col­lo di co­mu­ni­ca­zio­ne
  • Creazione di un modello

La ri­co­stru­zio­ne del codice sorgente di un software

Un codice sorgente è il testo di un programma in­for­ma­ti­co scritto in un lin­guag­gio di pro­gram­ma­zio­ne. Il computer converte au­to­ma­ti­ca­men­te questo testo leggibile dall’uomo in un lin­guag­gio macchina. Per accedere al codice sorgente di un software la tra­du­zio­ne del lin­guag­gio macchina deve quindi essere invertita. A tale scopo si usa, ad esempio, un de­com­pi­la­to­re. Si tratta di un programma per computer che dal codice binario genera un codice sorgente leggibile dall’uomo. Questo processo di tra­du­zio­ne inversa avviene au­to­ma­ti­ca­men­te.

Se il codice binario non può essere ri­co­strui­to del tutto, è possibile uti­liz­za­re un di­sas­sem­bla­to­re. Questo programma converte il lin­guag­gio macchina co­di­fi­ca­to e binario in un lin­guag­gio assembly leggibile dall’uomo, che viene poi ana­liz­za­to ma­nual­men­te. Nella maggior parte dei casi i pro­gram­ma­to­ri non riescono a ri­co­strui­re il codice sorgente completo. In linea di principio non è una cosa negativa, dato che lo scopo del reverse en­gi­nee­ring di un codice è so­prat­tut­to la com­pren­sio­ne dell’idea alla sua base più che la ri­co­stru­zio­ne completa del codice originale. Anche i codici parziali possono essere uti­liz­za­ti per eseguire analisi com­por­ta­men­ta­li del software o per cor­reg­ge­re errori. I de­com­pi­la­to­ri e di­sas­sem­bla­to­ri sono uti­liz­za­ti so­prat­tut­to dagli svi­lup­pa­to­ri di software.

Com­pren­de­re le regole di un pro­to­col­lo di co­mu­ni­ca­zio­ne

Il reverse en­gi­nee­ring è uti­liz­za­to dagli svi­lup­pa­to­ri, ad esempio, per scrivere driver per sistemi operativi di cui non si conosce l’esatto fun­zio­na­men­to o la struttura. Con l’aiuto di uno sniffer è possibile accedere alle regole di un pro­to­col­lo di co­mu­ni­ca­zio­ne. 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 di­spo­si­ti­vi. La va­lu­ta­zio­ne di questi metodi di co­mu­ni­ca­zio­ne fornisce ai pro­gram­ma­to­ri in­for­ma­zio­ni su quali regole segue il pro­to­col­lo cor­ri­spon­den­te.

Creazione di un modello di un software

In questo caso si tende a parlare più di reen­gi­nee­ring che di reverse en­gi­nee­ring. Il codice sorgente ri­co­strui­to di un software viene in questo caso mo­di­fi­ca­to e tra­sfe­ri­to in un modello per essere elaborato ul­te­rior­men­te. Questo permette, grazie al lin­guag­gio di mo­del­la­zio­ne grafica UML, di integrare e creare progetti con altre parti software per la spe­ci­fi­ca­zio­ne, la co­stru­zio­ne e la do­cu­men­ta­zio­ne.

Quando è uti­liz­za­to il reverse en­gi­nee­ring in ambito software?

Il reverse en­gi­nee­ring del codice può essere uti­liz­za­to in una varietà di ambiti fornendo diversi vantaggi:

  • Controllo e gestione della qualità del fun­zio­na­men­to del proprio software
  • Ulteriore sviluppo del proprio software
  • Analisi di pro­to­col­li di co­mu­ni­ca­zio­ne di rete
  • Ri­le­va­men­to di virus in­for­ma­ti­ci, trojan, ran­som­ware e altri programmi dannosi
  • Por­ta­bi­li­tà o ma­nu­ten­zio­ne di aban­do­n­ware
  • Ricerca di bug nel software
  • Esame generale di un formato di file per la propria com­pren­sio­ne
  • Mi­glio­ra­men­to della com­pa­ti­bi­li­tà di un software con piat­ta­for­me e software di terze parti
  • Utilizzo di funzioni di piat­ta­for­ma non do­cu­men­ta­te

Il reverse en­gi­nee­ring in ambito software può inoltre essere uti­liz­za­to per ana­liz­za­re i prodotti con­cor­ren­ti. Anche se molte aziende vietano il reverse en­gi­nee­ring dei propri prodotti di­chia­ran­do­lo nei propri termini di licenza, l’analisi dei pro­to­col­li non è le­gal­men­te in­te­res­sa­ta da questo divieto. Questo perché il software in sé non è oggetto di indagine da parte degli strumenti di reverse en­gi­nee­ring. Inoltre, tali clausole di licenza sono ge­ne­ral­men­te invalide in molti paesi. Gli utenti di un software ac­qui­sta­to hanno il diritto legale di sot­to­por­lo a reverse en­gi­nee­ring al fine di ve­ri­fi­car­ne la sicurezza e risolvere eventuali bug.

Il reverse en­gi­nee­ring di un software fornisce a pro­gram­ma­to­ri e svi­lup­pa­to­ri preziose in­for­ma­zio­ni sul fun­zio­na­men­to delle ap­pli­ca­zio­ni digitali. Ciò consente una ri­so­lu­zio­ne mirata dei problemi e può fornire utili input per lo sviluppo del proprio software.

Vai al menu prin­ci­pa­le