なるほどえたきちのブログじゃねーの

なるほどえたきちのブログじゃねーの

なるほどえたきちのブログじゃねーよ

日版エメラルド用任意コードのアレコレ

最近Emでの任意コード実行が話題になってるような気がするので便乗して少し遊んでみました。
コード載せてダラダラ語る前に何やったか見せた方が早そうなのでまずはこの動画を見てください。

 

大体察しはつくと思いますがバイナリエディタです。(挙動が怪しぎるが)
動画では単純なイベントスクリプトの実行程度で終わっていますが理論上はこんなこともできてしまいます。割と何でもありです。(音量注意)

今回はこのバイナリエディタの起動方法を解説したいと思います。
当たり前ですが3世代ポケモンのメモリ構造が頭に入っていないとこれが起動できても使い物にならないので有識者以外には推奨できません。

以下説明

 

1)バグ技0x2B5Cを習得したポケモンの生成


既に0x2B5Cを使用できるポケモンがいる場合はこの手順を踏む必要はありません。

f:id:BZL:20190716052527p:plain

まずは適当にバルビートを入手します。

f:id:BZL:20190716052800p:plain

ヒワマキシティ左上の民家にいる子供に話しかけます。

f:id:BZL:20190716053006p:plain

プラスル(NN:プラプラ)と交換して貰います。
習得している技を鳴き声のみにし、努力値をH92 A43に調整します。
以下の振り方が個人的には楽だと思います。

マックスアップ×9

タウリン×4

ポチエナ×2

ゴニョニョ×3

 

努力値の調整が終わったらこのプラスルを材料にダブルコラプションを行います。
(タマゴバグは殆どやったことないので詳しい解説は他サイトに投げます)
成功すると以下の画像のようにlv0のラフレシアが生成されます。
このラフレシアは技0x2B5C(べべべべべべ)と技0x0505(読めん)を習得しています。

f:id:BZL:20190716053815p:plain

f:id:BZL:20190716053931p:plain

技0x0505を残したままにしておくと戦闘時にフリーズしてしまうので技1と技4を入れ替えた後に育て屋に預けます。

f:id:BZL:20190716054358p:plain

適当に走り回ってから受け取るとこのような技構成に変化していると思います。

以上で技0x2B5Cの生成は完了です。

 

2)ボックスRAMの編集


今後の作業にあたってバグ技0x2B5Cの成功率(1/32)が障壁になるのでボックスのメモリを改竄して成功率を底上げします。
ボックスの状態を以下の通りに編集します。

 

ボックス12 25匹目にNN『てぶねうい』のポケモンを配置

f:id:BZL:20190716054938p:plain

 

ボックス名を以下の通りに変更

ボックス ボックス名
ボックス1 『うウねういィ く』
ボックス2 『 たべちぶ l』
ボックス3 『おゆれかざぇさk』
ボックス4 『 そべちぶ l』
ボックス5 『くタいみくムちべ』
ボックス6 『 lみ い l』
ボックス7 『ウぃあGかぶれか』
ボックス8 『 ごぇさk l』
ボックス9 『ミBィC7ううい』
ボックス10 『   」ねうい』
ボックス11 『  シえうい』
ボックス12 『 てNぬう』
ボックス13 『は は クぬうい』

 

戦闘に入り、フリーズせず技が正常終了するまでバグ技0x2B5Cを使用し続けます。
技が成功したらすぐに戦闘終了し、ボックスの内容を確認します。
ボックス12の25-27匹目、ボックス14の28-30匹目にダメタマゴが配置されています。
ボックス14の25-27匹目を空欄にし、ボックス1のボックス名を『う8にういィ く』に変更します。

 

これ以降はバグ技0x2B5Cがほぼ確実に成功するようになります。

 

3)バイナリエディタのデータ書き込み


恐らく一番時間のかかる作業になります。
バグ技0x2B5Cから呼び出される任意コードを使用してバイナリエディタのデータをボックスのRAMに書き込みます。
書き込まれる位置はボックス1の2-12匹目になります。

 

まず以下の通りにボックス名を編集します。 

ボックス ボックス名
ボックス2 『 ォめリば l』
ボックス4 『 やめコづ l』
ボックス5 『グねワNゃG l』
ボックス6 『 ワNエG l』
ボックス7 『ワNクGミBィC』

 

コード1回の実行につき0x24byteがコピーされます。
バイナリエディタのサイズは0x3C0byteなので合計27回のコード実行が必要になります。
ボックス3、8-14のボックス名は任意コードの実行毎に変更してください。
27回のコード実行が完了したらこのステップは終了です。

 

