Site cover image

🐾flag3

ポケットモンスター 金・銀 バイナリエディタ

バイナリエディタは、元々初代ポケモンにおける任意コード実行の究極の到達点とも言えるツールで、今回紹介するバイナリエディタは第二世代用に移植されたものです。このエディタを使用すると、ゲーム内のあらゆるメモリの読み書きが可能になります。さらに、プログラムを記述し、実行させることもできます。

本記事は以下の動画の解説となります。

バイナリエディタ導入手順

環境

ポケットモンスター 金・銀の日本語版のみに対応しています。ポケットモンスター クリスタルや日本語版以外のバージョンには対応していません。またポケモンスタジアム金銀のGBビルや一部のエミュレータでは動作しません。またさいしょからはじめるを前提にしています。

手順1: しぜんこうえんまで進める

  1. 主人公の名前は「えてびま」にします。
  2. トレーナーIDを256で割った商と余りのどちらかが255であった場合はさいしょからはじめ直してください。
  3. 曜日を火曜日、木曜日、土曜日のいずれかにします。
    • むしとりたいかいに参加するためにしぜんこうえんで火曜日、木曜日、土曜日となるようにしてください。
  4. やせいのポケモンを3匹捕まえて、タマゴを含めてボックスにあずけます。
    • 以降、3匹のやせいポケモンをやせい1、やせい2、やせい3と表すことにします。
  5. ガンテツからルアーボールをもらいます。
  6. コガネシティのポケモンセンターに入ります。
    • テレポートの移動先をコガネシティにする必要があります。
  7. じてんしゃを入手して、べんりボタン(セレクトボタン)にとうろくします。
  8. ケーシィを入手します。
    • やせいで入手するかコガネゲームコーナーで入手してください。コガネゲームコーナーで入手する場合はちかつうろでコインケースを入手する必要があります。
  9. ひきゃく(オニスズメ)を入手します。

手順2: レベル0のバグったポケモンを入手する

  1. 手持ちのポケモンを2匹以上にしケーシィを先頭にしてむしとりたいかいに参加します。
  2. むしとりたいかいが開始したら一旦引き返し、おわりにしますか?と聞かれるのでいいえを選択して、むしとりたいかいに戻ります。
  3. コガネシティにテレポートをします。
  4. 手持ちが戻っているのでケーシィ以外の全てのポケモンをあずけます。しぜんこうえんに戻ってむしとりたいかいを終了させます。
  5. 手持ちのポケモンの2番目にレベル0のバグったポケモンを入手することができます。

手順3: 2つ目のじてんしゃを入手する

  1. コガネひゃっかてんでわざマシン48を入手してほのおのパンチをケーシィに覚えさせます。
  2. レベル0のバグったポケモンをそだてやにあずけてすぐに引き取ります。
  3. ボックスからやせい1、やせい2、ひきゃく(オニスズメ)、タマゴを引き出して手持ちのポケモンを以下の順番にします。
    🐭
    バグったポケモン

    ケーシィ

    やせい1

    やせい2

    ひきゃく(オニスズメ)

    タマゴ

  4. パソコンから「ボックスせいり/メールはずしてね」を選択してやせい3を手持ちの先頭に加えます。
  5. 手持ちの2番目(レベル0のバグったポケモン)と手持ちの5番目(やせい2)を入れ替えます。
  6. パソコンから「ポケモンをあずける」を選択して手持ちのポケモンを上から2匹あずけます。その後ボックスにいる最初のポケモンをつれていきます。
  7. ケーシィがじてんしゃを持っているのであずかります。

