理解しようとしている難読化されたaarch64 (64 ビット ARM、別名 armv8) バイナリがあります。このプログラムは、マシンの命令を .data セクションからデコード/復号化し、それらをメモリに格納してから、このアドレスにジャンプします。
次の gdb コマンドを使用して、マシンの命令を取得できます。前述のように、これらの命令は objdump を使用して取得することはできません。これは、これらの命令がエンコード/暗号化されており、実行時にバイナリによって復号化されるためです。
set log on
x/2000i 0x******
set log off
これによりgdb.txt
、作業ディレクトリに aarch64 アセンブリ リストを含むファイルが生成されます。
[...]
0x400ee4: svc #0x0
0x400ee8: orr x3, x0, x0
0x400eec: mov w2, w3
0x400ef0: mov w1, #0x1 // #1
0x400ef4: orr x0, x20, x20
0x400ef8: bl 0x402660 // Jump instr
0x400efc: mov w1, #0x3 // #3
0x400f00: orr x0, x20, x20
[...]
できるようにしたい:
- ショートカットを使用してアドレスにジャンプする:たとえば
0x402660
、命令をクリックしてbl 0x402660
F3 を押して、 で始まる行にジャンプできるようにしたいと考えています0x402660
。また、別のショートカットを使用していた場所に戻れるようにしたいと考えています。 - 制御フロー/グラフを生成する
もちろん、機能するツール/スクリプトの任意の組み合わせを提案できます (つまり、これを行う最善の方法は、Excel にリストをインポートして VB マクロを作成することであると思われる場合でも、それでかまいません)。ただし、私は aarch64 バイナリを使用しており (非常に多くのツールがこのアーキテクチャと互換性がありません)、私のバイナリは実行時にマシン コードをデコードすることに注意してください。