1回目

ボックス ボックス名
ボックス3 『ついゥはぇぃ も』
ボックス8 『 ィ♂ミ」』
ボックス9 『fぶYぴァばおが』
ボックス10 『   Dばルl』
ボックス11 『   l99』
ボックス12 『 おふVぴ』
ボックス13 『ァばおがDばムl』
ボックス14 『    みUぴ』

 

2回目

ボックス ボックス名
ボックス3 『ついゥはぇぃあも』
ボックス8 『 l99』
ボックス9 『ァばおがDばノl』
ボックス10 『    l99』
ボックス11 『  くむUぶ』
ボックス12 『 Pぴァば』
ボックス13 『 l99けがDば』
ボックス14 『   セlOべ』

※ボックス14を訂正しています

 

3回目

ボックス ボックス名
ボックス3 『ついゥはぇぃいも』
ボックス8 『 l99』
ボックス9 『すメSぶくタ リ』
ボックス10 『   くム み』
ボックス11 『  べムミB』
ボックス12 『 ィCPぶ』
ボックス13 『 l99たむけい』
ボックス14 『   ぞね め』

 

4回目

ボックス ボックス名
ボックス3 『ついゥはぇぃうも』
ボックス8 『Mべあィ』
ボックス9 『あぅあも l99』
ボックス10 『   あもあも』
ボックス11 『  あもあも』
ボックス12 『  l99』
ボックス13 『あもあもあもいぃ』
ボックス14

『    l99』

 

5回目

ボックス ボックス名
ボックス3 『ついゥはぇぃえも』
ボックス8 『あィあぇ』
ボックス9 『せれxW l99』
ボックス10 『   あぅあィ』
ボックス11 『  あぅAぶ』
ボックス12 『 ぞもため』
ボックス13 『ついィねあィGイ』
ボックス14 『    l99』

 

6回目

ボックス ボックス名
ボックス3 『ついゥはぇぃおも』
ボックス8 『いぅふぃ』
ボックス9 『あィGイあぅ♀ぶ』
ボックス10 『   ためつい』
ボックス11 『   l99』
ボックス12 『 ィねあィ』
ボックス13 『あぅ め l99』
ボックス14 『   あもあも』

 

7回目

ボックス ボックス名
ボックス3 『ついゥはぇぃかも』
ボックス8 『あもあも』
ボックス9 『 l99あもあも』
ボックス10 『   あもあも』
ボックス11 『   l99』
ボックス12 『 あもあも』
ボックス13 『いぃあィあぇせれ』
ボックス14 『   xWあぅ』

 

8回目

ボックス ボックス名
ボックス3 『ついゥはぇぃきも』
ボックス8 『あィミび』
ボックス9 『 l996ばFば』
ボックス10 『   ィ♂ミ」』
ボックス11 『  ャ…ビぷ』
ボックス12 『 りレちむ』
ボックス13 『 l99ッぴァば』
ボックス14 『   けがDば』

 

9回目

ボックス ボックス名
ボックス3 『ついゥはぇぃくも』
ボックス8 『 l99』
ボックス9 『ヲl やんふりリ』
ボックス10 『    l99』
ボックス11 『  あけける』
ボックス12 『 いeたぅ』
ボックス13 『 l990ぅぅヤ』
ボックス14 『   そむあぞ』

 

10回目

ボックス ボックス名
ボックス3 『ついゥはぇぃけも』
ボックス8 『ける e』
ボックス9 『たぅ0ぅムヤあゅ』
ボックス10 『    l99』
ボックス11 『  いょあゃ』
ボックス12 『 おわおV』
ボックス13 『えわpWあょns』
ボックス14 『    l99』

 

11回目

ボックス ボックス名
ボックス3 『ついゥはぇぃこも』
ボックス8 『ィぷんふ』
ボックス9 『ぇふたゲ l99』
ボックス10 『   WゲVェ』
ボックス11 『  ちェっゲ』
ボックス12 『  l99』
ボックス13 『ダゲゾェアェ み』
ボックス14 『    l99』

 

12回目

ボックス ボックス名
ボックス3 『ついゥはぇぃさも』
ボックス8 『ぃツミツ』
ボックス9 『…ツミルえりきV』
ボックス10 『   ぞ たぃ』
ボックス11 『  ぅコたぃ』
ボックス12 『  l99』
ボックス13 『ぅイきlミンるむ』
ボックス14 『   ミエ…ン』

 

13回目