手順4: 任意コード実行環境を整える

  1. ひきゃく(オニスズメ)と最初のポケモンを入れ替えて手持ちのポケモンを以下の順番にします。
    🐭
    ケーシィ

    やせい1

    バグったポケモン

    最初のポケモン

    ひきゃく(タマゴ)

    ひきゃく(オニスズメ)

  2. ボールポケットを開いて1番目をルアーボール×1、2番目をモンスターボールにします。モンスターボールの個数は1、2、4、5のいずれかにしておきます。
  3. たいせつなものポケットを開いて1つ目のじてんしゃでセレクトボタンを押してから2つ目のじてんしゃでセレクトボタンを押して入れ替え操作を行います。
  4. ボールポケットの2番目のボールが255個になるので、残りが17個になるようにすてます。
  5. ボールポケットの2番目と65番目を入れ替えます。
    • ボールポケットの64~67番目については以下のようになっているのでこれを目印にしてボールポケットの2番目と65番目を入れ替えると良いです。
      🔍
      ボールポケットの64番目:?×132

      ボールポケットの65番目:?×0

      ボールポケットの66番目:?×129

      ボールポケットの67番目:じてんしゃ

  6. メニューからポケギアが消えていれば任意コード実行の環境構築が終了となります。

手順5: 簡易版バイナリエディタ導入

ボックスの名前を以下のようにしてください。

📦
ボックス1:ダだギョにヂだゾ

ボックス2:ダだゲムよダだガ

ボックス3:だじダムキづごぱ

ボックス4:ヅまてへぎまぴよ

ボックス5:へぎまボぷへぎま

ボックス6:へォひひ はァリ

ボックス7:どダれはリダだや

ボックス8:ざダれ?よダリ

ボックス9:だかがよぜ?だを

ボックスの名前を変更したら下記の内容のメールをポケモンに持たせます。

✉️
へロどて6リなひだへぜまちぼダメ
に0ぞ?ムぞボデのよなゥゅリだっ

メールの作成後はメールの中身を読みます。その後ずかんを開くことで簡易版バイナリエディタを起動することができます。

簡易版バイナリエディタ

これ以降、上記のメールを読んでからずかんを開くたびに簡易版バイナリエディタを起動することができます。

Image in a image block

左側のD6E6が書き換えようとしているメモリのアドレスで、右の00がその中身です。この簡易版バイナリエディタではA、B、Cの表示が正常でないことに注意してください。Aがg、Bが横線、Cが電話マークとなっています。

🎮
簡易版バイナリエディタ操作方法

B: アドレス-01

A: アドレス+01

↑: 中身-01

↓: 中身+01

←: 中身-10

→: 中身+10

START: 終了

SELECT: D6E6からのコードを実行(プログラム入力するまで押さないように注意)

手順6: バイナリエディタ導入

簡易版バイナリエディタを使用してバイナリエディタのプログラムを入力していきます。入力を終えたらセレクトボタンを押すことでバイナリエディタを起動することができます。バイナリエディタを起動する前に一旦スタートボタンを押して簡易版バイナリエディタを終了させてセーブすることをお勧めします。

アドレス中身
D6E6CD
D6E7A8
D6E834
D6E9CD
D6EAAE
D6EB33
D6ECCD
D6ED87
D6EE0D
D6EFCD
D6F095
D6F10D
D6F211
D6F3F2
D6F440
D6F521
D6F600
D6F796
D6F801
D6F919
D6FA3E
D6FBCD
D6FC5B
D6FD0E
D6FEF0
D6FF9F
D700F5
D70121
D70200
D703D0
D704CD
D70542
D706D7
D707E5
D70811
D709F8
D70AFF
D70B19
D70CE5
D70DD1
D70E21
D70FA9
D710C3
D711F0
D7129F
D713CD
D7149D
D71530
D716CD
D7178B
D718D7
D71901
D71A0C
D71B00
D71C36
D71D7C
D71E23
D71F7A
D720CD
D7218B
D722D7
D7237B
D724CD
D7258B
D726D7
D72736
D7287F
D72923
D72A1A
D72BCD
D72C8B
D72DD7
D72E13
D72F36
D7307C
D73109
D7327C
D733FE
D734C6
D73520
D736E5
D737CD
D738AD
D73930
D73A3E
D73BED
D73CEA
D73D4B
D73EC4
D73FE1
D74018
D741C2
D742CD
D743F4
D74436
D745F0
D746AB
D7475F
D74801
D74901
D74A00
D74B07
D74C38
D74D18
D74E0B
D74F0B
D75007
D75138
D75213
D7530E
D754F0
D75507
D75638
D7570E
D75801
D75910
D75A00
D75B07
D75C38
D75D08
D75E48
D75F07
D76030
D76104
D762E1
D763F1
D764D7
D765C9
D7667B
D7670F
D76830
D76910
D76A0F
D76B0F
D76C30
D76D01
D76EE9
D76FF0
D7709F
D771CD
D7729D
D77330
D77479
D77586
D77677
D777C3
D778AD
D77930
D77A0F
D77B38
D77C05
D77D0F
D77E38
D77F06
D78009
D781C9
D78279
D78384
D78467
D785C9
D786F0
D7879F
D78881
D789D7
D78AC9
D78BF5
D78CCB
D78D37
D78ECD
D78F92
D790D7
D791F1
D792E6
D7930F
D794C6
D795F6
D796F6
D79760
D79822
D799C9

