Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/nalen98/ghidraemu
Dynamic Code Analysis (DAST)Reverse EngineeringDebuggersBinary Analysis
GitHubnalen98/ghidraemu

GhidraEmu

Native Pcode emulator

リポジトリを見る
305232年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

GhidraEmu



この実験的な Ghidra プラグインを使うと、ネイティブ pcode エミュレーションを簡単に扱えます。スクリプトはもう必要ありません。Ghidra から直接使用するだけです。一般的なエミュレータが対応していないさまざまなエキゾチックなプロセッサを扱う場合に特に役立ちます。

プロセッサ/VM が Ghidra によるリバースエンジニアリングでサポートされていれば、エミュレーションできます。たとえば、eBPF 命令のエミュレーションを以下に示します:

GhidraEmu

できること

本質的に、このプラグインは ghidra.app.emulator パッケージ内のクラスを拡張したラッパーです。実装されている機能は次のとおりです:

  • Ghidra がサポートするすべてのアーキテクチャで動作するため、エキゾチックなプロセッサを追加してエミュレートできます
  • CPU コンテキスト、スタック、ヒープのエミュレーション
  • Ghidra GUI からパッチを当てたバイトを適用して、エミュレーションの流れを変更する
  • エミュレーションプロセスを制御するブレークポイント
  • エミュレーション中に変更されたバイトを ByteViewer に表示する
  • 一部の libc 関数のフック(ただし、まだ不十分です)

PCode エミュレーションは理想的には統一を意味しますが、ほとんどのプロセッサにはそれぞれ独自のアプローチが必要です。遭遇した問題は遠慮なく報告してください。すべてのプロセッサをテストしたいところですが、それはほぼ不可能です。

できないこと

  • 外部ライブラリ関数へのステップイン(EmulatorHelper の制限)
  • システムコールのエミュレーション

すべてのプラグインウィンドウ(まとめて表示)

GhidraEmu

機能

メニューウィンドウ

スタックビュー、レジスタ、ブレークポイントビュー、メインウィンドウのすべてのプラグインウィンドウが含まれます。

GhidraEmu menu

ポップアップウィンドウ

エミュレーションの開始位置と終了位置の設定、ブレークポイント、変更されたバイトのエミュレータ状態への適用を行うホットキーが含まれています。

レジスタビュー

レジスタを自由に変更できます。リンクレジスタ(緑色の矢印)を設定すると、エミュレータがどのレジスタに戻りアドレスが格納されているかを認識できます。プラグインは、スタック、lr レジスタ、AARCH64、MIPS レジスタによる仕組みを理解しています。エキゾチックなプロセッサを使用している場合は、リンクレジスタを選択してボタンを押してください。

スタックビュー

CodeBrowser でプログラムを開くと、GhidraEmu がスタック領域を自動的にマッピングします。スタックポインタはスタック範囲の中央に設定されます。これにより、スタックフレームの先頭または末尾に値を設定できます。更新やリセット時にフリーズする場合は、スクロールしてください。エミュレーション中にプログラムがスタックにもっと多くの領域を必要とする場合、プラグインが自動的に割り当てます。

ブレークポイントビュー

RAM ビュー

エミュレーション中にバイトが変更された場合、そのバイトは従来の ByteViewer に表示されます。「Reset」 ボタンを押せば元の値に戻るので心配いりません。

パッチ適用済みバイトの適用

変更を加えた場合は、変更したバイトをエミュレータに通知してください(スタックは自動的に更新されるため、その必要はありません)。変更後、対象を選択し(緑色になります)、このオプションを押すか、ホットキー「M」を使用してください。

GhidraEmu apply patched bytes

コンソール

プラグインはここに出力情報を表示します。たとえば、次のようなエミュレーションエラーメッセージです:

GhidraEmu console

新機能 - Jump Over

「Jump Over」機能を使うと、何らかの理由で現在の命令をエミュレートしたくない場合に、1命令先へジャンプできます。未初期化メモリの読み取りが検出されるとエミュレーションプロセスが中止されるため、この機能を使えばそれを回避できます。例を見てみましょう。多くの x86_64 プログラムの最初の方にある命令の1つ、canary スタック保存です:

MOV RAX, qword ptr FS:[0x28]

ここでは少しずるをして、PC 値を増やしてこの命令を飛ばしてみます。これを行うには、エミュレートしたくない命令で停止し、J ホットキーを押します。そうしないと、さらにステップ実行したときに未初期化メモリの読み取りエラーが発生します。

Jump Over

新機能 - Step Over

サブルーチン(内部コール)に進む命令で停止し、次の命令まで全部エミュレートしたい場合(いわゆる「ステップオーバー」)、F6 ホットキーを押せば確実に実行されます:

Step Over

始める前に

考慮すべきいくつかの重要なポイント:

  • Ghidra でプログラムの解析を忘れないでください。エミュレータはそれに依存しています。
  • 前述のとおり、エキゾチックなプロセッサ/VM を使用している場合はリンクレジスタを設定してください。
  • バイナリのプロセッサが仕様に従って特定のメモリセグメントを必要とする場合は、Ghidra の MemoryMap ウィンドウでそれらを作成し、ゼロで初期化することを忘れないでください。そうしないと、読み取り/書き込み操作中にエミュレータが不明なメモリ空間についてエラーを出し、エミュレーションプロセスが停止します。メモリブロックは存在するがゼロで初期化されておらず、エミュレータが必要とする場合、プラグインはエミュレーションが続行されるように初期化を試みます。
  • ByteViewer でバイトを変更した場合、プラグインはエミュレーション状態のリセット時にそれらを元の値に復元しません。
  • Ghidra でプロジェクトを閉じる前に、「Reset」ボタンを押して、まだ行われていない場合は最後のエミュレーションの状態をリセットしてください。これは重要です。閉じる時点で、Listing 内のトレース済み命令の再描画トランザクションと、エミュレーション後のプログラムバイト復元トランザクションが実行されないためです。これにより、最も軽微な問題である「古い黄色いオウム」が表示されるだけでなく、変更されたバイトが元の値に戻らずそのまま残る可能性もあります(もちろん、プロジェクトを Ghidra でロールバックしない限り)。

インストール

  1. gradle を使用して拡張機能をビルドします: GHIDRA_INSTALL_DIR=${GHIDRA_HOME} gradle 次に Ghidra を使用してインストールします: File → Install Extensions...

  2. CodeBrowser で File → Configure → Miscellaneous に移動し、GhidraEmu プラグインのチェックボックスを選択します。

フィードバック

プラグインの使用中にバグに遭遇した場合や、改善のアイデアはありますか? 遠慮なく新しい issue を開いてください。対応します。

今後の予定

EmulatorHelper の制限により、あるプログラム空間を別のプログラム空間で使用することはできません。そのため、たとえば外部の共有ライブラリはプログラムのメモリ空間を知ることができず、その逆も同様です。つまり、1つのメモリ空間を持つ1つのプロセスとしてエミュレートすることはできません。ここで何か見落としている点があれば教えてください。

ツールをダウンロード