ボックス ボックス名
ボックス3 『ついゥはぇぃしも』
ボックス8 『れむミエ』
ボックス9 『 l99ァみィぃ』
ボックス10 『   ぃラ…ュ』
ボックス11 『   l99』
ボックス12 『 たょいバ』
ボックス13 『 みあゾ l99』
ボックス14 『   ノぶ ゾ』

 

14回目

ボックス ボックス名
ボックス3 『ついゥはぇぃすも』
ボックス8 『りレ む』
ボックス9 『 l99 め も』
ボックス10 『   ミぴィゃ』
ボックス11 『  ァばおが』
ボックス12 『 Dばはl』
ボックス13 『たょいバ l99』
ボックス14 『    みあゾ』

 

15回目

ボックス ボックス名
ボックス3 『ついゥはぇぃせも』
ボックス8 『タぶ ゾ』
ボックス9 『りレ む め も』
ボックス10 『    l99』
ボックス11 『  ニぴィゃ』
ボックス12 『 ァばけが』
ボックス13 『 l99Dばえl』
ボックス14 『   え…ミB』

 

16回目

ボックス ボックス名
ボックス3 『ついゥはぇぃそも』
ボックス8 『 l99』
ボックス9 『ィC6ばィ♂ミ」』
ボックス10 『    l99』
ボックス11 『  きふリば』
ボックス12 『 おぃョば』
ボックス13 『てsぷぷサぺょギ』
ボックス14 『   たみぃぞ』

 

17回目

ボックス ボックス名
ボックス3 『ついゥはぇぃたも』
ボックス8 『 l99』
ボックス9 『おVネルえりヤV』
ボックス10 『   あぃネム
ボックス11 『  ヒlみみ』
ボックス12 『  l99』
ボックス13 『ぃぞけVネル り』
ボックス14 『    l99』

 

18回目

ボックス ボックス名
ボックス3 『ついゥはぇぃちも』
ボックス8 『ヌVあぎ』
ボックス9 ネムセl l99』
ボックス10 『   ぞみぃぞ』
ボックス11 『  つVネル』
ボックス12 『  l99』
ボックス13 『えりいVFづうむ』
ボックス14 『   くぞるシ』

 

19回目

ボックス ボックス名
ボックス3 『ついゥはぇぃつも』
ボックス8 『あぅるエ』
ボックス9 『えりぴV l99』
ボックス10 『   りネ リ』
ボックス11 『  りムばl』
ボックス12 『 ィみぃぞ』
ボックス13 『そVネル l99』
ボックス14 『   えりえV』

 

20回目

ボックス ボックス名
ボックス3 『ついゥはぇぃても』
ボックス8 『Fづうむ』
ボックス9 『 l99くぞるシ』
ボックス10 『   あぐ ぐ』
ボックス11 『   l99』
ボックス12 『 osネル』
ボックス13 『えりとW l99』
ボックス14 『   たみ あ』

 

21回目

ボックス ボックス名
ボックス3 『ついゥはぇぃとも』
ボックス8 『ぃぞうV』
ボックス9 『るルたぅるムよl』
ボックス10 『   みみ あ』
ボックス11 『   l99』
ボックス12 『 ぃぞえV』
ボックス13 『えみるルたぐるム』
ボックス14 『   ひlあみ』

 

22回目

ボックス ボックス名
ボックス3 『ついゥはぇぃなも』
ボックス8 『 l99』
ボックス9 『ぃぞおVりネるル』
ボックス10 『    l99』
ボックス11 『  あミたl』
ボックス12 『 いみぃぞ』
ボックス13 『 l99ちVぎふ』
ボックス14 『   よぴァば』

 

23回目

ボックス ボックス名
ボックス3 『ついゥはぇぃにも』
ボックス8 『 l99』
ボックス9 『けがDばァsやぶ』
ボックス10 『    むあミ』
ボックス11 『  おlァば』
ボックス12 『 けがDば』
ボックス13 『 l99trミB』
ボックス14 『   ィCFば』

 

24回目

ボックス ボックス名
ボックス3 『ついゥはぇぃぬも』
ボックス8 『 けけせ』
ボックス9 『いそゼ  l99』
ボックス10 『    いう 』
ボックス11 『   えお 』
ボックス12 『  l99』
ボックス13 『っぇ くシょ く』
ボックス14 『    l99』

 

25回目

ボックス ボックス名
ボックス3 『ついゥはぇぃねも』
ボックス8 『ぶめ く』
ボックス9 『リギこく l99』
ボックス10 『    bうい』
ボックス11 『  シYうい』
ボックス12 『 どXうい』
ボックス13 『ネYういフYうい』
ボックス14 『    l99』

 