バイナリエディタ

これ以降、簡易版バイナリエディタを起動してからセレクトボタンを押すたびに、バイナリエディタを起動することができます。

Image in a image block

画面上部の10が現在のROMバンクとSRAMバンクとなります。

🎮
バイナリエディタ操作方法

↑: アドレス-01

↓: アドレス+01

←: アドレス-10

→: アドレス+10

B+↑: アドレス-100

B+↓: アドレス+100

B+←: アドレス-1000

B+→: アドレス+1000

A+↑: 中身-01

A+↓: 中身+01

A+←: 中身-10

A+→: 中身+10

START: 終了

SELECT+↑: バンク-01

SELECT+↓: バンク+01

SELECT+←: バンク-10

SELECT+→: バンク+10

SELECT+A: 現在のアドレスからのコードを実行(注意して使用してください)

バイナリエディタを使ってアドレスD418~D41A、DD90~DD9Bの中身を以下のように書き換えてください。

アドレス中身
D418C3
D419E6
D41AD6
DD903E
DD91E1
DD92EA
DD93FC
DD94CF
DD953E
DD9603
DD9721
DD9831
DD9956
DD9ACF
DD9BC9

書き変えたらカーソルをアドレスDD90に合わせてSELECT+Aボタンを押すことでたいせつなものポケットにわざマシン33を入手することができます。このわざマシン33を使うたびにバイナリエディタを直接起動することができます。

Image in a image block

手順7: 通常の状態に戻す

バイナリエディタの導入で様々な副作用が発生しています。

  • 主人公の名前
  • ボールポケット
  • パソコンのどうぐ欄
  • ポケギア
  • ポケモンずかん
  • ボックス名
  • 手持ちのポケモン
主人公の名前

バンクを01にしてカーソルをアドレス6237に合わせてSELECT+Aボタンを押すことで主人公の名前を決めることができます。名付け終えたらSTARTボタンを押してバイナリエディタを一回終了させてください。

ボールポケット

アドレスD5EFからD5F4までの中身を 02 A0 01 05 02 FF にすることでボールポケットを正常にすることができます。

パソコンのどうぐ欄

アドレスD60Aの中身をFFにすることでパソコンのどうぐ欄を元に戻すことができます。

ポケギア

アドレスD66Dの中身をアドレスD66Fに移動させてアドレスD670の中身を00にすることで元に戻すことができます。

ポケモンずかん

アドレスD671の中身を00にすることでポケモンずかんを正常にすることができます。

ボックス名

わざマシン33によるバイナリエディタ導入後はボックス名を好きなように変えることができます。

バンクを01にしてカーソルをアドレス5D16に合わせてSELECT+Aボタンを押すことでボックスの名前をデフォルトの名前に戻すことができます。

手持ちのポケモン

手持ちの先頭を最初のポケモンにして、アドレスD9E8の中身を01に、アドレスD9EAの中身をFFにすることで手持ちのポケモンを最初のポケモンのみにすることができます。

おやの名前

アドレスDDA0~DDABの中身を以下のように書き換えて、カーソルをDDA0に合わせてSELECT+Aボタンを押すことで手持ちの1匹目のおやの名前を主人公の名前にすることができます。

