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 动态分析脚本直接注入到指定进程中执行

常用命令 frida-tools

frida-ps

# 查看进程列表 -U 代表usb设备
frida-ps -U
# a 代表只显示应用程序
frida-ps -Ua
# 已安装应用程序列表,如果已启动,则展示进程号pid
frida-ps -Uai
# 指定设备udid查看进行,针对同时连接多个udid的设备
frida-ps -D 22a39c54401e19dbcc961d35932a1ab31de42782

frida-kill

杀死进程 process name or pid

frida-kill -U Autohome
frida-kill -U 21233

frida-ls-devices

查看电脑连接的iOS设备信息

frida-ls-devices

frida-trace

用于追踪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

其他命令