r2frida:基于Frida的远程进程安全检测和通信工具

2024-06-25 09:27:56 浏览数 (2)

关于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:

代码语言:javascript复制
$ r2pm -ci r2frida

除此之外,我们也可以访问该项目的【https://github.com/nowsecure/r2frida/releases】下载最新版本的预编译r2frida。

工具编译

依赖

radare2 pkg-config(Windows不需要) curl or wget make, gcc npm, nodejs(即将去除)

在GNU/Debian中,我们可以使用下列命令安装工具所需依赖组件:

代码语言:javascript复制
$ sudo apt install -y make gcc libzip-dev nodejs npm curl pkg-config git

命令

代码语言:javascript复制
$ git clone https://github.com/nowsecure/r2frida.git$ cd r2frida$ make$ make user-install

工具使用

为了方便测试,这里使用「r2 frida://0」在Frida中连接到pid0,并且在本地运行。

现在,我们可以运行「:?」命令来获取可用的命令列表:

代码语言:javascript复制
$ 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代理文件路径

使用样例

代码语言:javascript复制
$ r2 frida://0     # 与frida -p 0相同,连接至一个本地会话

我们可以通过进程名称或pid连接、生成或启动任意进程,下列命令将连接到第一个名为rax2的进程:

代码语言:javascript复制
$ r2 frida://rax2   # 连接至第一个名为rax2的进程

$ r2 frida://1234  # 连接至指定pid

使用源码的绝对路径将生成一个进程:

代码语言:javascript复制
$ r2 frida:///bin/ls

[0x00000000]> :dc        # 目标应用程序继续执行

添加其他参数运行:

代码语言:javascript复制
$ r2 frida://"/bin/ls -al"

下列命令可以使用USB调试iOS/Android应用程序:

代码语言:javascript复制
$ r2 frida://spawn/usb/         # 枚举设备

$ r2 frida://spawn/usb//        # 枚举iOS设备中的应用程序

$ r2 frida://spawn/usb//Weather # 运行Weather天气App

命令解析

代码语言:javascript复制
:i         # 获取目标详情

.:i*        # 将目标进程详情导入至local r2

:?         # 显示所有可用命令

:dm       # 枚举映射,使用':dm|head'搜索程序基地址

:iE        # 枚举当前二进制的导出

:dt fread   # 跟踪'fread'函数

:dt-*      # 删除所有跟踪

许可证协议

本项目的开发与发布遵循MIT开源许可协议。

项目地址

r2frida:

https://github.com/nowsecure/r2frida

https://www.radare.org/ https://www.frida.re/

0 人点赞