ポケモンクリスタル バイナリエディタ起動 チャート (ver.20231211)

注意: 2023/12/11 に内容をアップデートしました.ver.20231128 を見たい方はこちらからどうぞ
注意: 2023/11/28 に内容をアップデートしました.これより前のバージョンは残していません.

はじめに

先日 0x1500 制御コードを用いた任意コード実行の紹介を行いました.

今回の記事ではこれを用いてバイナリエディタを導入するチャートについて書きます*1

チャート

環境: クリスタル版のみ対応しています.

1. データの初期化

タイトル画面で「SELECT」+「B」+「↑」を同時に押して消去してください.

2. オープニング

時間は朝または昼の時間にしてください.主人公の性別,名前,曜日は何を選択しても良いです.

3. モンスターボールを入手するまで進める.

ストーリーを進めてください.最初にもらうポケモンは何でも良いです.
またライバルの名前は何にしても良いです.
ただし「きのみ」または「キズぐすり」を温存してください.

4. 46 ばんどうろに行きオニスズメを入手する.

オニスズメは朝または昼に出現することに注意してください.

5. ヨシノシティのポケモンセンターに入る

この時点で最低限の準備が終了しているためバイナリエディタの作成に取りかかれます.

6. 終端記号のないポケモンを入手する

以下のことを行ってください.

a. パソコンの前に立ちセーブを行う.
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

1. ゅゅョにミてエろ
4. ヅキりデボデぼズ
5. ヅノるひジデの
c. ポケモンセンターの 2 階に行き下の写真の場所でセーブをしてリセットを行う.
d. 再開後右に 1 歩,上に 1 歩進みメニューからポケモンを開きオニスズメで A を押す*5
e. パソコンを開いてポケモンをひきだすで終端記号のないポケモンを表示する.

以上の動作を行うことでどうぐの 1 番目をはながらメールにし図鑑モードを 0C にすることができます.

ここまで来れば後は以下で紹介している方法と全く同じ手順でできるようになります.
ポケモンクリスタルにおけるバイナリエディタ - flag3833753
今回はバイナリエディタを起動するチャートということでこの後の動きも紹介をします.

8. 簡易版バイナリエディタの起動

以下の手順を踏むと簡易版バイナリエディタが起動します.

  1. ボックスの名前を表 1 の通りにする.
  2. 表 2, 3 のメールを用意する.
  3. 表 2 のメールを読んで任意コード実行を行う.
  4. 表 3 のメールを読んで任意コード実行を行う.

手順 3. の前にセーブすることをオススメします.

表 1

  1. ぼギダへマぞがヲ
  2. ぜナョダだグぼダ
  3. ぞてアろダムキづ
  4. ごヅまとぱへジみ
  5. へジみボぷへジみ
  6. へブひひ ぐとど
  7. ダれエろダださざ
  8. ダダれャぞダだな
  9. ぼヂてアろだあ

表 2

ぼぴがろぜシづぜネよヂづにふぜフ
づぜヨづののののののののののだっ

表 3

へなづへつぢておろなひだへドみち
ぼダメに0ぞ?ムぞボデのののだっ

9. バイナリエディタの作成

簡易版バイナリエディタを起動するとこんな感じになると思います.

左 4 桁がアドレス,右 2 桁がその中身となっています.

文字の表示がおかしいところがあるのですが気にせず使いましょう.
g は A,青色の線は B,携帯マークは C だと思ってください.
特に 9 と g を混同しないように注意しましょう.
ちなみに上の画像はアドレスが AB11 で中身は CB です.

以下の操作方法でアドレスとその中身を書き換えることができます.

操作方法

A: アドレス+1h
B: アドレス-1h
↓: 中身+1h
↑: 中身-1h
→: 中身+10h
←: 中身-10h
Start: 終了

以下の URL にあるプログラムを入力してバイナリエディタを作りましょう.
miniatur_memory_editor_C.asm · GitHub
簡易版バイナリエディタを使って AA94 から AB4D のアドレスの中身をリンク先のものに書き換えてください.

書き換えたら次の内容のメールを用意して,内容を読んでから「バグモード図鑑」を起動することでバイナリエディタを起動することができます.

ョぶぺぶぶヅあめがヲぜナヘマぞ空
ゾそへ/ぞへャぞてあめ空空空だっ

補足

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 を押す際にはつよさをみるなどが表示されれば良いです.