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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
retrokit — 32ビットDOSおよびWin32ゲーム(1993年~2010年)のリバースエンジニアリング向けHeadless-Ghidraツールキット:独自のLE/LXローダー、Watcom呼び出し規約、ライブラリシグネチャ、MCPサーバー | Kitploit
ツール/GitHubGitHub/nautilusbits/retrokit
静的分析リバースエンジニアリングスクリプトと自動化マルウェア分析ユーティリティとフレームワークバイナリ解析AI支援リバースエンジニアリング
GitHubnautilusbits/retrokit

retrokit

32ビットDOSおよびWin32ゲーム(1993年~2010年)のリバースエンジニアリング向けHeadless-Ghidraツールキット:独自のLE/LXローダー、Watcom呼び出し規約、ライブラリシグネチャ、MCPサーバー

リポジトリを見る
382348日前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

retro-kit – 旧ゲームのリバースエンジニアリング(ヘッドレス Ghidra)

Ghidra単体 vs retro-kit: COM vtable経由のDirectDraw呼び出し

ヘッドレス Ghidra を使って、おおよそ 1993~2010 年の 32 ビットゲームを逆コンパイルするためのツールキット:

  • DOS LE/LX(DOS/4GW、DOS/32A、PMODE/W、CauseWay、DOS/4G bind、さらに OS/2 LX と VxD) Watcom C/C++ でビルドされたもの – Ghidra 用の独自 LE/LX ローダーと、両方の呼び出し規約に対応した Watcom コンパイラスペックを備える。
  • Win32 PE(典型的には MSVC):COM vtable 経由の DirectX 呼び出しをメソッド名付きで表示し、 Miles/Smacker/Bink/FMOD/BASS のインポートを型付けし、MSVC RTTI から C++ クラスを、 Rich ヘッダーからコンパイラバージョンを取得する。

出力は、すべての関数を格納した 1 つの大きな .c ファイルと、インデックス群 (関数、コールグラフ、文字列、fixup/ポインタテーブル、インポート)を含むワークスペースで、 これらを grep したり、人や AI エージェント間で分割したりできる。解析中に見つかった名前は Ghidra に戻され、エクスポートが再生成される。

インストール

前提条件:Ghidra 12.x (展開済み)、JDK 21+(JAVA_HOME)、Python 3.10+。

pipx install git+https://github.com/nemo22/retrokit   # or from a checkout: pip install .  (or python -m retrokit)
retrokit doctor                                    # checks Python, Ghidra, Java, loader, cspecs
retrokit install-loader                            # once per Ghidra install (DOS LE/LX only)

Ghidra は --ghidra DIR、$GHIDRA_INSTALL_DIR、またはゲームやキットの隣にある ghidra/ghidra_* ディレクトリから検出されます。install-loader はその Ghidra に対して javac でローダーをコンパイルし(Gradle は使用しません)、Ghidra/Extensions にインストールして Watcom コンパイラスペックを登録します。Ghidra を更新した後は再度実行してください(doctor がそのタイミングを教えてくれます)。

使用方法

retrokit info GAME.EXE              # format, DOS extender, compiler, calling convention
retrokit analyze GAME.EXE           # full pipeline -> GAME_analysis/  (-o DIR to choose)
retrokit show GAME_analysis FUN_00012345 main
retrokit tables GAME_analysis       # function-pointer and string tables (from fixups)
retrokit names GAME_analysis        # apply notes/names_*.csv, re-export
retrokit reexport GAME_analysis     # re-run the fix-up passes + export without re-importing

analyze はフォーマット、ローダー、そして Watcom の場合は呼び出し規約を検出し(--cspec watcom|watcomreg で上書き可能)、それらを GAME_analysis/retrokit.json に保存します。以降のコマンドはワークスペースのみを必要とします。ワークスペースは次のとおりです:

GAME_analysis/
  retrokit.json        how the binary was analysed
  decomp/              <exe>_decompiled.c, functions.csv (addr,name,size,callers,callees,cc,signature),
                       calls.txt, strings.txt, data_symbols.txt, memory_blocks.txt,
                       fixups.txt (source -> target of every pointer: the key to pointer tables
                       and to which function uses which string), imports.txt (PE)
  notes/               findings, names_<topic>.csv proposals
  ghidra_project/      the Ghidra project (open it in the Ghidra GUI too)
  logs/