アドレス中身
DDA001
DDA106
DDA200
DDA311
DDA410
DDA5DB
DDA621
DDA7B5
DDA8D1
DDA9C3
DDAAD6
DDAB30
タマゴとケーシィとひきゃく(オニスズメ)の再入手

アドレスDDB0~DDD3の中身を以下のように書き換えて、カーソルをDDB0に合わせてSELECT+Aボタンを押してからメニューを閉じることでトゲピーのタマゴとケーシィとひきゃく(オニスズメ)を手に入れることができます。

アドレス中身
DDB03E
DDB122
DDB2D7
DDB33E
DDB480
DDB5E0
DDB6A2
DDB721
DDB8BD
DDB9DD
DDBAC3
DDBB85
DDBC33
DDBD47
DDBE2E
DDBFAF
DDC005
DDC12D
DDC23F
DDC30A
DDC400
DDC500
DDC62D
DDC715
DDC80A
DDC900
DDCA01
DDCB49
DDCC6E
DDCD4E
DDCE6E
DDCF2F
DDD02C
DDD16E
DDD249
DDD390

技術的補足(執筆中)

簡易版バイナリエディタ

WRA0:CF21 CD A8 34         call 34A8
WRA0:CF24 C3 FC D8         jp   D8FC
WRA0:CF27 C5               push bc
WRA0:CF28 CB 30            swap b
WRA0:CF2A CD 2E CF         call CF2E
WRA0:CF2D C1               pop  bc
WRA0:CF2E 3E 0F            ld   a,0F
WRA0:CF30 A0               and  b
WRA0:CF31 4E               ld   c,(hl)
WRA0:CF32 C6 F6            add  a,F6
WRA0:CF34 2F               cpl  
WRA0:CF35 E6 9F            and  a,9F
WRA0:CF37 2F               cpl  
WRA0:CF38 1C               inc  e
WRA0:CF39 12               ld   (de),a
WRA0:CF3A C9               ret  
WRA0:CF3B D6 C5            sub  a,C5
WRA0:CF3D EA E1 D8         ld   (D8E1),a
WRA0:CF40 30 DF            jr   nc,CF21

WRA1:D8B2 0F               rrca 
WRA1:D8B3 30 06            jr   nc,D8BB
WRA1:D8B5 AF               xor  a
WRA1:D8B6 C6 10            add  a,10
WRA1:D8B8 30 0E            jr   nc,D8C8
WRA1:D8BA 50               ld   d,b
WRA1:D8BB 0F               rrca 
WRA1:D8BC 30 08            jr   nc,D8C6
WRA1:D8BE 9F               sbc  a
WRA1:D8BF D6 0F            sub  a,0F
WRA1:D8C1 30 05            jr   nc,D8C8
WRA1:D8C3 50               ld   d,b
WRA1:D8C4 30 2C            jr   nc,D8F2
WRA1:D8C6 0F               rrca 
WRA1:D8C7 9F               sbc  a
WRA1:D8C8 86               add  (hl)
WRA1:D8C9 32               ldd  (hl),a
WRA1:D8CA 2A               ldi  a,(hl)
WRA1:D8CB 44               ld   b,h
WRA1:D8CC 50               ld   d,b
WRA1:D8CD 11 CF C3         ld   de,C3CF
WRA1:D8D0 CD 27 CF         call CF27
WRA1:D8D3 45               ld   b,l
WRA1:D8D4 D6 50            sub  a,50
WRA1:D8D6 CD 27 CF         call CF27
WRA1:D8D9 1C               inc  e
WRA1:D8DA 46               ld   b,(hl)
WRA1:D8DB CD 27 CF         call CF27
WRA1:D8DE 50               ld   d,b
WRA1:D8DF CD F4 CB         call CBF4
WRA1:D8E2 CB 7F            bit  7,a
WRA1:D8E4 CA E9 D8         jp   z,D8E9
WRA1:D8E7 50               ld   d,b
WRA1:D8E8 34               inc  (hl)
WRA1:D8E9 0F               rrca 
WRA1:D8EA DA CA D8         jp   c,D8CA
WRA1:D8ED 0F               rrca 
WRA1:D8EE 30 D4            jr   nc,D8C4
WRA1:D8F0 50               ld   d,b
WRA1:D8F1 2B               dec  hl
WRA1:D8F2 0F               rrca 
WRA1:D8F3 DA E6 D6         jp   c,D6E6
WRA1:D8F6 0F               rrca 
WRA1:D8F7 D8               ret  c
WRA1:D8F8 50               ld   d,b
WRA1:D8F9 00               nop  
WRA1:D8FA 30 B6            jr   nc,D8B2
WRA1:D8FC 26 D6            ld   h,D6
WRA1:D8FE 2E E6            ld   l,E6
WRA1:D900 30 DD            jr   nc,D8DF
WRA1:D902 50               ld   d,b

