自上次发布以来,@hsorbo 和我在众多令人兴奋的技术上进行了非常愉快的结对编程。让我们直接开始。
Swift
我们为 Swift 引入了一个全新的 ApiResolver,可以像这样使用:
const r = new ApiResolver('swift');
r.enumerateMatches('functions:*CoreDevice!*RemoteDevice*')
.forEach(({ name, address }) => {
console.log('Found:', name, 'at:', address);
});另外还有一个令人兴奋的新版 frida-tools 12.3.0,它利用新 ApiResolver 为 frida-trace 添加了 Swift 跟踪支持:
$ frida-trace Xcode -y '*CoreDevice!*RemoteDevice*'模块
我们的 Module API 现在还提供 enumerateSections() 和 enumerateDependencies()。当你希望在已加载模块中扫描特定节名时,现有的 module ApiResolver 现在能让你轻松做到:
const r = new ApiResolver('module');
r.enumerateMatches('sections:*!*text*/i')
.forEach(({ name, address }) => {
console.log('Found:', name, 'at:', address);
});结束语
还有许多其他令人兴奋的变更,请务必查看下方的变更日志。
祝使用愉快!
变更日志
- swift-api-resolver:添加全新的 Swift API Resolver。
- module-api-resolver:支持解析节。
- api-resolver:向匹配结果添加可选 size 字段。
- module:添加 enumerate_sections()。
- module:添加 enumerate_dependencies()。
- device:添加 unpair()。目前只为 iOS 设备实现。
- compiler:将 frida-compile 升级到 16.4.1,将 @types/frida-gum 升级到 18.4.5。
- gdb:处理空响应数据包。
- gdb:处理对功能文档请求的错误回复。
- darwin-mapper:加载时初始化 TLV 描述符。感谢 @fabianfreyer!
- darwin-module:添加线程局部变量 API。感谢 @fabianfreyer!
- darwin-module:小幅优化导出项枚举。
- elf-module:改进节 ID 的生成。
- x86-writer:添加基于寄存器到寄存器的 {fs,gs} MOV 指令。感谢 @fabianfreyer!
- arm64-writer:添加 MRS 指令。感谢 @fabianfreyer!
- arm64-writer:添加 UBFM、LSL 和 LSR 指令。感谢 @fabianfreyer!
- relocator:改进 arm64 上的临时寄存器策略。
- interceptor:使用计算出的临时寄存器分支到 trampoline。
- interceptor:在 arm64 上重定位微小目标。
- linux:处理被禁用的 process_vm_{read,write}v()。感谢 @Pyraun!
- server:在无 root iOS 上使用 sysroot 存放临时文件。感谢 @fabianfreyer!
- gumjs:修复 Interceptor 不存在时 File 和 Database 中的崩溃。感谢 @mrmacete!
- gumjs:修复 32 位大端系统上从数字构造 NativePointer 的问题(#752)。感谢 @forky2!
- gumjs:将 frida-swift-bridge 升级到 2.0.7。
- ci:发布 Node.js 20 和 21 以及 Electron 27 的预构建版本。
- ci:暂时不发布 Swift 绑定。有一个长期存在的海森堡错误,会导致 x86_64 slice 随机损坏,进而使 CI 发布作业失败。考虑到使用下载的 core devkit 在本地构建这些绑定非常容易,而我短期内也不想在这上面投入时间,因此只是删除该发布资产似乎是最佳方案。
oleavr