
オープンソースのAIリバースエンジニアリングエージェント。GhidraとLLMを使用して、バイナリからC/C++関数を再構築・検証します。
自律リバースエンジニアリングエージェント — ソース認識型リバーサー/チェッカーループ、客観検証器、パリティエンジン、Ghidra バックエンド。
デモ: YouTube
re-agent は、リバーサー/チェッカーループと Ghidra 逆コンパイルを ghidra-ai-bridge で組み合わせることで、リバースエンジニアリングワークフローを自動化します。現在のパイプラインはまた、生成中に近隣のプロジェクトソースコンテキストを取得し、チェッカーパスを受け入れる前に保守的な構造検証器を実行します。
re-agent reverse --class CTrain
│
├── Config (re-agent.yaml + env + CLI)
│ └── project_profile (stub_markers, hook_patterns, source_layout)
│
├── Orchestrator (single / class runner)
│ ├── Function Picker (ranks by caller count, filters completed)
│ ├── Context Gatherer (decompile + xrefs + structs + source retrieval)
│ │
│ ├── Agent Loop (reverser → checker → fix, max N rounds)
│ │ ├── LLM Providers: Claude | OpenAI-compatible APIs | Codex CLI
│ │ └── Prompt Templates (customizable .md files)
│ │
│ ├── Objective Verifier (call-count + control-flow sanity checks)
│ │
│ ├── Parity Engine (GREEN/YELLOW/RED verification gate)
│ │ ├── Source Indexer (C++ body parser)
│ │ ├── 11 Heuristic Signals (all configurable/toggleable)
│ │ └── Semantic Rules + Manual Approvals
│ │
│ └── Session State (JSON progress file)
│
└── RE Backend: ghidra-ai-bridge
└── Capability flags → graceful degradation
re-agent reverse を実行する前に Ghidra プロジェクトに指定してください。ANTHROPIC_API_KEYOPENAI_API_KEYcodex CLI ログインpip install auto-re-agent
# 1. プロジェクト設定の初期化
re-agent init
# 2. re-agent.yaml を編集してプロジェクト設定を行う
# 3. 単一の関数をリバース
re-agent reverse --address 0x6F86A0
# 4. クラス内のすべての関数をリバース
re-agent reverse --class CTrain --max-functions 10
# 5. パリティチェックを実行
re-agent parity --address 0x6F86A0
# 6. 進行状況を確認
re-agent status
re-agent は階層型設定システムを使用します(優先順位が高い順):CLI フラグ > 環境変数 (RE_AGENT_*) > re-agent.yaml > デフォルト値。
llm:
provider: claude # claude | openai | openai-compat | codex
model: claude-sonnet-4-5-20250929
# api_key: set via RE_AGENT_LLM_API_KEY env var
timeout_s: 1800
backend:
type: ghidra-bridge
cli_path: ~/ghidra-tools/ghidra
orchestrator:
max_review_rounds: 4
max_functions_per_class: 10
objective_verifier_enabled: true
project_profile:
source_root: ./source/game_sa
hook_patterns:
- 'RH_ScopedInstall\s*\(\s*(\w+)\s*,\s*(0x[0-9A-Fa-f]+)'
stub_markers: ["NOTSA_UNREACHABLE"]
stub_call_prefix: "plugin::Call"
すべてのオプションについては docs/configuration.md を参照してください。
ANTHROPIC_API_KEY を設定OPENAI_API_KEY を設定、必要に応じて base_url を設定codex exec を ChatGPT ログイン認証情報で使用。API キーは不要パリティエンジンは、リバースされたコードが元のバイナリと一致するかを検証するために、11 の設定可能なヒューリスティックシグナルを実行します。
リバースループはまた、LLM チェッカーパスの後に保守的な構造検証器を実行します。次のような強い不一致がある場合のみ受け入れをブロックします:
これは意図的に完全な等価性チェックよりも狭い範囲ですが、成功したリバースとして記録される前に明らかな偽陽性をキャッチします。
これは実際には重要です。なぜなら LLM チェッカーは、バイナリからの実際のブランチや呼び出し構造を見逃しながら、もっともらしいコードに対して偽陽性を出す可能性があるからです。
git clone https://github.com/dryxio/auto-re-agent.git
cd auto-re-agent
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest tests/
ruff check src/
mypy src/re_agent/
MIT
| コマンド | 説明 |
|---|
re-agent init | re-agent.yaml 設定ファイルを生成 |
re-agent reverse --address ADDR | 単一の関数をリバース |
re-agent reverse --class CLASS | クラス内のすべての関数をリバース |
re-agent reverse --dry-run | リバースされる内容を表示 |
re-agent parity --address ADDR | 関数でパリティチェックを実行 |
re-agent parity --filter REGEX | パターンに一致するパリティチェックを実行 |
re-agent status | リバースの進行状況を表示 |
re-agent status --class CLASS | 特定のクラスの進行状況を表示 |
| シグナル | レベル | 説明 |
|---|
| Missing source | RED | フックされた関数のソース本文が見つからない |
| Stub markers | RED | ソースにスタブマーカー(例:NOTSA_UNREACHABLE)が含まれている |
| Trivial stub | RED | プラグインコールが多く、本文が小さく、制御フローがない |
| Large ASM tiny source | RED | ASM が 80 命令以上だがソースが 12 行以下 |
| Plugin-call heavy | YELLOW | プラグインコールが関数本文を支配している |
| Short body | YELLOW | 本文が 6 行未満 |
| Low call count | YELLOW | 逆コンパイルは多くの呼び出し先を示すがソースには少ない |
| FP sensitivity | YELLOW | ASM に浮動小数点演算があるがソースにはない |
| Call count mismatch | YELLOW | ソースの呼び出し数が ASM と大きく異なる |
| NaN logic | YELLOW | 逆コンパイルに NaN 処理があるがソースにはない |
| Inline wrapper | INFO | 関数は薄いインラインラッパーである |