MASTG-TOOL-0036: r2frida

r2frida 是一个项目,它允许 radare2 连接到 Frida,从而有效地将 radare2 强大的逆向工程能力与 Frida 的动态工具包相结合。r2frida 可以在 Android 和 iOS 上使用,允许你:

  • 通过 USB 或 TCP 将 radare2 附加到任何本地进程或远程 frida-server。
  • 从目标进程读取/写入内存。
  • 将 Frida 信息(如映射、符号、导入、类和方法)加载到 radare2 中。
  • 从 Frida 调用 r2 命令,因为它将 r2pipe 接口暴露到 Frida JavaScript API 中。

请参考 r2frida 的官方安装说明

在 frida-server 运行的情况下,您现在应该能够使用 PID、spawn 路径、主机和端口或设备 ID 附加到它。例如,要附加到 PID 1234

r2 frida://1234

有关如何连接到 frida-server 的更多示例,请参阅 r2frida 的 README 页面中的使用部分

以下示例是使用 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 格式输出搜索结果,我们只需将 j 添加到我们之前的搜索命令(就像我们在 r2 shell 中所做的那样)。 这可以用于大多数命令

[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 命令 ~ 过滤结果。 例如,以下命令将列出与关键字 keystoresslcrypto 匹配的已加载库

[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 的示例。