
警告
RetDec プロジェクトは現在、リソース不足のため 限定的なメンテナンスモード です:
- プルリクエストは歓迎します。可能であれば遅延なく優先的にレビューされます。
- イシューは最大四半期の遅延で対応されます。基本的なプロジェクトメンテナンスに関係しない限り、イシューは積極的には解決されません。
- 基本的なプロジェクトメンテナンスは継続します。
- 非常に限られた開発のみが行われています。
RetDec は、LLVM をベースにしたリターゲッタブルなマシンコード逆コンパイラです。
この逆コンパイラは、特定のターゲットアーキテクチャ、オペレーティングシステム、または実行可能ファイル形式に限定されません:
特徴:
詳細については、以下をご覧ください:
RetDec を入手してインストールするには、2つの方法があります:
retdec/share/retdec/README.md ファイルの 使用 セクションの指示に従います。現在、Windows(7以降)、Linux、macOS、および(実験的に)FreeBSD をサポートしています。インストールされた RetDec には、約5〜6 GBの空きディスク容量が必要です。
使用している RetDec のバージョンに対応した説明を読んでいることを確認してください。不明な場合は、インストール内の retdec/share/retdec/README.md ファイルを参照してください。
RetDec をインストールした後、Microsoft Visual C++ Redistributable for Visual Studio 2017 をインストールします。
以下のプログラムをインストールします:
test.exe という名前のバイナリファイルを逆コンパイルするには、以下を実行します:
$RETDEC_INSTALL_DIR\bin\retdec-decompiler.exe test.exe
詳細については、retdec-decompiler.exe に --help を付けて実行してください。
RetDec をインストールした後、ディストリビューションのパッケージマネージャを使用して以下のパッケージをインストールします:
test.exe という名前のバイナリファイルを逆コンパイルするには、以下を実行します:
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
詳細については、retdec-decompiler に --help を付けて実行してください。
RetDec をインストールした後、以下のパッケージをインストールします:
test.exe という名前のバイナリファイルを逆コンパイルするには、以下を実行します:
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
詳細については、retdec-decompiler に --help を付けて実行してください。
FreeBSD 用の事前ビルドされた「ports」パッケージは現在ありません。自分で逆コンパイラをビルドしてインストールする必要があります。手順は以下に説明します。
test.exe という名前のバイナリファイルを逆コンパイルするには、以下を実行します:
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
詳細については、retdec-decompiler に --help を付けて実行してください。
プロジェクトが CMake でビルドされている場合、さまざまな RetDec ライブラリを簡単に使用できます。RetDec のインストールには、必要なヘッダ、ライブラリ、および CMake スクリプトがすべて含まれています。
RetDec をシステムの標準インストール場所(例:/usr、/usr/local)にインストールした場合、そのコンポーネントを使用するために必要なことは:```cmake
find_package(retdec 5.0 REQUIRED
COMPONENTS
[...]
)
target_link_libraries(your-project
PUBLIC
retdec::
[...]
)
RetDecを自動的に検出できない場所にインストールした場合は、`find_package()`を使用する前にCMakeがそれを見つけられるようにする必要があります。一般的には、以下の2つの方法があります(1つだけを選択して使用してください)。
1. RetDecのインストールディレクトリを[`CMAKE_PREFIX_PATH`](https://cmake.org/cmake/help/latest/variable/CMAKE_PREFIX_PATH.html)に追加します:
```cmake
list(APPEND CMAKE_PREFIX_PATH ${RETDEC_INSTALL_DIR})
```
2. インストールされたRetDec CMakeスクリプトへのパスを`retdec_DIR`に設定します:
```cmake
set(retdec_DIR ${RETDEC_INSTALL_DIR}/share/retdec/cmake)
```
利用可能なRetDecコンポーネントの一覧については、[Repository Overview](https://github.com/avast/retdec/wiki/Repository-Overview)のWikiページを、それらの使用方法のデモについては、[retdec-build-system-tests](https://github.com/avast/retdec-build-system-tests)を参照してください。
## ビルドとインストール
このセクションでは、RetDecのローカルビルドとインストールについて説明します。Dockerを使用する場合の手順については、次のセクションで説明します。
### 必要条件
#### Linux
* C++17をサポートするC++コンパイラおよび標準C++ライブラリ(例:GCC >= 7)
* [CMake](https://cmake.org/)(バージョン >= 3.6)
* [Git](https://git-scm.com/)
* [OpenSSL](https://www.openssl.org/)(バージョン >= 1.1.1)
* [Python](https://www.python.org/)(バージョン >= 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/)、および[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/)
* オプション: APIドキュメント生成用の[Doxygen](http://www.stack.nl/~dimitri/doxygen/)および[Graphviz](http://www.graphviz.org/)
Debianベースのディストリビューション(例:Ubuntu)では、必要なパッケージは`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
RPMベースのディストリビューション(例:Fedora)では、必要なパッケージは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
Arch Linux では、必要なパッケージは `pacman` でインストールできます:```sh
sudo pacman --needed -S base-devel cmake git openssl python3 autoconf automake libtool pkg-config m4 zlib upx doxygen graphviz
パッケージはHomebrewを使用してインストールすることを推奨します。
パッケージはFreeBSDのプリコンパイル済みパッケージリポジトリからpkgコマンドを使用してインストールするか、portsデータベースメソッドを使用してスクラッチからビルドします。
pkg install cmake python37 git autotools
またはportsnap fetchportsnap extractcmakeの場合は
whereis cmakecd /usr/ports/devel/cmakemake install clean注: RetDecは現在システム全体へのインストールをサポートしていますが(#94)、ディストリビューションのパッケージマネージャを使用してインストールしない限り、RetDecを指定したディレクトリにローカルインストールすることを推奨します。その理由は、アンインストールが簡単になり、単一のディレクトリを削除するだけで済むからです。ローカルインストールを実行するには、cmakeに-DCMAKE_INSTALL_PREFIX=<path>パラメータを指定して実行します。ここで、<path>はRetDecがインストールされるディレクトリです(例: LinuxおよびmacOSでは$HOME/projects/retdec-install、WindowsではC:\projects\retdec-install)。
git clone https://github.com/avast/retdeccd retdecmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=<path>make -jN(Nは並列ビルドに使用するプロセス数で、通常はコア数+1が最も高速なコンパイル時間になります)make installcmd.exe)cd retdecmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=<path> -G<generator>cmake --build . --config Release -- -mcmakeに以下のパラメータを渡す必要があります:
-DCMAKE_INSTALL_PREFIX=<path> インストールパスを<path>に設定します。Windowsでバックスラッシュを使用する場合はパスを引用符で囲んでください(例: -DCMAKE_INSTALL_PREFIX="C:\retdec")。-G<generator>は、Visual Studio 2017を使用した32ビットビルドの場合は-G"Visual Studio 15 2017"、64ビットビルドの場合は-G"Visual Studio 15 2017 Win64"です。それ以降のバージョンのVisual Studioも使用できます。cmakeに以下の追加パラメータを渡すこともできます:
-DRETDEC_DOC=ON APIドキュメント付きでビルドする(DoxygenとGraphvizが必要、デフォルトでは無効)。-DRETDEC_TESTS=ON テストを含めてビルドする(デフォルトでは無効)。-DRETDEC_DEV_TOOLS=ON 開発ツールを含めてビルドする(デフォルトでは無効)。-DRETDEC_COMPILE_YARA=OFF インストール手順でYARAルールのコンパイルを無効にする(デフォルトでは有効)。-DCMAKE_BUILD_TYPE=Debug 開発時に有用なデバッグ情報を含めてビルドする。デフォルトではプロジェクトはReleaseモードでビルドされます。Windowsでは効果がありませんが、cmake --build .に--config Debugパラメータを指定することで同様のことが実現できます。-D<dep>_LOCAL_DIR=<path> ここで<dep>は{CAPSTONE, GOOGLETEST, KEYSTONE, LLVM, YARA, YARAMOD}のいずれかです(例: -DCAPSTONE_LOCAL_DIR=<path>)。ビルド時に新しいコピーをダウンロードする代わりに、<path>にあるローカルリポジトリクローンをRetDec依存関係として使用します。複数のオプションを同時に使用できます。Dockerサポートはコミュニティによって維持されています。問題が発生した場合や改善の提案がある場合は、IssueまたはPRを開いてください。
Dockerでビルドする場合、必要なライブラリをローカルにインストールする必要はありません。これはビルドツールチェーン全体を設定せずにRetDecを試すのに適したオプションです。
RetDec Dockerイメージをビルドするには、次のコマンドを実行します``` docker build -t retdec - < Dockerfile
これは、このリポジトリのmasterブランチからイメージをビルドします。
リポジトリのローカルコピーを使用してイメージをビルドするには、開発用Dockerfile, `Dockerfile.dev` を使用します:```
docker build -t retdec:dev . -f Dockerfile.dev
あなたのuidが1000でない場合、入力バイナリファイルを含むディレクトリがRetDecからアクセス可能であることを確認してください:```
chmod 0777 /path/to/local/directory
これで、コンテナ内でデコンパイラを実行できます:```
docker run --rm -v /path/to/local/directory:/destination retdec retdec-decompiler /destination/binary
注意:/destination の部分は変更しないでください。/path/to/local/directory だけを変更してください。出力ファイルは /path/to/local/directory に生成されます。
最新の master ブランチのコミットから、最新の RetDec パッケージを2つの方法で生成しています:
これらのビルドは主に RetDec の開発者、コントリビューター、製品を試す他の人々(例:公式リリースに存在する問題が現在の master でも存在するかテストするなど)を対象としています。
ご自由にお使いいただけますが、お使いのシステム(特に Linux 版)で動作する保証はなく、退行が発生する可能性があることにご注意ください。安定した RetDec バージョンを入手するには、最新の公式プレビルドパッケージをダウンロードするか、最新の RetDec バージョンタグをビルドしてください。
TeamCity
Github Actions
macOS、Linux、Windows 向けのビルドは、最新の RetDec CI ワークフロー実行 で見つけることができます。
master ブランチの最新コミットに対応した最新の Doxygen 生成ソフトウェアリファレンスについては、プロジェクトドキュメント を参照してください。
.dsm ファイル)用の Vim 構文ハイライトファイル。Copyright (c) 2017 Avast Software、MIT ライセンスの下でライセンスされています。詳細は LICENSE ファイルを参照してください。
RetDec は修正版の PeLib ライブラリを組み込んでいます。Avast Software が追加した新しいモジュールは MIT ライセンスの下でライセンスされています。元のソースは以下のライセンスの下でライセンスされています:
LICENSE-PELIB ファイルを参照してください。RetDec は、LICENSE-THIRD-PARTY ファイルに記載されているサードパーティライブラリやその他のリソースを、そのライセンスとともに使用しています。
RetDec コントリビューションガイドライン を参照してください。
このソフトウェアは、研究資金 TACR(チェコ共和国技術庁)、ALFA プログラム番号 TA01010667 の支援を受けています。
cmake --build . --config Release --target installcmakeによって生成されたretdec.slnを開くこともできますcd retdecmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=<path>make -jN(Nは並列ビルドに使用するプロセス数で、通常はコア数+1が最も高速なコンパイル時間になります)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=<path>make -jN(Nは並列ビルドに使用するプロセス数で、通常はコア数+1が最も高速なコンパイル時間になります)make install-DRETDEC_ENABLE_<component>=ON 指定したコンポーネントのみ(複数可)とその依存関係をビルドします。デフォルトではすべてのコンポーネントがビルドされます。このメカニズムで少なくとも1つのコンポーネントが有効になっている場合、明示的に有効にされていない他のコンポーネント(および有効なコンポーネントの依存関係として必要ないもの)はビルドされません。利用可能なすべてのコンポーネントオプションについてはcmake/options.cmakeを参照してください。
-DRETDEC_ENABLE_ALL=ON を使用してすべてのコンポーネントを(再)有効にできます。-DRETDEC_ENABLE=<コンマ区切りのコンポーネントリスト>を-DRETDEC_ENABLE_<component>=ONの代わりに使用できます(例: -DRETDEC_ENABLE=fileformat,loader,ctypesparserは-DRETDEC_ENABLE_FILEFORMAT=ON -DRETDEC_ENABLE_LOADER=ON -DRETDEC_ENABLE_CTYPESPARSER=ONと同等です)。