APP算法分析
Frida17更新后,代码补全功能变得麻烦了。
nodejs和vscode没什么好说的,直接一路安装,自己再装上几个顺手的插件即可。
frida-node需要注意一下版本,本质是Frida 的Node.js 绑定
1 | PS D:\data\code\APK\tiaoshi> frida --version |
另外,看了下资料,在frida17中,出现了架构变化
- Frida ≤16:
Java是 GumJS 全局变量,脚本里直接写Java.perform能跑也能猜类型 - Frida 17+:
Java/ObjC/Swift桥被拆出去,不默认注入- 运行时要用必须:
import Java from "frida-java-bridge" - 但
fridaCLI/REPL 为了兼容老脚本,会临时给你挂一下全局Java,所以能跑但编辑器不知道类型
自动补全功能无了。所以要稍微配置一下
- 运行时要用必须:
- 安装两个关键插件
1 | npm install --save-dev @types/frida-gum |
npm install 默认把包写进 package.json 的 dependencies;加 –save-dev(简写 -D)就写进 devDependencies。一个是生产环境,一个是开发环境。区别如下:
| dependencies | devDependencies | |
|---|---|---|
| 含义 | 运行时需要 | 只在开发/构建时需要 |
npm install(生产) |
装 | 装(默认) |
npm install --production / --omit=dev |
装 | 不装 |
别人 npm i 你的包 |
装 | 装 |
| 作为库被依赖时 | 装 | 不装 |
判断标准:
1 | 代码跑起来时还需要它吗? |
frida-gum只含 .d.ts,不含运行时代码,作用是写 Agent(TS)时有补全、类型检查。不提供Java.use等。
是GumJS 里的Java/ART/Dalvik 桥接库,被注入到目标 App 的 Agent 脚本里,提供Java.perform / Java.use / Java.choose / Java.cast。
功能区别:
- frida-gum:是 Frida 注入到目标进程后的原生插桩引擎(C 层 + GumJS 全局 API)。
Interceptor/Memory/Module/Process/NativeFunction这些全局直接可用,不需要你 import 任何包。 - @types/frida-gum:只是 TS 类型声明,编译完就消失,运行时完全不需要。
- frida-java-bridge:只在你要操作Java/Kotlin 层时才需要(Frida 17+ 要显式装、显式 import)。
然后将node_modules@types\frida-gum模块中的index.d.ts复制到要写ts的文件夹下。
在自己的demo.ts文件开头输入下面两句话,则代码补全功能回来了:
1 | /// <reference path="./index.d.ts" /> |
写完ts后记得编译成js,然后运行
1 | npx frida-compile demo.ts -o demo.js |
补充扩展
整体链路
1 | 你的 Node 进程 |
frida-node 只跟 本机 frida-core 说话;本机 frida-core 再跟远端 frida-server 通信。