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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
UnBattletech — BattleTech: The Crescent Hawk's Inception リバースエンジニアリング | Kitploit
ツール/GitHubGitHub/velteyn/unbattletech
静的分析リバースエンジニアリングデバッガバイナリ解析学習と教育ファームウェア解析
GitHubvelteyn/unbattletech

UnBattletech

BattleTech: The Crescent Hawk's Inception リバースエンジニアリング

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

人気

すべて見る →

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

すべてのツールを探索

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

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

UnBattletech

BattleTech: The Crescent Hawk's Inception(1988年、MS-DOS、Infocom発売、エンジンは Westwood Associates)のリバースエンジニアリング — および進行中の Godot 4 / C# による再構築。

このリポジトリの他の内容を信じる前に、このセクションを読んでください。 このプロジェクトは成熟度が大きく異なる2つの取り組みであり、ドキュメント内の他の場所で使われる「フェーズ」という語はコードが書かれたことを意味し、動作が証明されたことを意味しません。


1. 並行して構築される2つの成果物

このプロジェクトは同時に2つの成果物を生み出し、2つ目は1つ目の上に成り立っています:

(1) 文書化されたリバースエンジニアリング。 reko/ の逆コンパイル、docs/ の仕様、BattleTech 固有の MCP ツールを備えた Spice86 エミュレータ、および Python ツール群。これが本当の RE 作業です:ファイルフォーマット、ストーリーテキスト、メモリマップ、そしてエンジンロジックの大部分が文書化され、逆コンパイラ出力とライブのエミュレータトレースに対して相互検証されています。これはそれ自体が成果物であり、同時に (2) の仕様でもあります。

(2) 再構築 (BattleTechCHI/)。 (1) から派生する Godot 4 C# プログラム:オリジナルのデータファイル(.BLD、.MTP、.ANM、GAME* セーブ)を読み込み、(1) で文書化された通りにエンジンの動作を再実装します。これはデータに忠実であり、動作に忠実ではなく、オリジナルに対してエンドツーエンドで検証されたことはありません。

両者は並行して動作しますが、依存の方向は固定されています:

(2) は (1) が完全かつ検証済みであるのと同じ程度にしか忠実になれない。 (1) が推測または未解決と述べている箇所では、(2) は当て推量です。

だからこそロードマップでは、RE のギャップを埋めること(トラック1)と (2) のエミュレータに対する差分検証(トラック3) を機能作業より前に置いています。再構築は、それを支えるリバースエンジニアリングと同じ良さしか持ちません。

ビット単位で正確な移植を探しているなら、それはまだ存在しません。ツール支援の RE 環境と、オリジナルアセット上で動作するデータ駆動の再構築を探しているなら、それがここにあります。


2. 正直なステータスマトリクス

凡例:✅ 真 / 完了 · ⚠️ 部分的、近似的、または暗黙のギャップあり · ❓ 不明 / 未検証 · ❌ 欠如

システム実行時にオリジナルファイルを読む動作がオリジナルと一致検証
BLD 復号 + 暗号文✅ BldLoader.cs✅(テキスト)✅ BLD↔JSON のラウンドトリップがバイト単位で一致(tools/bld)
BLD オペコードインタプリタ(28スロット 0xE4–0xFF)✅⚠️ 部分的❓ エンドツーエンドでプレイされたことはない;オペランドサイズは固定(EB/EC/F6/F7);全スロットを処理(暗黙のドロップなし)
Fn1CD3 ディスパッチ(47ケース)✅⚠️ 部分的❓ 逆コンパイルから実装;いくつかのケースは近似
MTP マップヘッダ/タイル✅ MapLoader.cs / LocalMapView.cs✅(構造)⚠️ レイアウトはデコード済み、フレーム単位の差分は未実施
ANM アニメーション(XOR 差分 RLE)✅ 実行時、PNG フォールバック⚠️❓;リポジトリに ANM スプライトシートなし(Assets/Animations/ は空)
ICN/CMP タイル❌(事前変換済み)—TileManager は BMP を読み込む;Assets/Tilesets/ は空
セーブファイル GAME1–6(4096 B)✅ パーサー SaveManager.cs❓❌ オリジナルセーブに対するラウンドトリップは未検証
ストーリー状態(b0057、プロパティ)✅(読み取り)❓ 意味は推測❓ 意味はプレイで確認されていない
戦闘(命中判定、ダメージ、AI、熱、弾薬、霧)—(独自ロジック)❌ 近似❌ RNG/数式はオリジナルに対して一度も差分検証されていない
ビューポート / 画面レイアウト—⚠️ 近似❓ 正規のビューポート構造体は未特定
サウンド / 音楽❌❌❌ フォーマット未デコード
マップ→BLD トリガーマッピング⚠️ 部分的❓タイルプロパティテーブル + [0x5460]:0x4602 変換は未デコード

