Decompilatori disponibili

Il decompilatore cerca di tradurre un file oggetto in un file sorgente compilabile. Esistono molti decompilatori per C# o Java, ma solo pochi per C/C++. Si veda in particolare i seguenti decompilatori per le macchine reali:

  • Ghidra un decompilatore open-source sviluppato dalla National Security Agency degli Stati Uniti, è un ambiente interattivo avanzato (sembra ispirato a IDA - sotto), per l’analisi e la decompilazione binaria. È scritto in Java, ha un’interfaccia utente che ricorda l’IDE Eclipse (infatti esiste anche un plug-in per Eclipse). Gli utenti possono scrivere il proprio plug-in per l’analisi specifica del target in Java o in Python! Funziona su Windows, Linux, MacOS e supporta molti processori. È possibile aggiungere nuovi processori scrivendo file di testo per specificare l’architettura del processore e il suo set di istruzioni. Nel complesso, un lavoro eccellente, che stabilisce un nuovo standard per i decompilatori.
  • IDA è un potente decompilatore commerciale che viene integrato all’interno di un ambiente simile ad un IDE costruito in tutto e per tutto per il reverse engineering (disassemblaggio, decompilazione e debugging) di binari. L’azienda, HexRays, sviluppa decompilatori per molte CPU target inclusa ARM, x86, x86-64, powerpc e molte altre architetture. È lo Strumento con la S maiuscola: basa gran parte della decompilazione attraverso il pattern matching con un server chiamato Lumina che consente di interrogare da remoto una certa base di dati con firme dei principali binari/librerie open-source. Unico difetto il prezzo: una licenza può arrivare a costare oltre 5.000 euro.

  • reko: Un altro decompilatore open-source. Scritto in C#, funziona quindi solo su Windows o su piattaforme che supportano mono. Accetta binari compilati per molti processori. Dispone di un’interfaccia grafica con tutte le visualizzazioni standard (disassemblaggio, hexdump, sorgente C, progetto) e può essere usato anche dalla riga di comando.

  • rev.ng è un decompilatore commerciale che si basa sul concetto “no goto”, sviluppato da rev.ng, azienda Italiana (daje!). Il codice prodotto dallo strumento infatti non contiene più alcuna traccia dei goto dati dall’istruzioni. Secondo gli sviluppatori, il codice che revngc produce può essere utilizzato per ricompilare il binario: ambizioso come obiettivo! Purtroppo il decompilatore è ancora closed source e per ora i binari vengono rilasciati solo su invito. Molto promettente!

Decompilatori per virtual machine

Java e molti altri linguaggi ad oggetti si basano sull’utilizzo di bytecode, invece delle traduzione delle istruzioni direttamente in assembly. Questo perché il bytecode essendo basato su una architettura virtuale, più ad alto livello rispetto all’hardware, consente di esprimere più informazioni (e quindi di fare una traduzione 1:1 rispetto ai linguaggi compilati).

Di seguito troviamo alcuni decompilatori specifici per la Java Virtual Machine:

  • JD decompiler sviluppato da Emmanuel Dupuy è un decompilatore open source e gratuito per la virtual java machine. Punti caratteristici sono la classica interfaccia grafica, la velocità con cui riesce a decompilare il file JAR. È disponibile sia come GUI esterna (come applicazione a sé) che come plugin per gli ambienti di sviluppo Eclipse o IntelliJ.

Decompilatori per Visual Basic:

  • VB decompiler è un decompilatore commerciale per Visual Basic sviluppato da DotFix Software che permette di ottenere uno pseudocodice molto simile all’originale. Include inoltre un potente disassemblatore per x86-64 e una interfaccia che permette di accedere.

Decompilatori per C#, .NET:

  • DotPeek è un decompilatore commerciale sviluppato da JetBrains per programmi scritti in .NET. Oltre all’esperienza decennale del team dietro Jetbrains, dotpeek è molto versatile da usare ed esegue il lavoro in modo preciso. Molto interessante la caratteristica di interoperabilità tra i diversi IDE di Jetbrains. Gli autori sostengono che sia possibile ricompilare il progetto riottenendo il file di input.

  • .Net Reflector è un decompilatore commerciale sviluppato da RedGate che permette di tradurre un programma binario nel codice sorgente C#. Include un potente debugger da poter integrare all’interno di Visual Studio.

  • ILSpy è un decompilatore open source sviluppato da Siegfried Pammer. Tra le caratteristiche più interessanti, troviamo il supporto ai file PDB di debug, decompilazione a C#, possibilità di generare il progetto associato ed è pure espandibile in termini di funzionalità con plugins.

Hai suggerimenti? Scrivimi una e-mail

Biografia

Sono uno specialista in materia di sicurezza informatica, scrittore, contributore per il progetto Monero, una criptovaluta che è focalizzata nel proteggere le informazioni sulle transazioni. Il libro che ho pubblicato Mastering Monero è diventato una delle migliori risorse per padroneggiare Monero. Più informazioni su di me

Seguimi su Twitter o scrivimi una e-mail. Le donazioni sono molto apprezzate, mi permettono di continuare a lavorare e a scrivere.

Mastering Monero Book