Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
IDA-Ghidra-bridge — IDA ProおよびGhidra用のTCP JSONブリッジサーバーで、デコンパイル、クロスリファレンス、シンボル、vtable、RTTI、メモリパッチングを外部スクリプトや自動化パイプラインに公開します。 | Kitploit
ツール/GitHubGitHub/oscarsantanaarias/ida-ghidra-bridge
静的分析コード分析動的コード分析 (DAST)リバースエンジニアリングスクリプトと自動化デバッガユーティリティとフレームワークバイナリ解析AI支援リバースエンジニアリング
GitHuboscarsantanaarias/ida-ghidra-bridge

IDA-Ghidra-bridge

IDA ProおよびGhidra用のTCP JSONブリッジサーバーで、デコンパイル、クロスリファレンス、シンボル、vtable、RTTI、メモリパッチングを外部スクリプトや自動化パイプラインに公開します。

リポジトリを見る
4137日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

IDA-Ghidra-bridge

IDA Pro および Ghidra 向けの軽量 TCP JSON ブリッジサーバー。シンプルなソケットプロトコルを介してリバースエンジニアリングワークフローを公開します。

外部ツール、CLI スクリプト、Python ユーティリティ、自動化パイプラインが、手動での GUI 操作なしにデコンパイル、クロスリファレンス、シンボル、仮想テーブル、RTTI、構造体、メモリパッチを照会できるようにします。


アーキテクチャとライフサイクル

1. 動的ポートバインディングとマルチインスタンス対応

複数のバイナリを同時に開いて大規模なリバースプロジェクトに取り組む場合(例: ゲームクライアント、ランチャー、DLL プロキシ、スタブを同時に開く場合):

  • ポートが既に使用されていても、サーバーはクラッシュしません。
  • サーバーは BASE_PORT = 5073 からスキャンを開始し、空いているポートが見つかるまで連続するポート(5073、5074、5075、5076...)を自動的にプローブします。
  • 各 IDA または Ghidra ウィンドウは、競合することなく独自のポートに独立してバインドされます。

2. ホットリロードとクリーンな再実行

IDA Pro では、Python インタプリタは複数のスクリプト実行を通じて生存し続けます:

  • ID_Server.py は実行中のサーバーハンドルを builtins._ida_bridge_prev に登録します。
  • 同じ IDA インスタンスでスクリプトを再実行またはリロードすると、前のインスタンスの stop() を自動的に呼び出し、そのスレッドを join(join(3.0))して、新しいサーバーを起動する前にポートをクリーンに解放します。
  • スクリプトの再実行によって Address already in use や孤立したスレッドが発生することはありません。

3. グレースフルシャットダウン

  • ソケット経由: 接続を通じて QUIT、STOP、EXIT、または SHUTDOWN を送信します。サーバーは {"ok": true, "shutdown": true} で確認し、即座に閉じます。
  • IDA Pro 内: IDA Python CLI から直接 ida_bridge_stop() を呼び出すか、単に IDA を閉じます(デーモンスレッドは自動的に終了します)。
  • Ghidra 内: Ghidra の Script Manager で赤い Cancel ボタンをクリックするか(is_cancelled() はソケットタイムアウトを介して 1 秒ごとにチェックされます)、QUIT を送信します。

インストールとセットアップ

IDA Pro

  1. IDA Pro でターゲットデータベース(.idb / .i64)を開きます。
  2. IDA Python CLI(または File -> Script file... / Alt+F7 経由)で以下を実行します:
    import ID_Server
    
  3. サーバーは 127.0.0.1:5073(または次に利用可能なポート)でリッスンを開始します。
  4. サーバーを手動で停止するには:
    ida_bridge_stop()
    

Ghidra

  1. Ghidra CodeBrowser でターゲットプログラムを開きます。
  2. Script Manager(Window -> Script Manager)で、Ghidra_Server.py を含むフォルダを追加するか、Python インタプリタで直接実行します。
  3. サーバーは 127.0.0.1:5073(または次の空きポート)にバインドします。

完全なコマンドリファレンス(全 39 コマンド)

コマンドは TCP(127.0.0.1:<PORT>)経由で送信されるプレーンな改行区切りの文字列です。サーバーは JSON オブジェクト(またはレガシーコマンドの場合はタブ区切りテキスト)で応答します。

1. ナビゲーションと検査

コマンド構文説明
PINGPINGヘルスチェック。"pong" を返します。
CURRENTCURRENT現在のカーソルアドレス、関数名、サイズ、アセンブリ命令、デコンパイルされたコードを返します。
NAMENAME <ea><ea> で定義されたシンボル/関数名を返します。
FUNCFUNC <addr>完全な関数メタデータ、エントリポイント、サイズ、シグネチャ、アセンブリ、Hex-Rays/Ghidra デコンパイルを返します。
DECOMPDECOMP <addr>FUNC のエイリアス。ターゲット関数をデコンパイルします。
DISASMDISASM <ea> [n]<ea> から始まる [n] 命令の逆アセンブリ行を返します(デフォルト: 40)。
FINDFIND <substr><substr> に一致するすべてのシンボルと関数名を大文字小文字を区別せずに検索します(最大 300 件)。
EXPORTEXPORT [path]すべての非ダミーシンボル、マングル名とデマングル名をテキストファイルにエクスポートします(デフォルト: C:\Contexto\ida_names.txt)。
HELPHELPサーバーがサポートするすべての利用可能なコマンドの JSON リストを返します。
QUITQUITクライアント接続をグレースフルに閉じ、ブリッジサーバーソケットを停止します。

