
E9Patch - 強力な静的バイナリ書き換えツール
E9Patchは、x86_64 Linux ELFバイナリのための強力な静的バイナリ書き換えツールです。
E9Patchは以下を特徴とします:
静的バイナリ書き換えは、入力バイナリ(ELF実行ファイルまたは共有オブジェクト)を受け取り、パッチ/変更が適用された出力バイナリを生成します。 パッチ適用済みのバイナリは元のバイナリのドロップイン代替として使用できます。
ビルド済みのE9Patchバイナリは以下からダウンロードできます:
E9Patchのビルドは非常に簡単です: build.shスクリプトを実行するだけです。
これにより、自動的に2つのツールがビルドされます:
e9patch: バイナリ書き換えバックエンドe9tool: E9Patch用の線形逆アセンブルフロントエンドE9PatchはE9Toolフロントエンドを介して使用できます。
例えば、xterm内のすべてのxor命令に命令表示計装を追加するには、以下のコマンドを使用できます:
$ ./e9tool -M 'asm=/xor.*/' -P print xterm
これにより、a.outファイルに書き込まれたxtermの修正版が生成されます。
修正されたxtermは通常通り実行できますが、実行された各xor命令のアセンブリ文字列をstderrに出力します:
$ ./a.out
xorl %ebp, %ebp
xorl %ebx, %ebx
xorl %eax, %eax
xorl %edx, %edx
xorl %edi, %edi
...
サポートされているオプションとモードの完全なリストについては、以下を参照してください:
$ ./e9tool --help
E9Patchを使用しているその他のプロジェクトには以下が含まれます:
libc.soの静的バイナリ書き換えを使用したシステムコールインターセプト。E9Patchは、他のプロジェクトに統合可能なように設計された低レベルツールです。 詳細については、以下のドキュメントを参照してください:
バグはこちらから報告できます:
現在のバージョンのE9Patchは、PLDI'2020論文で評価された元のプロトタイプと比較して大幅に改善されています。 具体的には:
-O2オプションを渡してください。このソフトウェアはGNU Public License (GPL) Version 3の下で公開されています。
一部の特定のファイルはMITライセンスの下で公開されています(ファイルの前文を確認してください)。
詳細については、PLDI'2020論文を参照してください:
論文は以下のように引用してください:
@inproceedings{e9patch,
author = {Duck, Gregory J. and Gao, Xiang and Roychoudhury, Abhik},
title = {Binary rewriting without control flow recovery},
year = {2020},
publisher = {Association for Computing Machinery},
url = {https://doi.org/10.1145/3385412.3385972},
doi = {10.1145/3385412.3385972},
booktitle = {Programming Language Design and Implementation (PLDI)}
}
本研究の一部は、National Research Foundation (NRF) Singaporeの国家サイバーセキュリティ研究開発(NCR)プログラムの下で資金提供されたNational Satellite of Excellence in Trustworthy Software Systemsによって支援されました。