ECH1:FB20 64               ld   h,h
ECH1:FB21 00               nop  
ECH1:FB22 B4               or   h
ECH1:FB23 C3 3B CF         jp   CF3B
バイナリ
CF21:
CD A8 34 C3 FC D8 C5 CB 30 CD 2E CF C1 3E 0F A0 4E
C6 F6 2F E6 9F 2F 1C 12 C9 D6 C5 EA E1 D8 30 DF

D8B2:
0F 30 06 AF C6 10 30 0E 50
0F 30 08 9F D6 0F 30 05 50
30 2C 0F 9F 86 32 2A 44 50
11 CF C3 CD 27 CF 45 D6 50
CD 27 CF 1C 46 CD 27 CF 50
CD F4 CB CB 7F CA E9 D8 50
34 0F DA CA D8 0F 30 D4 50
2B 0F DA E6 D6 0F D8 50 00
30 B6 26 D6 2E E6 30 DD 50

FB20:
64 00 B4 C3 3B CF

バイナリエディタ

説明

バイナリエディタはhlレジスタが指しているアドレスを含む18個のアドレスとその中身を出力するプログラムとなっています。更に画面上部にROMバンクとSRAMバンクを表示させて変更しやすいようにしています。アドレスD6E6を実行することでバイナリエディタを起動することができるようになっています。

