
簡単にリターゲット可能でハック可能な対話型逆アセンブラ、IDAPython互換のプラグインAPIを搭載
ScratchABit は、データ/制御フロー解析機能を備えたインタラクティブなインクリメンタル逆アセンブラです。ScratchABit は、オープンソースリバースエンジニアリングコミュニティ(ベンダーが適切にサポートしていないハードウェア向けのオープンソースドライバ/ファームウェアの作成、ハードウェアおよびソフトウェアの相互運用性、セキュリティ研究のためのリバースエンジニアリング)の取り組みに捧げられています。
ScratchABit は、コミュニティでよく知られている IDAPython API をサポートしており、逆アセンブリ/拡張モジュールを作成できます。
ScratchABit は進行中のプロジェクトであり、必要に応じて機能が追加されています。貢献を歓迎します。
ScratchABit は GNU General Public License v3 (GPLv3) の条件の下でリリースされています。
難読化された言語で書かれるべきではありません。これには、低レベルすぎる言語、初期化されていない変数にアクセスできる言語、変数と関数/プロシージャを区別しない言語、配列インデックスを任意の数値から開始する言語などが含まれます。ScratchABit は、あなたの快適さと正気のために Python(最新バージョン、Python3)で書かれています。
ユーザーインターフェースフレームワークは、必要なレベルのユーザーインタラクションを可能にし、依存関係、肥大化、問題、フレームワークのバージョン間の非互換性を追加しないようにする必要があります。ScratchABit は現在、ANSI/VT100 ターミナルエスケープシーケンスを使用したシンプルなフルスクリーンテキストユーザーインターフェースを使用しています(はい、curses ライブラリでさえ、ユーザーに強制するには依存関係が大きすぎると判断されました)。
「データベース」を保存するために使いやすいテキスト形式を活用し、再利用やツール作成、バージョン管理システムへの保存を容易にする必要があります。
ScratchABit を使用するには、Python3 がインストールされている必要があります(Python 3.3 から 3.7 でテスト済み)。また、VT100(最小)または XTerm(推奨)ターミナルまたはターミナルエミュレータが必要です(Linux/BSD などの Unix システムはすべて対応しているはずです。詳細は以下の FAQ を参照してください)。
以下のコマンドでコードをクローンします:
git clone --recursive https://github.com/pfalcon/ScratchABit
--recursive なしでクローンした場合は、ScratchABit ディレクトリ内で git submodule update --init を実行してください。
ScratchABit には現在、Capstone Engine ベースの CPU プラグインが同梱されており、多くの CPU アーキテクチャにアクセスできます。これを使用するには、Capstone の最新の Python バインディングモジュールをインストールする必要があります(OS ディストリビューションが提供するパッケージはしばしば古いため、そちらよりも推奨されます)。最も簡単なインストール方法は、Python ユーザーパッケージディレクトリにインストールすることです:
pip3 install --no-cache-dir --user capstone
別の方法として、ScratchABit ディレクトリ内の Python 仮想環境 にインストールすることもできます:
python3 -m venv .venv
source .venv/bin/activate
pip3 install --no-cache-dir capstone
ScratchABit を操作する新しいターミナルセッションを開くたびに、仮想環境をアクティブにするために source .venv/bin/activate コマンドを再度実行してください。
上記のいずれも機能しない場合は、capstone パッケージをシステム全体にインストールしてみることもできます(推奨しません):
sudo pip3 install --system capstone
自己記述形式の実行可能ファイル(ELF など)を逆アセンブルする場合は、ScratchABit.py に引数として渡すだけです。リポジトリには、クイックスタート用にさまざまなアーキテクチャ向けの example-*.elf ファイルが多数含まれています。たとえば、x86 32ビット版を試すには:
python3 ScratchABit.py example-x86_32.elf
あるいは、生のバイナリファイルを逆アセンブルする場合は、コードに対して定義されたメモリ領域、バイナリファイルをロードするアドレスなどを指定するために、.def(定義)ファイルを作成する必要があります(注:.def ファイルは .elf などのファイルにも役立つ場合があります)。リポジトリには、シンプルな x86_64 生バイナリコードと、対応する example-x86_64.def ファイルが含まれています(利用可能なオプションの説明はファイル内を参照):
python3 ScratchABit.py example-x86_64.def
F9 キーを押してメニューにアクセスします(XTerm 互換ターミナルではマウスも使用可能)。F1 キーを押すとキーバインドに関するヘルプが表示されます(ほとんどの操作はメニューからもアクセス可能)。ScratchABit のワークフローは、他のインタラクティブ逆アセンブラと似ています(事前の経験や背景知識があると役立つ場合があります)。
IDAPython プロセッサプラグインは、Python モジュールパス上の任意の場所からロードできます。または、プラグインの .py ファイルを plugins/cpu/ サブディレクトリにシンボリックリンクまたはコピーすることもできます。
プラグインを利用可能にした後、example-x86_64.def に基づいて新しい定義ファイルを作成し、cpu xxx 行でプラグインモジュール名(.py 拡張子なし)を設定します。
外部プラグインを使用する非常にシンプルな例については、ida-xtensa2 リポジトリ の xtensa.py プラグインと連携する esp8266.def ファイル を参照してください。
Q: どのプロセッサ/アーキテクチャがサポートされていますか?
A: ScratchABit はそれ自体ではプロセッサアーキテクチャをサポートしておらず、IDAPython API プラグインを使用して完全に再ターゲット可能です。多くのプラグインが利用可能で、新しいプラグインの作成は簡単です。ユーザーが ScratchABit を試用できるように、内部で Pymsasid 逆アセンブラを使用したシンプルな x86 プロセッサプラグインがディストリビューションに含まれています。
バージョン 2.0 からは、Capstone プラグインも含まれており、x86、ARM、MIPS、PowerPC、SPARC など、多数のアーキテクチャにアクセスできます(アーキテクチャサポートはユーザーテストに基づいて段階的に有効化されます)。
ScratchABit に同梱されているプラグインについては、plugins/cpu/ ディレクトリの README をご覧ください。
Q: デバッガは?
A: ScratchABit は静的解析と新しい CPU アーキテクチャの容易なサポートに特化しています(新しい CPU プラグインを Python でコーディングするだけで、数時間で最初の結果が得られます)。動的解析はコア機能として想定されておらず、すぐに実装する計画はありません。ただし、パッチは歓迎します。
Q: 逆コンパイラは?
A: 深いプログラム解析、変換、逆コンパイルのための関連プロジェクト ScratchABlock があります。ScratchABlock が成熟するにつれて、その機能の一部が(おそらくプラグインを介して)ScratchABit 内で利用可能になることが期待されています。
Q: Linux を使用していませんが、ScratchABit を実行するにはどうすればよいですか?
A: システム上でエミュレータ/VM に Linux をインストールして喜んでください。
Q: 必須のスクリーンショットは?
A: もちろん:
