MASTG-TOOL-0036 r2frida
r2frida は、radare2 を Frida に接続できるプロジェクトであり、radare2 の強力なリバースエンジニアリング機能と Frida の動的計装ツールキットを効果的に融合しています。r2frida は Android と iOS の両方で使用でき、以下のことが可能です。
USB または TCP 経由で、任意のローカルプロセスまたはリモート frida-server に radare2 をアタッチします。
ターゲットプロセスからのメモリを読み書きします。
マップ、シンボル、インポート、クラス、メソッドなどの Frida 情報を radare2 にロードします。
Frida Javascript API に r2pipe インタフェースを公開して、Frida から r2 コマンドを呼び出します。
r2frida の公式インストール手順 を参照してください。
frida-server が実行中であれば、pid、spawn パス、ホストとポート、デバイス ID を使用してアタッチできるはずです。たとえば PID 1234 にアタッチするには以下のようにします。
r2 frida://1234
frida-server への接続方法のさまざまな例については、r2frida の README ページの usage セクションを参照してください 。
以下の例は Android アプリを使用して実行していますが、iOS アプリにも適用できます。
r2frida セッションに入ると、すべてのコマンドは :
または =!
で始まります。たとえば、radare2 ではバイナリ情報を表示するために i
を実行しますが、r2frida では :i
を使用します。
r2 frida://?
ですべてのオプションを表示します。
[0x00000000]> :i
arch x86
bits 64
os linux
pid 2218
uid 1000
objc false
runtime V8
java false
cylang false
pageSize 4096
pointerSize 8
codeSigningPolicy optional
isDebuggerAttached false
メモリ内で特定のキーワードを検索するには、検索コマンド :/
を使用します。
[0x00000000]> :/ unacceptable
Searching 12 bytes: 75 6e 61 63 63 65 70 74 61 62 6c 65
Searching 12 bytes in [0x0000561f05ebf000-0x0000561f05eca000]
...
Searching 12 bytes in [0xffffffffff600000-0xffffffffff601000]
hits: 23
0x561f072d89ee hit12_0 unacceptable policyunsupported md algorithmvar bad valuec
0x561f0732a91a hit12_1 unacceptableSearching 12 bytes: 75 6e 61 63 63 65 70 74 61
検索結果を JSON 形式で出力するには、前の検索コマンドに (r2 シェルで行うのと同様に) j
を追加するだけです。これはほとんどのコマンドで使用できます。
[0x00000000]> :/j unacceptable
Searching 12 bytes: 75 6e 61 63 63 65 70 74 61 62 6c 65
Searching 12 bytes in [0x0000561f05ebf000-0x0000561f05eca000]
...
Searching 12 bytes in [0xffffffffff600000-0xffffffffff601000]
hits: 23
{"address":"0x561f072c4223","size":12,"flag":"hit14_1","content":"unacceptable \
policyunsupported md algorithmvar bad valuec0"},{"address":"0x561f072c4275", \
"size":12,"flag":"hit14_2","content":"unacceptableSearching 12 bytes: 75 6e 61 \
63 63 65 70 74 61"},{"address":"0x561f072c42c8","size":12,"flag":"hit14_3", \
"content":"unacceptableSearching 12 bytes: 75 6e 61 63 63 65 70 74 61 "},
...
ロードされたライブラリをリストするには、コマンド :il
を使用し、コマンド ~
で radare2 内部の grep を使用して結果をフィルタします。たとえば、以下のコマンドは keystore
、ssl
、crypto
というキーワードにマッチするロードされたライブラリをリストします。
[0x00000000]> :il~keystore,ssl,crypto
0x00007f3357b8e000 libssl.so.1.1
0x00007f3357716000 libcrypto.so.1.1
同様に、エクスポートをリストし、特定のキーワードで結果をフィルタするには、以下のようにします。
[0x00000000]> :iE libssl.so.1.1~CIPHER
0x7f3357bb7ef0 f SSL_CIPHER_get_bits
0x7f3357bb8260 f SSL_CIPHER_find
0x7f3357bb82c0 f SSL_CIPHER_get_digest_nid
0x7f3357bb8380 f SSL_CIPHER_is_aead
0x7f3357bb8270 f SSL_CIPHER_get_cipher_nid
0x7f3357bb7ed0 f SSL_CIPHER_get_name
0x7f3357bb8340 f SSL_CIPHER_get_auth_nid
0x7f3357bb7930 f SSL_CIPHER_description
0x7f3357bb8300 f SSL_CIPHER_get_kx_nid
0x7f3357bb7ea0 f SSL_CIPHER_get_version
0x7f3357bb7f10 f SSL_CIPHER_get_id
ブレークポイントをリストまたは設定するには、コマンド db を使用します。これはメモリを解析/変更する際に便利です。
[0x00000000]> :db
最後に、:.
にスクリプト名を加えることで、Frida JavaScript コードを実行できることも覚えておいてください。
[0x00000000]> :. agent.js
Wiki プロジェクトの r2frida の使い方 に多くの例があります。
Last updated
Was this helpful?