トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

解説/FEBuilderGBA/逆アセンブラ_JP

Last-modified: 2018-01-13 (土) 10:52:09 (6d)

逆アセンブラ 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と違い以下の機能を持ちます

  1. すべてのLDR先のポインタをトレースできます。
  2. asmmapを利用し現在機能が判明している関数やメモリに対して、自動的に名前が付与されます。
  3. 画像などの他のデータの部分は簡略表記されます。
  4. 数字はすべて #0x1234 と、16進数表記で出力されます。

ただし、以下の制限があります。

  1. thumbモードにしか対応していません。

mapfileについて

FEBuilderGBAが知っているすべての情報が mapfileに出力されます。

  1. 変更できる構造体の情報 romfe*.cs
  2. disambleするromが保持している情報
  3. パッチファイルが提供するアドレスの情報
  4. ROMに存在するlz77圧縮データの情報
  5. 複数の連続する0x00 と 0xFFを空き領域として簡略表示
  6. 判明している関数とデータ領域の情報 /config/data/asmmap*.txt

しかし、まだまだ情報が足りません。 不明な関数について情報を知っている方は教えてください。 また、FEBuilderGBAが知っている構造体や、パッチなどの情報も逆アセンブラのmapfileとして利用するので、 パッチなどをあなたが投稿すればするほど、逆アセンブラも自動的に賢くなります。