再構築が今日できること

  • タイトル/起動シーケンスと、ローカルマップ + ワールドマップビューを起動する。
  • 実際の .BLD スクリプトを読み込んで復号し、解釈する(ダイアログ、メニュー、ショップ、多くのディスパッチケース)— 未実装のオペコードには暗黙のギャップあり。
  • 実際の .MTP マップを解析し、実際の 4096 バイトのセーブレイアウトを読み書きする。
  • ゼロから作った戦術戦闘ループ(独自の RNG/LoS/命中判定/ダメージ/AI)を実行する。

正直に主張できないこと

  • オリジナルの動作を再現していること。戦闘、ビューポートレンダリング、ストーリー状態機械の一部は再構築であり、検証済みの移植ではありません。
  • 視覚的に自己完結していること:タイルセット、アニメーション、フォントはリポジトリにありません(変換済みマップ PNG 15枚とメックスプライト PNG 44枚のみ)。

3. 本当に RE されたもの(そしてその場所)

領域状態正規ドキュメント
BLD フォーマット、暗号、オペコード🟢 堅実docs/formats/bld-bytecode.md
ストーリーテキスト(全26 BLD)🟢 抽出済みdocs/story/STORY_TEXT.txt
メモリマップ(100以上のアドレス、セグメント)🟢 堅実docs/formats/memory-map.md
ワールドマップ / ローカルマップ🟢 堅実docs/world-map.md
戦闘モデル🟡 約90%、一部推測docs/combat-system.md
経済 / ショップ / 在庫🟡 UI フローはライブで観察済みdocs/story/story-system.md
ANM フォーマット🟢 文書化済みdocs/formats/anm-format.md
ビューポート抽象化🔴 不完全docs/engine/viewport.md
サウンド🔴 0%—

4. 既知の未知(まだやるべき RE)

これらが本当のブロッカーであり、§6 のロードマップはこれらに依存しています。

  1. バイト単位で正確な戦闘。 RNG、イニシアチブ/ターン順、命中修正、命中部位テーブル、クラスター解決、熱、弾薬爆発、AI のターゲット選択 — 現在は逆アセンブリに着想を得ているだけで、一度も差分検証されていない。(docs/combat-system.md)
  2. 未逆コンパイルのセグメント。 セグメント 19EF / 1000 の戦闘/移動コードが Reko 出力から欠落;これらのルーチンを復元する必要がある。(docs/UNVERIFIED_DISCOVERIES.md §7)
  3. ストーリー状態の意味論。 b0057(0/1/2)と隣接する b0055/b0056/b0058 は推測;プロパティ ID 0x1C–0x23 は未マッピング。(§5)
  4. マップ→BLD トリガーマッピング。 タイルプロパティテーブル(0x32C6)+ 変換テーブル([0x5460]:0x4602)が未デコード;入口は現在手作業でマップを歩いて見つけている(開始マップの Citadel (34,10)、ComStar (51,10))。(docs/context.md)
  5. ビューポートモデル。 正規のビューポート構造体が見つかっていない;セグメント 0x246C の設定構造体は部分的にしかマッピングされておらず;push/pop の意味論は不明。(docs/engine/viewport.md)
  6. タイルプロパティ / 衝突。 どのビットが水/壁を意味するか;移動のためにどのルーチンが 0x32C6 を読むか。(§2)
  7. セーブフォーマットのラウンドトリップ。 パーサーは存在する;実際の GAME* のロード→セーブ→比較は行われていない。
  8. 士官候補生の経済と日サイクル。 手当のティック、停止閾値、兵舎の睡眠、日次ミッションのゲート — メカニクスは観察済みだが、コードは未特定。(docs/story/story-system.md)
  9. BLD オペコードのギャップ。 26ファイル全体で実際にどのオペコードが出現するか、そしてインタプリタがどれを暗黙にスキップするか。(BldInterpreter.cs のデフォルト分岐)
  10. サウンド/音楽フォーマット。 完全に未デコード。
  11. ワールドマップデータの場所。 タイル/マップデータがどこから読み込まれるか(セグメント 2A02 か他の場所か)。(§1)

5. レトロ考古学(バイナリの外側)

実行ファイルだけからの RE には限界があります(コンパイラ最適化されたコード、欠落セグメント、推測された意味論)。ゲームに実際に何が入っているかを理解するために、私たちはいくつかの種類の情報源を相互検証します — どれもバイナリを置き換えることはできませんが、合わせることで意図を解明しギャップを埋めます:

  • オリジナル文書 — マニュアル、手がかり/ヒント本、1988–89年の雑誌レビュー(設計意図、用語、意図された UI)。まだ入手していない — 考古学タスク。
  • 個人的なプレイテスト — 著者自身のセッション:プレイヤーが実際に観察するもの、そしてエミュレータで検証すべき仮説の最良の生成源。
  • 公開された攻略記事 — すでに使用済み:docs/walkthrough/bt-walkthrough-1..3.md(ナビゲーションとイベント順序)。
  • 同系統の Westwood エンジンタイトル — Mines of Titan(1989年、x86、すでにフィンガープリント済み:グラフィックス/テキストで25の共通関数)と、後期のビューポートエンジン(Eye of the Beholder、Kyrandia、Lands of Lore)をビューポートモデルのために。
  • 他の BattleTech CHI 移植/リリース — C64 / Apple II / Amiga(もしあれば)と後期の「Gold」エディション;異なるコンパイラは異なる構造を露呈する。
  • グラウンドトゥルースとしてのエミュレータツール — Spice86 トレース + 23の bt_* MCP ツールが、差分検証するための正確な実行時レジスタ/メモリ状態を与える。