2. クロスリファレンスとコールグラフ

コマンド構文説明
XREFXREF <addr><addr> を対象とするすべての受信クロスリファレンス(コード呼び出し、データ読み取り/書き込み)をリストします。
XFROMXFROM <addr><addr> から発信されるすべての送信クロスリファレンスをリストします。
CALLERSCALLERS <addr>受信リファレンスをフィルタリングして呼び出しサイトのみを返します(解決された間接呼び出しを含む)。
READERSREADERS <addr>受信リファレンスをフィルタリングして <addr> から読み取る命令のみを返します。
WRITERSWRITERS <addr>受信リファレンスをフィルタリングして <addr> に書き込む命令のみを返します。
DECOMP_XREFDECOMP_XREF <addr><addr> のすべての呼び出し関数を単一のリクエストで一括デコンパイルします。
IMPORTXREFIMPORTXREF <name>インポートされた Windows/C API のバイナリ全体にわたるすべての呼び出しサイトを特定します(例: IMPORTXREF WSASendTo)。
TRACETRACE <addr><addr> 周辺の実行フローと基本ブロックをトレースします。

3. ポインタ、メモリ、構造体

コマンド構文説明
READPTRREADPTR <addr> [count]メモリをポインタチェーン(32 ビットまたは 64 ビット)として読み取り、各ターゲットを分類します(func、string、vtable)。
FINDPTRFINDPTR <addr>グローバルデータとテーブルをスキャンして <addr> を参照するポインタを検索します(vtable、ディスパッチテーブルを発見)。
STRUCTSTRUCT <addr> [n]連続するメモリをヒューリスティックにダンプし、フィールドを int、float、ポインタ、文字列として解釈します。
DEFSTRUCTDEFSTRUCT <name> [size]データベースの型ライブラリに新しい名前付き構造体を作成します。
SETFIELDSETFIELD <struct> <off> <type> [name]<off> の構造体フィールドを <type> とオプションのフィールド名で定義または変更します。
MKPTRSMKPTRS <addr> [count]生のデータベースバイトを型付きポインタに一括変換します。
NEARSTRNEARSTR <addr>範囲内のコードまたはデータセクションで近くにある文字列参照を検索します。

4. 仮想テーブルと RTTI

コマンド構文説明
VTABLEVTABLE <funcaddr><funcaddr> を含む仮想テーブルを特定し、隣接するメソッドスロットも含めます。
VTDUMPVTDUMP <addr> [count]仮想テーブル全体をダンプします: 各スロットをそのメソッド名、オフセット、インデックスに解決します。
RTTIRTTI <addr|Name>MSVC C++ RTTI 構造(TypeDescriptor -> CompleteObjectLocator -> vftable)を走査して、クラス階層と基底クラスを解決します。

5. 文字列とバイトのスキャン

コマンド構文説明
STRSTR <ascii>すべてのロードされたセグメントにわたって ASCII 文字列を検索します。
WSTRWSTR <utf16>すべてのロードされたセグメントにわたって UTF-16 ワイド文字列を検索します。
BYTESBYTES <hex>生のオペコードまたはデータバイトシーケンスを検索します(例: BYTES 55 8B EC 83 EC)。

6. データベースの変更と型付け

コマンド構文説明
RENAME_FUNCRENAME_FUNC <addr> <name><addr> の関数を <name> に名前変更します。
RENAME_SYMBOLRENAME_SYMBOL <addr> <name>グローバルデータシンボルまたは変数を名前変更します。
RENAME_LABELRENAME_LABEL <addr> <name>コードラベルまたはジャンプターゲットを名前変更します。
RENAME_LOCALRENAME_LOCAL <func> <old> <new>デコンパイラビュー内のローカル変数を名前変更します。
RETYPERETYPE <func> <var> <type>デコンパイラ内の変数またはパラメータのデータ型を変更します(例: RETYPE 00401000 a1 Player*)。
SETCONVSETCONV <func> <convention>呼び出し規約を設定します(__cdecl、__stdcall、__fastcall、__thiscall)。
MAKEFUNCMAKEFUNC <addr><addr> に関数境界の作成を強制します。
PATCHPATCH <addr> <hex>データベース内のバイトを直接上書きします(例: PATCH 00401234 90 90)。
PCODEPCODE <addr>深いコンパイラ分析のために Hex-Rays Microcode または Ghidra P-Code 中間表現をダンプします。

Python クライアントの例

import socket
import json

class BridgeClient:
    def __init__(self, host="127.0.0.1", port=5073):
        self.host = host
        self.port = port

    def send(self, cmd: str) -> dict:
        s = socket.socket()
        s.connect((self.host, self.port))
        s.sendall((cmd + "\n").encode("utf-8"))
        
        chunks = []
        while True:
            chunk = s.recv(16384)
            if not chunk:
                break
            chunks.append(chunk)
            if b"\n" in chunk:
                break
        s.close()
        
        raw = b"".join(chunks).decode("utf-8", errors="ignore").strip()
        try:
            return json.loads(raw)
        except json.JSONDecodeError:
            return {"raw": raw}

# Example usage:
client = BridgeClient(port=5074)

# Decompile target function
res = client.send("FUNC 007B11C0")
if res.get("ok"):
    print("Function Name:", res.get("function_name"))
    print(res["code"][:300])

# Trace incoming callers
callers = client.send("CALLERS 007B11C0")
print("Total callers:", callers.get("count"))

ライセンス

MIT

ツールをダウンロード