[Top]
GBA PARマスターコードのサーチ方法(暫定版)
■用意するもの
・バイナリエディタ(SFXなど)
・デバッガ付きエミュレータ(batgbaがお勧めかな・・)
■サーチ手順
まず、バイナリエディタで、ROMファイルを開いて、0x04000130という数値を検索します。
SFXなら「l04000130h」で検索すればOKです。
いくつかの候補が見つかりますが、とりあえず一番最初のオフセットアドレスに注目してください。
以下の例では0000680Hになります。

次に、このオセットアドレスに+8000000hした値(8000680)近辺を逆アセンブル(※)で確認すると、先ほど検索した4000130Hをロードしている命令(l以下の例では「ldr r1, =#0x4000130])を見つけることができます。
たいていの場合、この命令の直後にあるadd命令のアドレスをフックすればOKのようです。add命令がなければ、4000130Hをロードしている命令以降の適当なALU関連の命令(ldとかorとか)を狙ってやればよい感じです。
※ARM CPUには、ARM命令セットとTUMB命令セットの2種類があるので逆アセンブル際には注意してください。GBAのゲームの場合、大抵はTUMB命令セットです。batgbaで命令セットを切り替えるには、CPUウィンドウを表示([Debug]→[View]→[CPU])して、codeのとなりのボタンをクリックします。

なお、ゲームによっては、上の例のように一発でフックアドレスを特定できない場合もあります。その場合は、次の4000130Hをロードしている命令近辺を狙ってみるなどします。。
■コード化
上の例では、8000620にフックすれば良いことになるので、マスターコードは
F8000620 00000101
となります。後はこれを暗号化すればOKです。
ゲームコードの部分を付加した場合は、次のようになります。
F8000620 00000101
4A4F5441 001DC0DE