# MHP3RD.BIN 化ツール（PCで配布用BINを作る）

自作クエストを **MHP3RD.BIN（配信クエストセーブ）** に統合し、集会所の **イベントクエスト** に表示・**自由に配布**するための一式です。

## ⚠ 準備：gamekey.bin（非同梱）
- `gamekey.bin`（ULJM05800 のセーブ用ゲーム鍵・16バイト）は**同梱していません**。
  実機CFW PSPの `SGKeyDumper` でダンプ（`ms0:/PSP/GAME/SED/gamekey/ULJM05800QST.bin`）するか、当時の配布ファイルを入手し、
  **このフォルダに `gamekey.bin` として置いてください**。仕様書「準備」参照。

## ✅ 検証済み（実データ）
- **正鍵で動作確認済み**：正しい `gamekey.bin` を置けば下記が成立することを実機データで確認済み。
- **全チェーン成功**：あなたの `MHP3RD.BIN` を復号し、**43個のイベントクエスト**（「終焉を喰らう者」「双璧！紅き熱射、蒼き冷砲」等）を日本語名まで完全取得。→ `data_あなたの43クエスト.bin`
- **往復一致**：Layer A 暗号化→復号でバイト完全一致。ビルド方向もOK。
- **PC完結・1コマンド自動化**：`mhp3bin_auto.py extract` で BIN→data.bin まで全自動（endecryptQSTのGUIも pywinauto で自動操作）。

## ★ 最短：完全自動（推奨）
```bash
# BIN を復号して中の全クエストを一覧（PC完結・1コマンド）
python mhp3bin_auto.py extract ../ULJM05800QST/MHP3RD.BIN gamekey.bin data.bin
# クエストを差し込み（好きなだけ）
python mhp3pack.py db-set data.bin 0 myquest.dat data_new.bin
# 配布用 BIN を作成（PC完結・1コマンド。endecryptQSTも自動操作、PARAM.SFOも更新）
python mhp3bin_auto.py build data_new.bin gamekey.bin ../ULJM05800QST/PARAM.SFO MHP3RD_new.bin
# → MHP3RD_new.bin と MHP3RD_new.bin.PARAM.SFO を PSP/SAVEDATA/ULJM05800QST/ に配置
```
> `mhp3bin.py`（手動版）は endecryptQST を手で操作する版。`mhp3bin_auto.py` はそれを自動化した版です。

## 同梱
| ファイル | 役割 |
|---|---|
| `endecrypter.exe` | **Layer A（PSPセーブ暗号）をPCで暗号/復号**。cielavenir版を本環境でMSVCビルド。動作確認済み |
| `mhp3bin.py` | パイプライン本体（Layer A 呼び出し＋ data.bin 編集） |
| `mhp3pack.py` / `mhcrypt.py` | data.bin/クエスト操作（検証済み） |

## ★ 唯一の必要物：gamekey（16バイト）
`MHP3RD.BIN` は **ULJM05800QST 専用のゲーム鍵**で暗号化されています。この鍵は**保存・法的配慮から公開されておらず、私（ツール側）が用意・再配布できません**。次のいずれかで入手してください：

- **実機CFW PSPでダンプ**：`SGKeyDumper`（または `SGDeemer`）プラグインを有効化 → MHP3を起動しセーブ/ロード →
  `ms0:/PSP/GAME/SED/gamekey/ULJM05800QST.bin` に16バイトの鍵が出力されます。これを `gamekey.bin` として使用。
- **当時のMHP3改造コミュニティ配布の `ULJM05800QST`(gamekey) ファイル**を入手（手順解説サイト等で配布されていました）。

> 鍵さえ用意できれば、以降は **PCだけで完結**します（実機PSPは鍵ダンプの一度きり）。

## 暗号は2層
```
[MHP3RD.BIN]
   │  Layer A: PSPセーブ暗号（endecrypter.exe + gamekey）   ← 本ツールでPC処理
   ▼
[途中データ(=Layer B暗号済 data.bin)]
   │  Layer B: MH独自暗号（本物の endecryptQST3rd.exe / GUI）
   ▼
[data.bin(平文・100枠)]  ← ここを mhp3pack で自由に編集（クエスト追加/差替/並べ替え）
```

## フルの手順（配布BINを作る）
```bash
# 0) 準備: gamekey.bin と、元の MHP3RD.BIN・PARAM.SFO を用意
# 1) Layer A を剥がす（PC）
python mhp3bin.py extractA MHP3RD.BIN gamekey.bin mid.bin
# 2) Layer B を剥がす（endecryptQST3rd.exe / GUI）
#    「復号」ボタン → mid.bin を選択 → 同フォルダに data.bin が出る
# 3) クエストを差し込む（PC・好きなだけ）
python mhp3bin.py setquest data.bin 0 myquest.dat data_new.bin
python mhp3bin.py list data_new.bin          # 確認
# 4) Layer B を掛け直す（endecryptQST3rd.exe / GUI）
#    data_new.bin を data.bin にリネーム → 「暗号化」ボタン → 保存先 mid_new.bin
# 5) Layer A を掛け直す（PC・PARAM.SFOのハッシュも自動更新）
python mhp3bin.py buildA mid_new.bin gamekey.bin PARAM.SFO MHP3RD_new.bin
# 6) MHP3RD_new.bin（+ 出力された PARAM.SFO）を
#    PSP/SAVEDATA/ULJM05800QST/ に配置 → ゲームの集会所イベントクエストに出現
```

- **クエスト作成**は `MHP3TaskEdit`（日英版）や `MHP3 Quest Studio`、`mhp3qst.py` で行い、DAT/MISで保存 → 手順3で差し込み。
- 完成 `MHP3RD.BIN` は **ゲーム鍵暗号＝全PSP/PPSSPP共通**なので、誰のセーブフォルダに置いても動きます（＝自由に配布可・各自作成可）。

## 自動化の範囲（正直に）
- ✅ **Layer A（手順1・5）**：`endecrypter.exe` でPC自動。
- ✅ **data.bin編集（手順3）**：`mhp3pack` でPC自動。
- ⚠ **Layer B（手順2・4）**：本物の `endecryptQST3rd.exe` がGUIのため、ここだけ手動クリック（各1回）。
  （endecryptQSTのLayer B暗号は解析済みなので、ご希望ならPython版に置換して完全1コマンド化も可能。ただし実データ検証は gamekey 入手後に行いたい）

## 検証状況
- `endecrypter.exe`：ビルド・起動・処理経路を確認済み。**実BINでの最終検証は gamekey 入手後**（鍵が無いと正しく復号できないため）。
- `gamekey.bin` を頂ければ、あなたの実 `MHP3RD.BIN` で **復号→Layer B→平文data.bin に v005 クエストが現れるか** を実証し、全工程を確定できます。