26回目

ボックス ボックス名
ボックス3 『ついゥはぇぃのも』
ボックス8 『   い』
ボックス9 『たv かとn  』
ボックス10 『   っv か』
ボックス11 『   l99』
ボックス12 『 Vv か』
ボックス13 『ねご く l99』
ボックス14 『   ワボのく』

 

27回目

ボックス ボックス名
ボックス3 『ついゥはぇぃはも』
ボックス8 『ゾも う』
ボックス9 『 l99トグこく』
ボックス10 『   わそ う』
ボックス11 『   l99』
ボックス12 『 ああああ』
ボックス13 『ああああああああ』
ボックス14 『   ああああ』

 

4)バイナリエディタ実行コードの設定


 

f:id:BZL:20190716073547p:plain

バイナリエディタを起動するためのコードになります。

このコードを呼び出した戦闘の終了直後にバイナリエディタが起動します。

ボックス ボックス名
ボックス2 『 ォめリば l』
ボックス3 『ついィはちべみぅ』
ボックス4 『リめヂ  l』
ボックス5 『さkすぶせべいふ』
ボックス6 『 むぇそぱ l』
ボックス7 『せFしぶ むあタ』
ボックス8 『 Gタあむ l』
ボックス9 『あメあぅだメうべ』
ボックス10 『 あチミBィC』
ボックス11 『   Vうい』
ボックス12 『 りぃ も』
ボックス13 『ぎせ うらい』

 

起動環境が整ったら後は好きなように遊んでください

 

おまけ


イベントスクリプトの実行


0x03000E40 <- 0x01
0x03000E41 <- 0x02
0x03000E44 <- 0x00000000(word)
0x03000E48 <- イベントスクリプトのアドレス(word)
0x03000E4C <- イベントスクリプトのアドレス(word)
0x03000E38 <- 0x00 ※このアドレスの上書きは必ず最後に行う

 

AGB_FIRMで3DSからGBAROMを起動する

必要なもの:

PC

CFW導入済み3ds

GBAのROMファイル

3DNUS

3DS GBA Footer Generator

3DS Simple GBA Converter

o3ds:Old3DS_AGB_FIRM_v3665_SignPatcher

n3ds:New3DS_AGB_FIRM_v4816_SignPatcher

 

GBAのVCを起動する方法について日本語で書かれた記事が見当たらないので適当に書き記しておきます

CFWやFBIを導入する方法については各自ggってください

英語読める方は素直に配布サイトの解説読んで進めた方がいいです

brickしても自己責任でお願いします

 

AGB_FIRMの導入

1.3DNUSを使用し以下のファイルをダウンロード(使用するファイルを誤るとbrickする危険性があります)

o3DS:0004013800000202 v3665

n3DS:0004013820000202 v4816

 

2.以下のツールでパッチ当て

o3DS:Old3DS_AGB_FIRM_v3665_SignPatcher

n3DS:New3DS_AGB_FIRM_v4816_SignPatcher

 

3.sysからFBIを起動してパッチ済みのciaをインストールします

f:id:BZL:20160316195555j:plain

destinationをNANDに指定します

インストールが完了すればAGB_FIRMの導入は成功です

 

自作VCの作成

ポケモンのROMを起動させたい方はROMの書き換えが必要になります

他のゲームを起動したい方は飛ばしてください

 

バイナリエディタでROMを開き「D0 88 8D 83 42」と検索

D0 88 8D 83 42 xx xx xx 24 10 49 10 68

または

D0 88 8D 83 42 xx xx xx xx 24 10 49 10 68

のような文字列が引っ掛かるはずです

 

この文字列の内「xx」の部分を全て「00」で埋めます

検索で引っ掛かった文字列には全てこの作業を行います

日本語不自由で上手く説明できてないと思うので参考サイトも読んでおいた方が良いかもしれません

参考サイト:https://gbatemp.net/threads/fixes-for-all-gba-pokemons-save-issue-with-agb_firm.390508/ 

 

1.3DS GBA Footer Generatorを使用してGBAのROMからftfファイルを作成

 

2.3DS Simple GBA Converterからciaを作成、使用する画像は同梱されているものでも構いません

パッケージやタイトルが気になる方は自作して、どうぞ

 

3.作成したciaをFBIからsys、emuの両方にインストール

f:id:BZL:20160316202206j:plain

ホーム画面に表示、起動できれば導入成功です

お疲れ様でした