mirror of
https://github.com/qtmleap/revkit.git
synced 2026-10-04 17:01:51 +02:00
KANADE (Frontwing/KrkrZ) のセリフテキスト抽出に向けた一連の作業を記録。 達成: - SteamStub DRM 剥がし、Goldberg Steam Emu 設置、PackinOne アンチタンパー パッチで起動シーケンスは大幅に進む状態に - Frontwing 独自 PSB v6+ フォーマット (c1a2 magic + TLV tree) を解明、 Python パーサ (tools/re/parse_psb_tree.py) を実装 - PSB 141 個を JSON 展開 → 全部 UI orchestration スクリプトで日本語ゼロ と確定 未解決: - KANADE 起動: PackinOne の System.addFont 登録が KrkrZ の load order 問題でブロック。XP3 内 TJS 改変も TJS パーサに弾かれて頓挫 - シナリオ所在: PSB ではなく Frontwing 独自スクランブル + KAG/TJS バイトコード化されている可能性大 次回の手掛かりは docs/instructions/kanade_progress.md にまとめた。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6.0 KiB
6.0 KiB
KANADE 解析: 進捗サマリ (2026-05-08 時点)
Frontwing 製 KrkrZ ベース ADV ゲーム「KANADE」(Steam App ID 3104270) の セリフテキスト抽出を目的とした解析の中間まとめ。
達成項目
1. SteamStub DRM 剥がし
- ツール:
tools/steamless/(Steamless v3.1.0.5、Mono 経由で実行) - バリアント: SteamStub Variant 3.1 (x86)
- 結果:
KANADE.exe(4,603,392 bytes、.bind削除済 6 セクション) - バックアップ:
KANADE.exe.bak/KANADE.exe.original(元 4,789,712 bytes)
2. PE 整合性修正
- セクション名
\xaa痕跡を\x00に正規化 (.text/.data/.rsrc) .adataセクション属性を CODE (0x60000020) → DATA-RO (0x40000040) に修正
3. Steam ライセンス回避
steam_api.dllを Goldberg gbe_fork (tools/gbe/) のregular/x32/版に置換steam_api.dll.bakに元 Valve 版を保存steam_appid.txt=3104270steam_settings/configs.user.iniで language=japanese, account_name=Player
4. KrkrZ 署名検証スキップ
KANADE.exe.sig→KANADE.exe.sig.bakに退避
5. PackinOne.dll アンチタンパー突破
- バックアップ:
plugin/PackinOne.dll.bak - Patch 1 (integrity check 強制成功):
- file offset
0x60300(sub_10060f00) を 20 バイト書き換え - 内容:
mov dword [0x1009f03c], 1; mov al, 1; ret; nop×7 - 効果: SHA-256 ハッシュ check が常に PASS、
USER32.DLL無限ロード阻止
- file offset
- Patch 2 (addFont 登録 NULL crash 回避):
- file offset
0x33c61を 10 バイト書き換え - 内容:
eb 00 83 7f 08 00 75 3b 74 78(NULL チェック分岐) - 効果:
UFontEx::attachが System dispatch=NULL のとき crash しない
- file offset
plugin/PackinOne.dll.sig.bakに元署名退避
6. PSB v6+ Frontwing 独自フォーマット解明
psbfile.dll自体にはc1 a2パーサがなく、KANADE.exe 内蔵- フォーマット:
\xc1\xa2\x06..\x09 \x00\x00\x00ヘッダ + TLV (Type-Length-Value) tree - タイプタグ:
tag 意味 ペイロード c1 6eMAP (string-keyed dict) uint32 count + count×(raw_str_key + value) 81 XXARRAY uint32 count + count×value 02 XXSTRING (UTF-16LE) uint32 char_count + char_count×2 bytes 00 XXNULL/scalar uint32 value - Python 実装:
tools/re/parse_psb_tree.py - 一部ファイルは byte-level XOR スクランブルあり (H 値ファイル別)
7. PSB 141 個の網羅展開
- 全 PSB v6+ (data.xp3: 78個 + patch.xp3: 63個) を JSON 展開
- 日本語 (ひらがな + カタカナ) 出現は全 0 件
- 内容はすべて UI orchestration (KrkrZ API call、asset 名、フォント設定等)
未解決の核心問題
A. KANADE 起動失敗 (Whisky 上)
- 症状:
PreRenderFontEx.AddTrueTypeFont: System.addFont not definedダイアログ - 根本原因: PackinOne.dll の
V2Link時点で TJSSystemクラスがまだ初期化されておらず、System.addFontを生やせない (load order 問題) - 試行と失敗:
- 遅延実行パッチ案 → ユーザー判断で「意味ない」却下
- ディスク
startup.tjs/KANADE.tjs配置 → KrkrZ がディスクファイル読まない - data.xp3 idx=1546 (PreRenderFontEx.tjs) を空 TJS で in-place 上書き → 様々な エンコーディング (BOM 付き UTF-16LE / ASCII / CP932) を試したが全て Syntax error
- textrender.dll 退避 → 関係なし、
PreRenderFontExは textrender じゃなく XP3 内 TJS スクリプトでクラス定義されている
B. シナリオの所在不明
- PSB 141 個には日本語ゼロ
- 未分類 ~1000 件 (XP3 全件) でも UTF-16LE / CP932 で意味のある日本語連続文字列なし
- 仮説: シナリオは Frontwing 独自スクランブル + KAG/TJS バイトコード化
- 実行時に KAGEX が復号 + 解釈
- 静的に文字列として検出できない設計
ツール / リソース
| パス | 内容 |
|---|---|
tools/steamless/ |
Steamless v3.1.0.5 (DRM 剥がし) |
tools/gbe/ |
Goldberg gbe_fork (Steam Emu) |
tools/freemote/ |
FreeMote v4.5.0 (標準 PSB のみ対応、KANADE は弾く) |
tools/re/parse_psb_tree.py |
KANADE PSB v6+ パーサ |
src/xp3/ |
XP3 + Hxv4 + per-file XOR mask 復号 |
packages/frida/hook_kanade_packinone.js |
Frida スクリプト (起動できれば動く想定) |
docs/instructions/packinone_static_analysis.md |
PackinOne.dll 静的解析ノート |
docs/instructions/kanade_frida_setup.md |
Mac + Whisky + Frida セットアップ手順 |
targets/Kanade/run_kanade.sh |
Mac 用 wine64 直接起動スクリプト |
targets/Kanade/data.xp3.original |
クリーン data.xp3 バックアップ |
次回再開時の選択肢
extNagano.dll解析 — Frontwing 独自プラグイン、シナリオ読み込みの手掛かり- KANADE.exe 内蔵 PSB パーサのリバース — 実装拡張があれば見える
- TJS バイトコード仕様研究 — シナリオがバイトコード化されている前提
- CrossOver / Wine vanilla で起動再挑戦 — Whisky の load order 問題が解消する可能性
- Frida 動的解析 — Wine 起動さえ通れば、メモリから復号後文字列を直接読める
ファイル状態 (2026-05-08 時点)
targets/Kanade/ 配下の改変ファイル:
KANADE.exe(DRM 剥がし版、4.6MB)KANADE.exe.bak/.original(元、4.8MB)KANADE.exe.sig.bak(元署名)steam_api.dll(Goldberg、9MB) /.bak(Valve、266KB)steam_appid.txt,steam_settings/configs.user.inidata.xp3(=.originalから復元、md5 一致確認済)data.xp3.original(バックアップ)plugin/PackinOne.dll(パッチ済) /.bak(元)plugin/PackinOne.dll.sig.bak(元署名)plugin/textrender.dll.disabled(退避中、戻すには.disabledを消す)startup.tjs,KANADE.tjs(試行錯誤の残骸、削除可)