之前我们已将详细描述过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("应用名")
script = session.create_script(script_content) script.load()
script.exports.simulateCalendarPriceRequest(1397051404)
|
文件说明
calendar_price.ts
- TypeScript 源码
_agent.js
- 编译后的 JavaScript 文件(用于 Frida)
package.json
- 包含编译脚本的配置
注意事项
- 新版本 Frida 需要显式导入所需的 bridge
- 编译步骤是必须的,Python里不能直接运行 TypeScript 文件
- 如果遇到其他 bridge(如 Swift bridge)的问题,可能需要额外处理
更多Frida用法,参考 https://www.yao23.com.cn/2023/07/20/frida/ 。