====== 逆アセンブラ FEBuilderGBAを利用したROM解析(hacker用) ====== FEBuilderGBAはGBAFEを簡単に改造するためのツールですが、\\ 本格的にコードを解析したい方を手助けすることもできます。\\ \\ 今回は、解析の基礎となる逆アセンブラとマップファイルを紹介します。\\ \\ \\ ====== 逆アセンブラ ====== FEBuilderGBAは独自の逆アセンブラルーチンと、マップファイル生成ルーチンを搭載しています。\\ これを利用すると、コメントが自動的に挿入された asmソースコードを取得することができます。\\ こういうソースコードが生成されます。 08E4F6E0 B500 push {, lr} 08E4F6E2 46C0 mov r8, r8 08E4F6E4 4B05 ldr r3, [pc, #0x14] # pointer:08E4F6FC -> 0202BCF4 (所持金 ) 08E4F6E6 6819 ldr r1, [r3, #0x0] # pointer:0202BCF4 (所持金 ) 08E4F6E8 2000 mov r0, #0x0 08E4F6EA 46C0 mov r8, r8 08E4F6EC 4A04 ldr r2, [pc, #0x10] # pointer:08E4F700 08E4F6EE 4291 cmp r1 ,r2 08E4F6F0 DB00 blt #0x8e4f6f4 08E4F6F2 2001 mov r0, #0x1 08E4F6F4 4A03 ldr r2, [pc, #0xc] # pointer:08E4F704 -> 030004B0 (データ イベント命令40050000XXXXXXXXで詰まれる数字 ) 08E4F6F6 6310 str r0, [r2, #0x30] # pointer:030004E0 08E4F6F8 2000 mov r0, #0x0 08E4F6FA BD00 pop {, lr} 08E4F6FC BCF4 0202 //LDRDATA 08E4F700 C350 0000 //LDRDATA 08E4F704 04B0 0300 //LDRDATA ===== StepA01 ===== メニューから、ツール->逆アセンブラ を選択してください。\\ {{ https://i.imgur.com/Y0oSzvT.jpg }} ===== StepA02 ===== 逆アセンブラをみたい関数のアドレスを入れれば、その内容が表示されます。\\ \\ ただ、どこに何の関数があるかはわかりません。\\ ここでは、すべてのソースコードを取得してみましょう。\\ \\ 「全部ファイルに出力する」を選択してください。\\ {{ https://i.imgur.com/FqhJSoD.jpg }} ===== StepA03 ===== ASMソースコードを出力するか、IDAにimportするmapfileを作成するか選択することができます。\\ 最新版では、no$gba debugger用の symファイルも作成できます。\\ \\ とりあえず、今回は、ASMソースコードを生成します。\\ ASMソースコードを生成するには、1時間ほど時間がかかるので、寝る前に実行することをお勧めします。\\ {{ https://i.imgur.com/fxIsbFe.jpg }} ===== StepA04 ===== 指定したファイルにasmが延々と出力されます。\\ だいたい1時間かかります。\\ {{ https://i.imgur.com/16fcu45.jpg }} ====== disarmとの違い ====== FEBuilderGBAは、disarmと違い以下の機能を持ちます\\ - すべてのLDR先のポインタをトレースできます。 - asmmapを利用し現在機能が判明している関数やメモリに対して、自動的に名前が付与されます。 - 画像などの他のデータの部分は簡略表記されます。 - 数字はすべて #0x1234 と、16進数表記で出力されます。 ただし、以下の制限があります。 - thumbモードにしか対応していません。 ====== mapfileについて ====== FEBuilderGBAが知っているすべての情報が mapfileに出力されます。 - 変更できる構造体の情報 romfe*.cs - disambleするromが保持している情報 - パッチファイルが提供するアドレスの情報 - ROMに存在するlz77圧縮データの情報 - 複数の連続する0x00 と 0xFFを空き領域として簡略表示 - 判明している関数とデータ領域の情報 /config/data/asmmap*.txt しかし、まだまだ情報が足りません。 不明な関数について情報を知っている方は教えてください。 また、FEBuilderGBAが知っている構造体や、パッチなどの情報も逆アセンブラのmapfileとして利用するので、 パッチなどをあなたが投稿すればするほど、逆アセンブラも自動的に賢くなります。