WRA1:D6E6 CD A8 34         call 34A8
WRA1:D6E9 CD AE 33         call 33AE
WRA1:D6EC CD 87 0D         call 0D87
WRA1:D6EF CD 95 0D         call 0D95
WRA1:D6F2 11 F2 40         ld   de,40F2
WRA1:D6F5 21 00 96         ld   hl,9600
WRA1:D6F8 01 19 3E         ld   bc,3E19
WRA1:D6FB CD 5B 0E         call 0E5B
WRA1:D6FE F0 9F            ld   a,(ff00+9F)
WRA1:D700 F5               push af
WRA1:D701 21 00 D0         ld   hl,D000
WRA1:D704 CD 42 D7         call D742
WRA1:D707 E5               push hl
WRA1:D708 11 F8 FF         ld   de,FFF8
WRA1:D70B 19               add  hl,de
WRA1:D70C E5               push hl
WRA1:D70D D1               pop  de
WRA1:D70E 21 A9 C3         ld   hl,C3A9
WRA1:D711 F0 9F            ld   a,(ff00+9F)
WRA1:D713 CD 9D 30         call 309D
WRA1:D716 CD 8B D7         call D78B
WRA1:D719 01 0C 00         ld   bc,000C
WRA1:D71C 36 7C            ld   (hl),7C
WRA1:D71E 23               inc  hl
WRA1:D71F 7A               ld   a,d
WRA1:D720 CD 8B D7         call D78B
WRA1:D723 7B               ld   a,e
WRA1:D724 CD 8B D7         call D78B
WRA1:D727 36 7F            ld   (hl),7F
WRA1:D729 23               inc  hl
WRA1:D72A 1A               ld   a,(de)
WRA1:D72B CD 8B D7         call D78B
WRA1:D72E 13               inc  de
WRA1:D72F 36 7C            ld   (hl),7C
WRA1:D731 09               add  hl,bc
WRA1:D732 7C               ld   a,h
WRA1:D733 FE C6            cp   a,C6
WRA1:D735 20 E5            jr   nz,D71C
WRA1:D737 CD AD 30         call 30AD
WRA1:D73A 3E ED            ld   a,ED
WRA1:D73C EA 4B C4         ld   (C44B),a
WRA1:D73F E1               pop  hl
WRA1:D740 18 C2            jr   D704
WRA1:D742 CD F4 36         call 36F4
WRA1:D745 F0 AB            ld   a,(ff00+AB)
WRA1:D747 5F               ld   e,a
WRA1:D748 01 01 00         ld   bc,0001
WRA1:D74B 07               rlca 
WRA1:D74C 38 18            jr   c,D766
WRA1:D74E 0B               dec  bc
WRA1:D74F 0B               dec  bc
WRA1:D750 07               rlca 
WRA1:D751 38 13            jr   c,D766
WRA1:D753 0E F0            ld   c,F0
WRA1:D755 07               rlca 
WRA1:D756 38 0E            jr   c,D766
WRA1:D758 01 10 00         ld   bc,0010
WRA1:D75B 07               rlca 
WRA1:D75C 38 08            jr   c,D766
WRA1:D75E 48               ld   c,b
WRA1:D75F 07               rlca 
WRA1:D760 30 04            jr   nc,D766
WRA1:D762 E1               pop  hl
WRA1:D763 F1               pop  af
WRA1:D764 D7               rst  10
WRA1:D765 C9               ret  
WRA1:D766 7B               ld   a,e
WRA1:D767 0F               rrca 
WRA1:D768 30 10            jr   nc,D77A
WRA1:D76A 0F               rrca 
WRA1:D76B 0F               rrca 
WRA1:D76C 30 01            jr   nc,D76F
WRA1:D76E E9               jp   hl
WRA1:D76F F0 9F            ld   a,(ff00+9F)
WRA1:D771 CD 9D 30         call 309D
WRA1:D774 79               ld   a,c
WRA1:D775 86               add  (hl)
WRA1:D776 77               ld   (hl),a
WRA1:D777 C3 AD 30         jp   30AD
WRA1:D77A 0F               rrca 
WRA1:D77B 38 05            jr   c,D782
WRA1:D77D 0F               rrca 
WRA1:D77E 38 06            jr   c,D786
WRA1:D780 09               add  hl,bc
WRA1:D781 C9               ret  
WRA1:D782 79               ld   a,c
WRA1:D783 84               add  h
WRA1:D784 67               ld   h,a
WRA1:D785 C9               ret  
WRA1:D786 F0 9F            ld   a,(ff00+9F)
WRA1:D788 81               add  c
WRA1:D789 D7               rst  10
WRA1:D78A C9               ret  
WRA1:D78B F5               push af
WRA1:D78C CB 37            swap a
WRA1:D78E CD 92 D7         call D792
WRA1:D791 F1               pop  af
WRA1:D792 E6 0F            and  a,0F
WRA1:D794 C6 F6            add  a,F6
WRA1:D796 F6 60            or   a,60
WRA1:D798 22               ldi  (hl),a
WRA1:D799 C9               ret  
バイナリ
                  CD A8 34 CD AE 33 CD 87 0D CD
95 0D 11 F2 40 21 00 96 01 19 3E CD 5B 0E F0 9F
F5 21 00 D0 CD 42 D7 E5 11 F8 FF 19 E5 D1 21 A9
C3 F0 9F CD 9D 30 CD 8B D7 01 0C 00 36 7C 23 7A
CD 8B D7 7B CD 8B D7 36 7F 23 1A CD 8B D7 13 36
7C 09 7C FE C6 20 E5 CD AD 30 3E ED EA 4B C4 E1
18 C2 CD F4 36 F0 AB 5F 01 01 00 07 38 18 0B 0B
07 38 13 0E F0 07 38 0E 01 10 00 07 38 08 48 07
30 04 E1 F1 D7 C9 7B 0F 30 10 0F 0F 30 01 E9 F0
9F CD 9D 30 79 86 77 C3 AD 30 0F 38 05 0F 38 06
09 C9 79 84 67 C9 F0 9F 81 D7 C9 F5 CB 37 CD 92
D7 F1 E6 0F C6 F6 F6 60 22 C9

参考文献

日本語

英語