frida17.0.0 api变化
前段时间发现新装的frida ts type-hint突然不能提示Java类了,去frida.re上查了发现frida17.0.0改了很多Api,还把一些Api迁移到了独立的模块里,开一篇文章记录一下
获取类型补全
frida17新加了一个frida-pm
包管理器,归在frida-tools这个python包下,运行frida-pm search
就可以查目前可以下载哪些包
Java类的就是全部移到frida-java-bridge
中了,运行frida-pm install frida-java-bridge
安装对应包后在ts中导入即可
1 | import Java from "frida-java-bridge" |
frida17同时添加了frida-compile
这个工具,用于将ts转换为js,算是官方提供的支持,运行frida-compile your_script.ts -o your_script.js
即可,输出产物和tsc
输出的还是有很大不同的,把很多依赖也静态加载到产物里了
其他变化
这部分内容基本摘自 https://frida.re/news/ 只列举一些比较重要的变化
异步
终于有人发现enumerate系列的异步函数没啥软用了,现在enumerateXXX不再有Sync和非Sync的区别,只有同步的版本,下面这个摘自 frida.re 的例子就是新版本使用枚举函数(讲道理这样感觉正常多了)
1 | for (const module of Process.enumerateModules()) { |
内存读写
现在内存读写被规范为只能在包装的指针上调用读写方法(ptr),然后支持了链式调用(也看起来正常多了)
1 | const playerHealthLocation = ptr('0x1234'); |
1 | const playerData = ptr('0x1234'); |
模块(Module) API
原先通过模块获取符号又很多种写法,现在重新规范了相关的apiModule.getSymbolByName("libc.so","open")
正式被删除了
现在使用Module.getGlobalExportByName('open')
看起来好像也正常多了
然后现在从指定模块种获取相关信息需要先调用Process.getModuleByName
获取模块对象,然后再调用相关方法
1 | const libc = Process.getModuleByName('libc.so'); |
事实上这种路径在老版本也适用,只是新版本删除了其他的路径,精简了api
frida17.0.0 api变化