文章总结: Frida17.0.0版本发布,废弃旧版API并进行现代化重构。主要变更包括移除回调式枚举及Sync后缀API,统一使用数组遍历;内存读写API改为指针链式调用;Module静态方法移除,改为通过Process对象获取模块。建议开发者安装frida-tools14.0.0,检查并更新所有Memory和Module相关代码调用以适配新版本。 综合评分: 90 文章分类: 二进制安全,逆向分析,安全工具
Frida 17 API 重大变更与迁移指南
原创
二进制磨剑
二进制磨剑
2025年8月4日 08:30 四川
Frida 17.0.0 发布:API 重大变更与迁移指南
最近,不少同学可能已经发现,部分 Frida 脚本在运行时突然报错。原因是 Frida 正式发布了全新的 17.0.0 版本,引入了若干重大 API 变更。本文将带你快速了解这些变化背后的设计思路,并提供迁移指南,帮助你及时更新脚本,避免工作中断。
废弃 Legacy-style Enumeration APIs
过去的模块枚举 API 采用了回调式的“伪异步”写法:
Process.enumerateModules({
onMatch(module) {
console.log(module.name);
},
onComplete() {}
});
后来,Frida 引入了 Sync 后缀版本(例如 enumerateModulesSync),但实际上大部分操作本质上都是同步的。于是现在 Frida 17.0.0 彻底移除了旧版 API,统一采用现代风格:
for (const module of Process.enumerateModules()) {
console.log(module.name);
}
迁移建议:
- • 删除所有
Sync后缀的 API 调用; - • 使用直接返回数组的现代 API 进行遍历。
Memory Read/Write API 现代化
Frida 旧版的内存访问 API 需要调用 Memory.readXXX 和 Memory.writeXXX:
const healthAddr = ptr('0x1234');
const health = Memory.readU32(healthAddr);
Memory.writeU32(healthAddr, 100);
Frida 17.0.0 采用链式调用的新写法:
const healthAddr = ptr('0x1234');
const health = healthAddr.readU32();
healthAddr.writeU32(100);
支持链式调用:
const playerData = ptr('0x1234');
playerData
.add(4).writeU32(13)
.add(4).writeU16(37)
.add(2).writeU16(42);
旧的 Memory.read/write 系列 API 已完全移除。
Module 静态 API 移除
以下静态方法被移除:
- Module.ensureInitialized()
- Module.findBaseAddress()
- Module.getBaseAddress()
- Module.findExportByName()
- Module.getExportByName()
- Module.findSymbolByName()
- Module.getSymbolByName()
迁移方法:
- •
Module.getExportByName('libc.so', 'open')→Process.getModuleByName('libc.so').getExportByName('open') - •
Module.getBaseAddress('libc.so')→Process.getModuleByName('libc.so').base - •
Module.getSymbolByName(null, 'open')→Module.getGlobalExportByName('open')
同时,所有 Module.enumerateXXX() 静态方法也被移除,改为通过 Process.getModuleByName() 获取模块后调用对应方法。
示例:
const libc = Process.getModuleByName('libc.so');
const openImpl = libc.getExportByName('open');
const readImpl = libc.getExportByName('read');
这样不仅可读性更强,还能避免重复查找模块带来的性能开销。
构建与开发体验改进
- • 移除了 Gum 对 Node.js + npm 的依赖;
- • 不再需要 JavaScript bundler,构建速度显著提升;
- • ESM 支持让 TypeScript + frida-compile 开发体验更流畅。
迁移总结
| 旧 API | 新 API |
| — | — |
| Memory.readU32(ptr) | ptr.readU32() |
| Memory.writeU32(ptr, v) | ptr.writeU32(v) |
| Module.getExportByName() | Process.getModuleByName().getExportByName() |
| Module.getBaseAddress() | Process.getModuleByName().base |
| 回调式enumerateModules | for...of Process.enumerateModules() |
结语
Frida 17.0.0 是一次面向未来的重构,让 API 更加一致、现代化且可维护。如果你一直使用 TypeScript 绑定,大部分变更几乎无感。但如果你还在使用旧版 API,请尽快迁移。
升级建议:
- 1. 安装
frida-tools 14.0.0以获得内置桥接器;- 2. 检查所有
Memory.*和Module.*静态调用;- 3. 更新到现代化的枚举写法。
学习资源
立即关注【二进制磨剑】公众号
👉👉👉【IDA 技巧合集】👈👈👈
👉👉👉【Github 安全项目合集】👈👈👈
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:二进制磨剑 二进制磨剑《Frida 17 API 重大变更与迁移指南》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。












评论