关于r2frida
r2frida是一款能够将Radare2和Frida的功能合二为一的强大工具,该工具本质上是一个Radare2的自包含插件,可以帮助广大研究人员利用Frida的功能实现对目标进程的远程安全检测和通信管理。
Radare2项目提供了针对逆向工程分析的完整工具链,功能也比较稳定,而且还支持利用其他编程语言和工具来扩展其功能。而Frida则是一个动态指令工具包,可以通过注入JavaScript代码来对正在运行的目标进程执行检测和操作,而且还可以与脚本进行通信。
功能介绍
1、运行未修改的Frida脚本(使用:.命令);
2、在任意进程中执行C、JavaScript或TypeScript代码段;
3、支持在本地或远程系统连接、生成或启动进程;
4、枚举内存区域富豪、导出、协议、类和方法;
5、在代理内部或主机的内存中搜索值;
6、使用短命令替换方法实现或创建钩子;
7、在目标进程中加载库或框架;
8、支持Dalvik、Java、ObjC、Swift和C接口;
9、操作文件描述符和环境变量;
10、向进程和断点发送信号;
11、读/写进程内存;
12、调用函数、系统调用和原始代码段;
13、通过USB或TCP/IP连接Frida服务器;
14、枚举应用程序和进程;
15、跟踪寄存器、参数和函数;
16、已在Linux、Windows、macOS、iOS和Android的x64、arm32和arm64上测试;
17、不需要在主机中安装Frida;
18、支持使用代理运行的插件扩展r2frida命令;
19、...
工具安装
广大研究人员可以直接通过r2pm安装r2frida:
$ r2pm -ci r2frida
除此之外,我们也可以访问该项目的【Releases页面】下载最新版本的预编译r2frida。
工具编译
依赖
radare2
pkg-config(Windows不需要)
curl or wget
make, gcc
npm, nodejs(即将去除)
在GNU/Debian中,我们可以使用下列命令安装工具所需依赖组件:
$ sudo apt install -y make gcc libzip-dev nodejs npm curl pkg-config git
命令
$ git clone https://github.com/nowsecure/r2frida.git
$ cd r2frida
$ make
$ make user-install
工具使用
为了方便测试,这里使用"r2 frida://0"在Frida中连接到pid0,并且在本地运行。
现在,我们可以运行":?"命令来获取可用的命令列表:
$ r2 'frida://?'
r2 frida://[action]/[link]/[device]/[target]
* action = list | apps | attach | spawn | launch
* link = local | usb | remote host:port
* device = '' | host:port | device-id
* target = pid | appname | process-name | program-in-path | abspath
Local:
* frida://? # 显示工具帮助信息和退出
* frida:// # 枚举本地进程
* frida://0 # 连接至frida-helper
* frida:///usr/local/bin/rax2 # 生成进程的绝对路径
* frida://rax2 # 生成进程的相对路径local/bin需在PATH中设置
* frida://spawn/$(program) #在当前系统生成一个新的进程
* frida://attach/(target) # 在当前主机连接至目标PID
USB:
* frida://list/usb// # 枚举第一个USB设备的进程
* frida://apps/usb// # 枚举第一个USB设备的应用程序
* frida://attach/usb//12345 # 连接至第一个USB设备的给定pid
* frida://spawn/usb//appname # 在第一个USB设备中生成一个App
* frida://launch/usb//appname # 在第一个USB设备中生成+恢复一个App
Remote:
* frida://attach/remote/10.0.0.3:9999/558 # 连接远程frida-server的pid 558
R2FRIDA_SAFE_IO=0|1 # 解决Android/thumb上的Frida问题
R2FRIDA_DEBUG=0|1 # 用于调试参数解析行为
R2FRIDA_COMPILER_DISABLE=0|1 # 禁用新的Frida TypeScript编译器(`:. foo.ts`)
R2FRIDA_AGENT_SCRIPT=[file] # r2frida代理文件路径
使用样例
$ r2 frida://0 # 与frida -p 0相同,连接至一个本地会话
我们可以通过进程名称或pid连接、生成或启动任意进程,下列命令将连接到第一个名为rax2的进程:
$ r2 frida://rax2 # 连接至第一个名为rax2的进程
$ r2 frida://1234 # 连接至指定pid
使用源码的绝对路径将生成一个进程:
$ r2 frida:///bin/ls
[0x00000000]> :dc # 目标应用程序继续执行
添加其他参数运行:
$ r2 frida://"/bin/ls -al"
下列命令可以使用USB调试iOS/Android应用程序:
$ r2 frida://spawn/usb/ # 枚举设备
$ r2 frida://spawn/usb// # 枚举iOS设备中的应用程序
$ r2 frida://spawn/usb//Weather # 运行Weather天气App
命令解析
:i # 获取目标详情
.:i* # 将目标进程详情导入至local r2
:? # 显示所有可用命令
:dm # 枚举映射,使用':dm|head'搜索程序基地址
:iE # 枚举当前二进制的导出
:dt fread # 跟踪'fread'函数
:dt-* # 删除所有跟踪
许可证协议
本项目的开发与发布遵循MIT开源许可协议。
项目地址
r2frida :【GitHub传送门】