Voltron は、Python で書かれた拡張可能なデバッガー UI ツールキットです。デバッガ ホストからデータを取得して表示できるユーティリティ ビューの接続を有効にすることで、さまざまなデバッガ (LLDB、GDB、VDB、WinDbg) のユーザー エクスペリエンスを向上させることを目的としています。これらのビューを他の TTY で実行することにより、ニーズに合わせてカスタマイズされたデバッガー ユーザー インターフェイスを構築できます。
Voltron はすべての人にとってのすべてであることを目指しているわけではありません。これは、デバッガの CLI を完全に置き換えるものではありません。むしろ、既存の設定を補完し、CLI デバッガを好きなだけ拡張できるようにすることを目的としています。デバッガの横のウィンドウにレジスタの内容を表示したいだけの場合は、それを行うことができます。徹底的に OllyDbg に似たものを作りたい場合は、それも可能です。
組み込みビューは次の目的で提供されます。
作者の設定はこんな感じです。
任意のデバッガー コマンドをビューに分割し、指定した Pygments レクサーで強調表示することができます。
その他のスクリーンショットはここにあります。
Voltron は、LLDB、GDB、VDB、WinDbg/CDB (PyKD 経由) をサポートし、macOS、Linux、および Windows 上で実行します。
WinDbg のサポートはまだかなり新しいため、問題がある場合は問題を開いてください。
次のアーキテクチャがサポートされています。
lldb | gdb | vdb | ウィンドバック | |
---|---|---|---|---|
x86 | ✓ | ✓ | ✓ | ✓ |
x86_64 | ✓ | ✓ | ✓ | ✓ |
アーム | ✓ | ✓ | ✓ | ✗ |
腕64 | ✓ | ✗ | ✗ | ✗ |
パワーPC | ✗ | ✓ | ✗ | ✗ |
注:インストール スクリプトで完全にサポートされているのは、macOS と Debian 派生版のみです。他の Linux ディストリビューションでは失敗しないはずですが、パッケージの依存関係をインストールしようとしません。別のディストリビューションを使用している場合は、 install.sh
を参照して、実行する前にインストールする必要がある依存関係を確認してください。
ソースをダウンロードし、インストール スクリプトを実行します。
$ git clone https://github.com/snare/voltron
$ cd voltron
$ ./install.sh
デフォルトでは、インストール スクリプトはユーザーのsite-packages
ディレクトリにインストールされます。システムにsite-packages
インストールする場合は、 -s
フラグを使用します。
$ ./install.sh -s
次のように、仮想環境 (LLDB のみ) にインストールすることもできます。
$ ./install.sh -v /path/to/venv -b lldb
シェルのない Windows を使用している場合、インストールに問題がある場合、または手動でインストールしたい場合は、手動インストールのドキュメントを参照してください。
デバッガに init スクリプト (LLDB の場合は.lldbinit
、GDB の場合は.gdbinit
) がある場合は、 entry.py
エントリ ポイント スクリプトを取得して、起動時に Voltron をロードするように設定します。フルパスはvoltron
パッケージ内にあります。たとえば、macOS では/Library/Python/2.7/site-packages/voltron/entry.pyになります。 install.sh
スクリプトは、パス内で GDB または LLDB を検出した場合、これを.gdbinit
または.lldbinit
ファイルに自動的に追加します。
LLDB:
command script import /path/to/voltron/entry.py
GDB:
source /path/to/voltron/entry.py
デバッガーを起動し、必要に応じて Voltron を手動で初期化します。
LLDB の最新バージョンでは、Voltron を手動で初期化する必要はありません。
$ lldb target_binary
古いバージョンの LLDB では、下位のものをロードした後にvoltron init
を呼び出す必要があります。
$ lldb target_binary
(lldb) voltron init
GDB:
$ gdb target_binary
VDB:
$ ./vdbbin target_binary
> script /path/to/voltron/entry.py
WinDbg/CDB は、Linux ユーザーランドを使用した Bash 経由での実行のみサポートされています。著者は Git Bash と ConEmu を使用してテストしています。 PyKD と Voltron は、デバッガーの起動時に 1 つのコマンドでロードできます。
$ cdb -c '.load C:pathtopykd.pyd ; !py --global C:pathtovoltronentry.py' target_binary
別のターミナル (iTerm ペインを使用) で、UI ビューの 1 つを開始します。 LLDB、WinDbg、および GDB では、ビューはすぐに更新されます。 VDB では、下位が停止するまで (ブレークポイント、ステップ後など) 更新されません。
$ voltron view register
$ voltron view stack
$ voltron view disasm
$ voltron view backtrace
ブレークポイントを設定し、inferior を実行します。
(*db) b main
(*db) run
デバッガがブレークポイントに到達すると、レジスタ、スタック、メモリなどの現在の状態を反映するためにビューが更新されます。ビューは、デバッガの「停止フック」メカニズムを使用して、デバッガ CLI で各コマンドが実行された後に更新されます。したがって、ステップを実行するか、続行してブレークポイントに到達するたびに、ビューが更新されます。
github の wiki を参照してください。
Q. Voltron をロード中にImportError
発生するのはなぜですか?
A.複数のバージョンの Python がインストールされており、間違ったバージョンを使用して Voltron をインストールした可能性があります。より詳細なインストール手順を参照してください。
Q.GEF ?ペダ? PwnDbg? fGのgdbinit?
A.すべて GDB 用の非常に優れた拡張機能です。これらのツールは主に、悪用タスク用の追加コマンドのセットを提供しますが、Voltron のように、レジスタ、スタック、コードなどを表示する「コンテキスト」表示も提供します。これらのツールは、デバッガーが停止するたびに、デバッガー コンソールにコンテキスト表示を出力します。 Voltron は、デバッガーに RPC サーバー インプラントを埋め込み、他の端末 (または Web ブラウザー、または Binary Ninja と同期する) からのビューの添付を可能にすることで、異なるアプローチを採用しています。これにより、ユーザーは、よりクリーンなマルチウィンドウ インターフェイスを構築して、彼らのデバッガー。 Voltron は、これらすべてのツールと併用するとうまく機能します。選択した GDB 拡張機能でコンテキスト表示を無効にして、いくつかの Voltron ビューを接続するだけで、これらのツールによって追加された便利なコマンドの利点をすべて享受できます。
詳細または問題を送信するには、github 上の問題トラッカーを参照してください。
Voltron の読み込み中にImportError
発生した場合は、お使いのプラットフォームのインストール手順に従っていることを確認してください。
LLDB の古いバージョンでは、Voltron のフックをインストールする前にターゲットをロードする必要があるため、デバッグ ターゲットのロード後にvoltron init
コマンドを手動で実行する必要があります。 Voltron はイベント ハンドラーの自動登録を試み、 voltron init
が必要かどうかをユーザーに通知します。
WinDbg/CDB サポートの詳細については、こちらをご覧ください。
著者は主に、macOS 上で Voltron と LLDB の最新バージョンを使用しています。私たちはリリース前にできるだけ多くのプラットフォームとアーキテクチャですべてをテストするよう努めますが、LLDB/macOS/x64 が最も頻繁に使用される組み合わせになるでしょう。ボルトロンがあなたのペットに火をつけないことを祈りますが、YMMVは。
LICENSE ファイルを参照してください。
これを使っていて嫌いじゃないなら、今度カンファレンスでビールをおごってください。このライセンスは他の寄稿者にも適用されます。richo は間違いなく彼の寄稿に対してビールを数杯飲む価値があります。
この作業に時間を費やす時間を与えてくれた元雇用主の Assurance と Azimuth Security に感謝します。
リチョの Voltron への貢献に敬意を表します。
fG! の gdbinit がこのプロジェクトの元のインスピレーションでした。
VDB サポートを実装してくれた Willi に感謝します。
Voltron は現在、逆アセンブリとデバッガ ホストの内部逆アセンブリ メカニズムに Capstone を使用しています。 Capstone は、次世代のリバース エンジニアリングおよびデバッグ ツールが構築されている、強力なオープンソースのマルチ アーキテクチャ 逆アセンブラです。それをチェックしてください。
継続的な貢献をしてくださったgrazfatherに感謝します。