
RetDec è un decompilatore di codice macchina ri-targetizzabile basato su LLVM.
Avviso
Il progetto RetDec è attualmente in modalità di manutenzione limitata a causa della mancanza di risorse:
- Le Pull Request sono benvenute. Vengono revisionate con priorità, se possibile senza ritardi.
- Le segnalazioni (issues) vengono gestite con ritardi fino a un trimestre. Le segnalazioni non vengono risolte attivamente a meno che non riguardino la manutenzione di base del progetto.
- La manutenzione di base del progetto continua.
- Viene portato avanti solo uno sviluppo molto limitato.
RetDec è un decompilatore di codice macchina retargetable basato su LLVM.
Il decompilatore non è limitato a nessuna architettura target, sistema operativo o formato di file eseguibile particolare:
Caratteristiche:
Per maggiori informazioni, consulta
Ci sono due modi per ottenere e installare RetDec:
retdec/share/retdec/README.md dopo averlo decompresso.Supportiamo attualmente Windows (7 o successivo), Linux, macOS e (sperimentalmente) FreeBSD. Una versione installata di RetDec richiede circa 5 a 6 GB di spazio libero su disco.
Assicurati di leggere le istruzioni corrispondenti alla versione di RetDec utilizzata. In caso di dubbio, fai riferimento al file retdec/share/retdec/README.md nell'installazione.
Dopo aver installato RetDec, installa Microsoft Visual C++ Redistributable per Visual Studio 2017.
Installa i seguenti programmi:
Per decompilare un file binario chiamato test.exe, esegui
$RETDEC_INSTALL_DIR\bin\retdec-decompiler.exe test.exe
Per maggiori informazioni, esegui retdec-decompiler.exe con --help.
Dopo aver installato RetDec, installa i seguenti pacchetti tramite il gestore pacchetti della tua distribuzione:
Per decompilare un file binario chiamato test.exe, esegui
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
Per maggiori informazioni, esegui retdec-decompiler con --help.
Dopo aver installato RetDec, installa i seguenti pacchetti:
Per decompilare un file binario chiamato test.exe, esegui
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
Per maggiori informazioni, esegui retdec-decompiler con --help.
Attualmente non ci sono pacchetti "ports" pre-compilati per FreeBSD. Dovrai compilare e installare il decompilatore da solo. Il processo è descritto di seguito.
Per decompilare un file binario chiamato test.exe, esegui
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
Per maggiori informazioni, esegui retdec-decompiler con --help.
Puoi facilmente utilizzare varie librerie RetDec nei tuoi progetti - se sono compilate con CMake. L'installazione di RetDec contiene tutti gli header, le librerie e gli script CMake necessari.
Se hai installato RetDec in una posizione di installazione standard del tuo sistema (es. /usr, /usr/local), tutto ciò che devi fare per usare i suoi componenti è:```cmake
find_package(retdec 5.0 REQUIRED
COMPONENTS
[...]
)
target_link_libraries(your-project
PUBLIC
retdec::
[...]
)
Se non hai installato RetDec in un luogo in cui possa essere scoperto automaticamente, devi aiutare CMake a trovarlo prima di utilizzare `find_package()`. Ci sono generalmente due modi per farlo (scegline e usa solo uno):
1. Aggiungi la directory di installazione di RetDec a [`CMAKE_PREFIX_PATH`](https://cmake.org/cmake/help/latest/variable/CMAKE_PREFIX_PATH.html):
```cmake
list(APPEND CMAKE_PREFIX_PATH ${RETDEC_INSTALL_DIR})
```
2. Imposta il percorso degli script CMake di RetDec installati su `retdec_DIR`:
```cmake
set(retdec_DIR ${RETDEC_INSTALL_DIR}/share/retdec/cmake)
```
Consulta la pagina wiki [Repository Overview](https://github.com/avast/retdec/wiki/Repository-Overview) per l'elenco dei componenti RetDec disponibili, o [retdec-build-system-tests](https://github.com/avast/retdec-build-system-tests) per esempi su come utilizzarli.
## Compilazione e Installazione
Questa sezione descrive una compilazione e installazione locale di RetDec. Le istruzioni per Docker sono fornite nella sezione successiva.
### Requisiti
#### Linux
* Un compilatore C++ e una libreria standard C++ che supportino C++17 (ad esempio GCC >= 7)
* [CMake](https://cmake.org/) (versione >= 3.6)
* [Git](https://git-scm.com/)
* [OpenSSL](https://www.openssl.org/) (versione >= 1.1.1)
* [Python](https://www.python.org/) (versione >= 3.4)
* [autotools](https://en.wikipedia.org/wiki/GNU_Build_System) ([autoconf](https://www.gnu.org/software/autoconf/autoconf.html), [automake](https://www.gnu.org/software/automake/) e [libtool](https://www.gnu.org/software/libtool/))
* [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/)
* [m4](https://www.gnu.org/software/m4/m4.html)
* [zlib](http://zlib.net/)
* Opzionale: [Doxygen](http://www.stack.nl/~dimitri/doxygen/) e [Graphviz](http://www.graphviz.org/) per generare la documentazione dell'API
Sulle distribuzioni basate su Debian (ad esempio Ubuntu), i pacchetti necessari possono essere installati con `apt-get`:```sh
sudo apt-get install build-essential cmake git openssl libssl-dev python3 autoconf automake libtool pkg-config m4 zlib1g-dev upx doxygen graphviz
Sulle distribuzioni basate su RPM (es. Fedora), i pacchetti richiesti possono essere installati con dnf:```sh
sudo dnf install gcc gcc-c++ cmake make git openssl openssl-devel python3 autoconf automake libtool pkg-config m4 zlib-devel upx doxygen graphviz
Su Arch Linux, i pacchetti necessari possono essere installati con `pacman`:```sh
sudo pacman --needed -S base-devel cmake git openssl python3 autoconf automake libtool pkg-config m4 zlib upx doxygen graphviz
I pacchetti dovrebbero essere preferibilmente installati tramite Homebrew.
I pacchetti dovrebbero essere installati tramite il repository di pacchetti precompilati di FreeBSD usando il comando pkg o compilati da zero usando il metodo del database ports.
pkg: manuale (metodo pkg)
pkg install cmake python37 git autotools
OPPUREports: manuale (metodo ports)
portsnap fetchportsnap extractcmake si farebbe:
whereis cmakecd /usr/ports/devel/cmakemake install cleanNota: Sebbene RetDec ora supporti un'installazione a livello di sistema (#94), a meno che tu non usi il gestore di pacchetti della tua distribuzione per installarlo, raccomandiamo di installare RetDec localmente in una directory designata. Il motivo è che la disinstallazione sarà più semplice poiché sarà necessario rimuovere solo una singola directory. Per eseguire un'installazione locale, esegui cmake con il parametro -DCMAKE_INSTALL_PREFIX=<percorso>, dove <percorso> è la directory in cui verrà installato RetDec (ad es. $HOME/projects/retdec-install su Linux e macOS, e C:\projects\retdec-install su Windows).
git clone https://github.com/avast/retdeccd retdecmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=<percorso>make -jN (N è il numero di processi da usare per la build parallela, tipicamente numero di core + 1 dà il tempo di compilazione più veloce)make installcmd.exe)cd retdecmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=<percorso> -G<generatore>cmake --build . --config Release -- -mDevi passare i seguenti parametri a cmake:
-DCMAKE_INSTALL_PREFIX=<percorso> per impostare il percorso di installazione a <percorso>. Racchiudi il percorso tra virgolette se usi backslash su Windows (ad es. -DCMAKE_INSTALL_PREFIX="C:\retdec").-G<generatore> è -G"Visual Studio 15 2017" per una build a 32 bit usando Visual Studio 2017, o -G"Visual Studio 15 2017 Win64" per una build a 64 bit usando Visual Studio 2017. È possibile utilizzare versioni successive di Visual Studio.Puoi passare i seguenti parametri aggiuntivi a cmake:
-DRETDEC_DOC=ON per compilare con la documentazione API (richiede Doxygen e Graphviz, disabilitato per impostazione predefinita).-DRETDEC_TESTS=ON per compilare con i test (disabilitato per impostazione predefinita).-DRETDEC_DEV_TOOLS=ON per compilare con gli strumenti di sviluppo (disabilitato per impostazione predefinita).-DRETDEC_COMPILE_YARA=OFF per disabilitare la compilazione delle regole YARA al momento dell'installazione (abilitato per impostazione predefinita).-DCMAKE_BUILD_TYPE=Debug per compilare con informazioni di debug, utile durante lo sviluppo. Per impostazione predefinita, il progetto viene compilato in modalità Release. Questo non ha effetto su Windows, ma la stessa cosa può essere ottenuta eseguendo cmake --build . con il parametro --config Debug.-D<dep>_LOCAL_DIR=<percorso> dove <dep> proviene da {CAPSTONE, GOOGLETEST, KEYSTONE, LLVM, YARA, YARAMOD} (ad es. ), per utilizzare il clone del repository locale in per la dipendenza RetDec invece di scaricare una copia fresca al momento della compilazione. Possono essere usate più opzioni di questo tipo contemporaneamente.Il supporto Docker è mantenuto dalla community. Se qualcosa non funziona per te o se hai suggerimenti per miglioramenti, apri un issue o una PR.
Compilare in Docker non richiede l'installazione locale delle librerie necessarie. Questa è una buona opzione per provare RetDec senza impostare l'intera toolchain di compilazione.
Per compilare l'immagine Docker di RetDec, esegui``` docker build -t retdec - < Dockerfile
Questo crea l'immagine dal branch master di questo repository.
Per creare l'immagine usando la copia locale del repository, usa il Dockerfile di sviluppo, `Dockerfile.dev`:```
docker build -t retdec:dev . -f Dockerfile.dev
Se il tuo uid non è 1000, assicurati che la directory che contiene i tuoi file binari di input sia accessibile per RetDec:```
chmod 0777 /path/to/local/directory
Ora puoi eseguire il decompilatore all'interno di un contenitore:```
docker run --rm -v /path/to/local/directory:/destination retdec retdec-decompiler /destination/binary
Nota: non modificare la parte /destination. Devi solo cambiare /path/to/local/directory. I file di output verranno quindi generati in /path/to/local/directory.
Generiamo pacchetti RetDec aggiornati dall'ultimo commit nel branch master in due modi:
Le build sono pensate principalmente per essere utilizzate dagli sviluppatori di RetDec, dai contributori e da altre persone che sperimentano con il prodotto (ad esempio, testare se un problema presente nella release ufficiale esiste ancora nel master corrente).
Puoi usarle come desideri, ma tieni presente che non ci sono garanzie che funzionino sul tuo sistema (specialmente la versione Linux), e che le regressioni sono possibili. Per ottenere una versione stabile di RetDec, scarica l'ultimo pacchetto precompilato ufficiale o compila l'ultimo tag di versione di RetDec.
TeamCity
Github Actions
Puoi trovare le build per macOS, Linux e Windows nell'ultima esecuzione del workflow CI di RetDec.
Vedi la documentazione del progetto per un riferimento software aggiornato generato da Doxygen corrispondente all'ultimo commit nel branch master.
.dsm).Copyright (c) 2017 Avast Software, concesso in licenza sotto la licenza MIT. Consulta il file LICENSE per maggiori dettagli.
RetDec incorpora una libreria PeLib modificata. I nuovi moduli aggiunti da Avast Software sono concessi in licenza sotto la licenza MIT. I sorgenti originali sono concessi in licenza sotto la seguente licenza:
LICENSE-PELIB per maggiori dettagli.RetDec utilizza librerie di terze parti o altre risorse elencate, insieme alle loro licenze, nel file LICENSE-THIRD-PARTY.
Vedi le linee guida per contribuire a RetDec.
Questo software è stato supportato dal finanziamento di ricerca TACR (Technology Agency of the Czech Republic), Programma ALFA n. TA01010667.
cmake --build . --config Release --target installretdec.sln generato da cmake nell'IDE di Visual Studiocd retdecmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=<percorso>make -jN (N è il numero di processi da usare per la build parallela, tipicamente numero di core + 1 dà il tempo di compilazione più veloce)make installsudo pkg install git cmakegit clone https://github.com/avast/retdeccd retdecmkdir build && cd build# FreeBSD (and other BSDs) do need cmake, python3, git, autotools. OpenSSL is pre-installed in the OS but check its version.
# Later versions may be available for each of the packages.
# See what is installed:
sudo pkg info cmake python37 autotools
# Install/upgrade them:
sudo pkg install cmake python37 autotools
cmake .. -DCMAKE_INSTALL_PREFIX=<percorso>make -jN (N è il numero di processi da usare per la build parallela, tipicamente numero di core + 1 dà il tempo di compilazione più veloce)make install-DCAPSTONE_LOCAL_DIR=<percorso><percorso>-DRETDEC_ENABLE_<componente>=ON per compilare solo il/i componente/i specificato/i (possono essere usate più opzioni di questo tipo contemporaneamente) e le loro dipendenze. Per impostazione predefinita, vengono compilati tutti i componenti. Se almeno un componente viene abilitato tramite questo meccanismo, tutti gli altri componenti che non sono stati esplicitamente abilitati (e non sono necessari come dipendenze dei componenti abilitati) non vengono compilati. Vedi cmake/options.cmake per tutte le opzioni dei componenti disponibili.
-DRETDEC_ENABLE_ALL=ON può essere usato per (ri-)abilitare tutti i componenti.-DRETDEC_ENABLE=<elenco di componenti separati da virgola> invece di -DRETDEC_ENABLE_<componente>=ON (ad es. -DRETDEC_ENABLE=fileformat,loader,ctypesparser è equivalente a -DRETDEC_ENABLE_FILEFORMAT=ON -DRETDEC_ENABLE_LOADER=ON -DRETDEC_ENABLE_CTYPESPARSER=ON).