AIエージェント: retrokit mcp GAME_analysis はワークスペース上で動作する MCP サーバー(stdio、追加パッケージ不要)であり、関数、逆コンパイルされたコード、コールグラフ、クロスリファレンス、文字列、ポインタテーブル、逆アセンブリとバイト列、ライブラリを扱います。名前の提案とメモを記録し、(リクエストに応じてバックグラウンドで)適用された名前で再エクスポートできます。Claude Code:

claude mcp add retrokit -- retrokit mcp /path/to/GAME_analysis

他のクライアント向けのセットアップ、すべてのツール、エージェントの動作方法については docs/MCP.md を参照してください。エージェント向けの短縮版は AGENTS.md にあります。

名前: 提案は notes/names_<topic>.csv に書き込みます(addr,name,confidence,comment、confidence は V が検証済み、G が推測)。retrokit names WS は関数/ラベルをリネームし(V が G より優先され、衝突には _<addr> が付与されます)、再エクスポートします。

パイプラインの処理内容:

  • ライブラリ(両フォーマット): retrokit libs(info と analyze の一部でもあり、notes/libraries.md に出力)は、当時の約20のライブラリ - Miles/AIL、HMI SOS、DIGPAK、Smacker、Bink、FMOD、BASS、DirectX、zlib、libjpeg、libpng、PKWARE DCL、Lua など - を文字列、インポート、データファイルから認識し、バージョン、それらのフォーマットに関する注記、移植のヒントを提供します。 ライブラリコードはシグネチャによって検出されます(同梱: Watcom C/C++ ランタイム、Open Watcom の数学および C++ ライブラリ、zlib 1.0.4-1.2.3、libjpeg 6b。retrokit sigs build は所有するライブラリから、sigs learn は特定した関数からシグネチャを作成します)- まず完全一致、次に他のコンパイラバージョンの類似コード - が命名され、retrokit/knowledge/*.h から型付けされます。
  • LE/LX: LE ローダーと Watcom cspec でインポートし、コードへの fixup のターゲットにある関数(Watcom のゲームはロジックの多くをポインタテーブル経由で呼び出します)、switch ジャンプテーブルは関数内に保持され、誤った「no return」フラグは取り消され、短い文字列は定義され文字列リテラルは "text" として表示され、パラメータ数は呼び出し箇所の ADD ESP,n クリーンアップから取得され、プロトタイプは被呼び出し側から先に復元され、エクスポートされます。
  • PE: Ghidra の PE ローダーと自動解析でインポートし、次にポインタテーブルのターゲットにある関数と、新しいものが見つからなくなるまでパディング後の関数を対象に、同じ文字列 / パラメータ / プロトタイプのパスを実行し、エクスポートします。

その他のコマンド: classes(RTTI からの MSVC C++ クラス)、libs(使用中のライブラリ)、convert(XMIDI/HMI/HMP -> MIDI、VOC -> WAV、Smacker/Bink/FLIC -> MP4、内容に基づく)、sigs match|build|learn(ライブラリシグネチャ、docs/WORKFLOW.md を参照)、entries(PE: 関数のないコードアドレス)、modules --rules FILE(PE: assert パス経由で関数 → 元のソースファイル)、strings EXE OUT(Ghidra なしでの PE 文字列インベントリ)、match(関連する EXE への名前の転送: 続編、アドオン、他のバージョン)、le EXE info|dump|rec|s16|s32(Ghidra アドレスで LE からテーブルを読み取る)、rnc(RNC ProPack)、flic info|png|video(Autodesk FLI/FLC)。オプションについては retrokit COMMAND --help を参照してください。

詳細な手順、予想されること、既知の落とし穴は docs/WORKFLOW.md に、MCP サーバーは docs/MCP.md に、AI エージェント向けのタスクテンプレートは docs/AGENT_PROMPTS.md に、予定されている作業は docs/ROADMAP.md に、メンテナンスとリリースは docs/MAINTAINING.md にあります。

レイアウト

retrokit/               Python package (CLI: retrokit/cli.py)
  ghidra_scripts/       headless Ghidra scripts used by the pipelines
  tools/                standalone Python tools behind the CLI commands
  le-loader/            LE/LX loader for Ghidra (Java) + Watcom compiler specs (data/languages/)
  sigs/                 library signatures (Open Watcom C run-time)
  knowledge/            libraries.json (library catalog), library prototypes as C headers
scripts/                build_sigs.py: rebuilds the shipped signatures
tests/                  synthetic test programs, scoring against the linker map, baseline
docs/                   WORKFLOW, AGENT_PROMPTS, ROADMAP
Ghidra スクリプト目的
CreateFunctionsFromFixups.javaLE: 32ビットfixupのターゲットをコード内の関数に変換; コード内のswitchテーブル
CreateFunctionsAtEntries.java指定アドレス(リストまたは@file)の関数、オプションでコードギャップ内のfixupまたはプロローグから
FixTruncatedCallers.java呼び出し元を切り捨てる誤った「no return」をクリア
FixAnalysis.java手動修正: noreturn:ADDR、func:ADDR
MarkStringsConstant.java短い文字列を定義し、書き込み可能データ内の文字列をconstantとしてマーク(逆コンパイル時のリテラル)
ApplyLibraryPrototypes.java名前付きライブラリ関数の文書化されたプロトタイプ(knowledge/*.h)、タグLIBRARY
ApplyStackConvention.java呼び出し箇所のADD ESP,nからパラメータ数 / __cdecl / 可変長引数を、RET nから__stdcallを取得
RecoverPrototypes.java逆コンパイラからプロトタイプを取得、コールグラフのレベルごとにボトムアップ
ApplyNames.javanames_*.csvから名前を適用
ExportDecompiled.java.c + functions.csv、calls.txt、strings.txtなどをエクスポート
DumpFixups.javaLE fixup / PEベースリロケーション → fixups.txt
DumpImports.javaPEインポートとIATスロット → imports.txt
DumpFunctions.java関数リストのみ(PEエントリパスの間)
DumpDisasm.java関数の逆アセンブリを標準出力へ
EnableDeepAnalysis.java低速なアナライザを有効化(推奨されません、WORKFLOWを参照)

テスト

tests/はOpen Watcomで小さな合成プログラムをビルドし(開発/CI専用の依存関係: DOS/4GW、DOS/32A、PMODE/W、DOS/4Gバインド、OS/2 LX、Win32、スタックおよびレジスタ規約)、各イメージの独立したPythonモデルに対してローダを検証し、それらに対してretrokit analyzeを実行し、リンカマップと照合して結果を採点します(関数アドレス、パラメータ数、呼び出し引数、文字列リテラル、切り捨てられた関数、逆コンパイラのノイズ)。tests/README.mdを参照してください。

コントリビューション

GitHubでIssueとプルリクエストを歓迎します。主要リポジトリは別の場所で管理されGitHubにミラーリングされているため、プルリクエストはそこでマージされ、ミラーが同期されるとGitHub上でマージ済みとして表示されます(docs/MAINTAINING.md)。ゲームファイルや逆コンパイルされたゲームコードを添付しないでください。代わりにバイナリを説明し(フォーマット、エクステンダ、コンパイラ、何が問題になるか)、可能であればtests/にあるようなOpen Watcomでビルドした小さなプログラムで再現してください。

開発方法

retro-kitはClaude Codeを通じてClaude(Anthropic)で開発されています。コードとドキュメントの大部分はメンテナの指示の下でClaudeによって書かれ、メンテナがスコープと設計を定め、WindowsとLinuxでテストし、各リリースに含める内容を決定します。コミットにはClaudeが共同作成者として記載されます。品質はtests/のテストコーパスで追跡されます。合成プログラムをリンカマップと照合して採点し、ベースラインはWindowsとLinuxのCIでチェックされます。

ライセンス

ツールをダウンロード