この記事は旧バージョンです.新しいバージョンは以下のものとなります.
ポケモンクリスタル バイナリエディタ起動 チャート - flag3833753
注意: 2023/11/28 に内容をアップデートしました.
はじめに
先日 0x1500 制御コードを用いた任意コード実行の紹介を行いました.
チャート
環境: クリスタル版のみ対応しています.
1. データの初期化
タイトル画面で「SELECT」+「B」+「↑」を同時に押して消去してください.
2. オープニング
時間は朝または昼の時間にしてください.主人公の性別,名前,曜日は何を選択しても良いです.
3. モンスターボールを入手するまで進める.
ストーリーを進めてください.最初にもらうポケモンは何でも良いです.
またライバルの名前は何にしても良いです.
ただし「きのみ」または「キズぐすり」を温存してください.
6. 終端記号のないポケモンを入手する
以下のことを行ってください.
b. ポケモンを 1 匹預ける*2.
c. ボックスせいりを選択しセーブする際に「でんげんを きらないで ください」の表示が出た少し後に強制リセットをする.
d. 再開後どうぐ欄を開く.
e. パソコンを開き預けられたポケモンのニックネームが??????のような表示になれば成功です*3.
f. ボックス 1 をニックネーム??????のポケモンのみにし,いまのボックスをボックス 1 にする.
もしポケモンが預けられていない場合は強制リセットのタイミングが早すぎたことになります.もし預けたポケモンが手持ちとボックスの両方に複製されてしまった場合は強制リセットのタイミングが少し遅かったことになります.預けたポケモンが手持ちからいなくなっている場合は強制リセットのタイミングが遅すぎたことになります.
ボックスに預けているポケモンの数が多いとタイミングの猶予が少し長くなるので複製になってしまう場合でもそのままトライし続ければ成功率が上がると思います.
実際の強制リセットのタイミングとしては以下の動画が役に立つかもしれないので置いておきます.
unterminated_name_pokemon.mov - Google ドライブ
なおこの後メールを持たせる必要があるためもし複製されてしまったポケモンがいる場合は f. で手持ちに加えておくと良いです.
7. 0x1500 制御コードによる任意コード実行を行う.
以下の通りに行動をしてください.
a. 手持ちの 1 匹目をオニスズメにする.
b. ボックス 1, 4, 5 の名前を以下のようにする*4.
4. ヅキりデボデぼズ
5. ヅノるひジデの
d. 再開後右に 1 歩,上に 1 歩進みメニューからポケモンを開きオニスズメで A を押す*5.
e. パソコンを開いてポケモンをひきだすで終端記号のないポケモンを表示する.
以上の動作を行うことでどうぐの 1 番目をはながらメールにし図鑑モードを 0C にすることができます.
ここまで来れば後は以下で紹介している方法と全く同じ手順でできるようになります.
ポケモンクリスタルにおけるバイナリエディタ - flag3833753
今回はバイナリエディタを起動するチャートということでこの後の動きも紹介をします.
8. 簡易版バイナリエディタの起動
- ボックスの名前を表 1 の通りにする.
- 表 2, 3, 4 のメールを用意する.
- 表 2 のメールを読んで「バグモード図鑑」を起動する.
- 表 3 のメールを読んで「バグモード図鑑」を起動する.
- 表 4 のメールを読んで「バグモード図鑑」を起動する.
手順 3. の前にセーブすることをオススメします.
「バグモード図鑑」を起動したら「B」で閉じましょう.
表 1
- ぼへへマぞへブ
- グだとどグだガム
- てサろグだガムよ
- だガグだギぼヂキ
- づごぱヅまとへゴ
- ぴへゴみボぷへゴ
- タダだこごョダだ
- ざダへャぞダり
- だかがヲぜナだィ
表 2
ぜァひすぶづぜウぼダづの空空だっ
表 3
ひゼよろづよたづの空空空空空だっ
表 4
メに0だガにだにだ空ボデの空だっ
9. バイナリエディタの作成
簡易版バイナリエディタを起動するとこんな感じになると思います.
左 4 桁がアドレス,右 2 桁がその中身となっています.
文字の表示がおかしいところがあるのですが気にせず使いましょう.
g は A,青色の線は B,携帯マークは C だと思ってください.
特に 9 と g を混同しないように注意しましょう.
ちなみに上の画像はアドレスが AA94 で中身は CD です.
以下の操作方法でアドレスとその中身を書き換えることができます.
操作方法
B: アドレス-1h
↓: 中身+1h
↑: 中身-1h
→: 中身+10h
←: 中身-10h
Start: 終了
簡易版バイナリエディタを使ってアドレス AA94 から AB4C の中身を以下のものにしてください.
AA90: CD C5 32 11 C0 4D 21 00 90 01 22 3E AAA0: CD C6 0D CD 3B 0E CD 49 0E AF 3C E0 D4 F0 9D F5 AAB0: 21 00 D0 CD 0F D3 E5 11 F8 FF 19 E5 D1 21 A9 C4 AAC0: F0 9D D7 CD 9D 2F CD 5D D3 01 0C 00 36 7C 23 7A AAD0: CD 5D D3 7B CD 5D D3 36 7F 23 1A CD 5D D3 13 36 AAE0: 7C 09 7C FE C6 20 E5 CD AD 2F 3E ED EA 4B C5 E1 AAF0: 18 C1 CD 1B 35 F0 A9 5F 01 01 00 07 38 14 0B 0B AB00: 07 38 0F 0E F0 07 38 0A 01 10 00 07 38 04 48 07 AB10: 38 09 CB 53 28 0F CB 43 28 05 E9 E1 F1 D7 C9 F0 AB20: 9D 81 E0 9D C9 79 CB 43 20 06 CB 4B 20 0F 09 C9 AB30: F5 F0 9D CD 9D 2F F1 86 77 CD AD 2F C9 84 67 C9 AB40: F5 CB 37 CD 64 D3 F1 E6 0F C6 F6 22 C9
書き換えたら次の内容のメールを用意して,内容を読んでから「バグモード図鑑」を起動することでバイナリエディタを起動することができます.
ゾそへ/ぞへャぞてあめ空空空だっ
補足
0x1500 制御コードによる任意コード実行の仕組みについては
ポケモンクリスタル 0x1500 制御コードによる任意コード実行 - flag3833753
で述べている通りなのですが今回のセットアップでは 0xCD64 以降が D2 9B C4 となっていて 0xC49B にジャンプするようになっています.この領域はグラフィックを表示するために使う領域でボックスを開く際に名前が表示されることを利用した任意コード実行となっています.
Acknowledgements
Thanks to TimoVM for showing me how to set up 0x1500 control code arbitrary code execution!
*1:0x1500 制御コードを用いた任意コード実行の記事を投稿してから 9, 10 時間後に新手法が見つかったためこの記事を書いています.
*2:オニスズメまたは最初にもらうポケモンを持っていると思いますがどちらでも良いです.
*3:今回はニックネームを 0x00 で埋めるのが目的なのでレベル 0 のバグったポケモンを作成する必要はありません.
*4:ボックス 2, 3 の名前は何にしていても良いです.
*5:この通りに進んでください.特に順番を逆にした上 1 歩,右に 1 歩ではうまくいきません.またオニスズメで A を押す際にはつよさをみるなどが表示されれば良いです.
*6:手順 3. と 4. の順番はどちらが先でも良いです.