優先順位: 動作については、バイナリ/エミュレータが勝つ;文書は意図について権威である。文書や記憶から回収されたすべての主張は、再構築に入る前に出典を明記し、バイナリに対して再検証する。完全なポリシー(情報源クラス、証拠タグ ✅/🟡/❓、および情報源→検証ワークフロー)は docs/SOURCES.md にあります。


6. 真のロードマップ(ここから忠実な Godot 再構築まで)

順序は意図的です:より多くの画面を作る前に、データパスと動作を証明する。 各ゲートは検証であり、機能ではありません。

トラック0 — 真実の維持(継続的)

  • この README、docs/rebuild/progress.md、wiki を正直に保つ;すべての主張を検証済み / 推測 / 不明とマークし、日付を付ける。
  • 検証成果物(トレース、差分、またはバイト比較)なしに新しい「✅」を付けない。

トラック1 — RE の謎を閉じる(§4、優先順)

  1. セグメント 19EF/1000(戦闘/移動)を逆コンパイル/注釈付け。 ← 2 をアンブロック
  2. 戦闘の数式/RNG をエミュレータトレースに対して差分検証(バイト単位で正確なテーブル)。 ← トラック3 をアンブロック
  3. マップ→BLD トリガーテーブルをデコードし、入口をデータ駆動にする(手作業で見つけるのではなく)。
  4. 士官候補生の経済 / 日サイクルのコードを特定する。
  5. ビューポート構造体 + w4FBC/push-pop を解決する;タイルプロパティビットを完成させる。
  6. 実際の GAME* ファイルに対してセーブのラウンドトリップを検証する。

トラック2 — データパスを忠実にする

  • TileManager は実行時に ICN/CMP をデコードすべき(事前に焼き込まれた BMP 要件なし);タイルセット/アニメーション/フォントをコミットするか再生成する、あるいは正確な抽出手順を文書化する。
  • ANM:PNG フォールバック依存を排除する;実行時デコーダを唯一の真実の源とする。
  • 実際に出現するすべての BLD オペコードを列挙して実装する;未知のものは大声で失敗させる。

トラック3 — 差分検証(欠けている要石)

  • 同じスクリプト化された入力を (a) Spice86 エミュレータと (b) Godot 再構築の両方で実行し、次を比較するハーネスを構築する:状態配列、ストーリースロット、クレジット、カーソル、ユニットスロット、戦闘グリッド、レンダリングされたフレーム。
  • 最初のターゲット:完全な訓練日(ミッション → 睡眠)、ショップ取引、1回の戦闘遭遇。
  • システムは、そのシナリオの差分が空になったときにのみ「完了」とする。

トラック4 — 機能完成(各領域でトラック3の後のみ)

  • 株式市場 UI(ディスパッチャ 0x2A/0x2B は存在;UI は保留中)。
  • 技術/BTSTATS 画面、完全な装備管理。
  • エンドゲーム:WINSCENE / ENDMECH / TINYLAND。
  • サウンド、もしトラック1がフォーマットをデコードすれば。

トラック5 — レトロ考古学(並行、トラック1に供給)

  • マニュアル / 手がかり本 / 雑誌のスキャン;同系統ゲームの関数マップ拡張。

ステップごとの詳細なチェックリストは docs/rebuild/roadmap.md にあります;フェーズ台帳は docs/rebuild/progress.md です。


7. リポジトリレイアウト

docs/                 RE documentation (canonical doc per topic: docs/INDEX.md)
reko/                 Reko decompiler output (C + asm, per segment)
tools/
  bld/                BLD decode / JSON round-trip / story extraction
  assets/             Asset extraction & rendering
  analysis/           Binary & memory-dump analysis
  playtest/           bt.py — drive the emulator via MCP + memory API
BattleTechCHI/        Godot 4 + C# recreation (~4.9k lines, ~45 scripts)
  Scripts/{Core,Data,Maps,BLD,Combat,UI}
  Assets/             15 map PNGs, 44 mech sprites, 9 screens (tilesets/ANM/fonts EMPTY)
original/             Original game files (local only, gitignored)
BattleTechMcpTools/   Spice86 override supplier + 23 bt_* MCP tools

8. 各部分の実行

ツールをダウンロード