Frida新版本(17)大变革

之前我们已将详细描述过Frida的用法,见文档 https://www.yao23.com.cn/2023/07/20/frida/
不过近期Frida升级到17版本之后,进行了大的变革。

变动描述

从 Frida 17.0.0 开始,在Python中调用Frida脚本代码时候,ObjC 对象不再作为全局变量自动可用,需要显式导入 frida-objc-bridge,否则报错ObjC is not defined,参考:https://github.com/frida/frida/issues/3460

Frida 在命令行直接调试是不影响的,主要是Python调用的代码,需要打包。

解决方案

1. 使用 frida-compile(推荐)

这是新版本 Frida 的标准做法:

1
2
3
4
5
6
7
# 安装必要的依赖
npm install --save-dev frida-compile
npm install frida-objc-bridge
npm install --save-dev @types/frida-gum

# 或者直接运行
npx frida-compile -S -c calendar_price.ts -o _agent.js

2. 在 Python 中使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import frida

# 读取编译后的脚本
with open('_agent.js', 'r') as f:
script_content = f.read()

# 连接设备和应用
device = frida.get_usb_device()
session = device.attach("应用名") # 或使用 bundle ID

# 创建和加载脚本
script = session.create_script(script_content)
script.load()

# 调用函数
script.exports.simulateCalendarPriceRequest(1397051404)

文件说明

  • calendar_price.ts - TypeScript 源码
  • _agent.js - 编译后的 JavaScript 文件(用于 Frida)
  • package.json - 包含编译脚本的配置

注意事项

  1. 新版本 Frida 需要显式导入所需的 bridge
  2. 编译步骤是必须的,Python里不能直接运行 TypeScript 文件
  3. 如果遇到其他 bridge(如 Swift bridge)的问题,可能需要额外处理

更多Frida用法,参考 https://www.yao23.com.cn/2023/07/20/frida/