Frida是一个跨平台的轻量级Hook框架,支持所有主流操作系统,它可以帮助逆向研究人员对指定的进程进行分析。 它主要提供了精简的Python接口和功能丰富的JS接口,除了使用自身的控制台交互以外,还可以利用Python将JS脚本库注入目标进程。 使用Frida可以获取进程详细信息、拦截和调用指定函数、注入代码、修改参数、从iOS应用程序中dump类和类方法信息等。
https://github.com/frida/frida
uv add frida-tools # Python bindings
npm install frida # Node.js bindings
frida --version # 判断是否安装成功
| 工具 | 备注 |
|---|---|
| frida-tools | Frida工具库 |
| frida-server | Frida的服务端组件,负责驱动和连接手机端与电脑端,注入和执行动态分析脚本。 |
| frida-gadget | Frida官方的嵌入式模块,用于在应用内部嵌入Frida工具 |
| frida-inject | 将自己的 JavaScript 动态分析脚本直接注入到指定进程中执行 |
# 查看进程列表 -U 代表usb设备
frida-ps -U
# a 代表只显示应用程序
frida-ps -Ua
# 已安装应用程序列表,如果已启动,则展示进程号pid
frida-ps -Uai
# 指定设备udid查看进行,针对同时连接多个udid的设备
frida-ps -D 22a39c54401e19dbcc961d35932a1ab31de42782
杀死进程 process name or pid
frida-kill -U Autohome
frida-kill -U 21233
查看电脑连接的iOS设备信息
frida-ls-devices
用于追踪iOS应用的方法调用,当然我们使用某个功能时,如果这个功能调用的方法包含有我们需要追踪的方法,则会打印出来。中括号中前面的表示类,后面的表示方法,可填写具体类名、方法名,也可用正则表示
// 设备相关
-D 连接到指定的设备,多个设备时使用。示例:frida-trace -D 555315d66cac2d5849408f53da9eea514a90547e -F
-U 连接到USB设备,只有一个设备时使用。示例fria-trace -U -F
// 应用程序相关
-f 目标应用包名。spawn模式。示例:frida-trace -U -f com.apple.www
-F 当前正在运行的程序。attach模式示例。示例:frida-trace -U -F或frida-trae -UF
-n 正在运行的程序的名字。attach模式。示例:frida-trace -U -n QQ
-N 正在运行的程序的包名。attach模式。示例:frida-trace -U -N com.apple.www
-p 正在运行的程序的pid。attach模式。示例:frida-trace -U -p 2302
// 方法相关,以下参数在一条跟踪命令中可重复使用
-I 包含模块。示例:frida-trace -UF -I "libcommonCrypto*"
-X 不包含模块。示例:frida-trace -UF -X "libcommonCrypto*"
-i 包含c函数。示例:frida-trace -UF -i "CC_MD5"
-x 不包名c函数。示例:frida-trace -UF -i "*MD5" -x "CC_MD5"
-a 包含模块+偏移跟踪。示例:frida-trace -UF -a 模块名\\!0x7B7D48
-m 包含某个oc方法。示例:frida-trace -UF -m "+[NSURL URLWithString:]"
-M 不包含某个oc方法。示例:frida-trace -UF -M "+[NSURL URLWithString:]"
// 日志相关
-o 日志输出到文件。示例:frida-trace -UF -m "*[* URL*]" -o run.log
# 实际案例
frida-trace -U -i "CCCryptorCreate*" BitAutoPlusStore
frida-trace -U -m "+[BMLogTools osVersion]" BitAutoPlusStore