如何在vscode里优雅地用typescript编写FridaScript

作为一个不懂 js 的人,每次用的时候都觉得它的弱类型非常反人类,于是改用 typescript,并且 frida 完美支持 ts,本文记录一下如何优雅地在 vscode 里使用 ts 开发 FridaScript。(本质上只要支持 package.json 和 tsconfig.json 的 IDE 都可以,Windows/MacOS都可以)

一、环境准备

准备好以下环境:nodejs(npm),vscode,frida。

官方链接:https://github.com/oleavr/frida-agent-example 其实本文内容和官方链接基本是一致的,读者喜欢看官方就看官方,喜欢看本文就看本文。

二、初始化工程

需要2个文件:package.json,tsconfig.json

1
2
3
4
➜ frida-test tree -L 1
.
├── package.json
└── tsconfig.json

package.json 描述项目的 nodejs 结构,这里依赖 3 个库,用当前最新版,删掉任意一个都无法使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
➜  frida-test cat package.json
{
"name": "frida-agent-example",
"version": "1.0.0",
"description": "Example Frida agent written in TypeScript",
"private": true,
"main": "agent/index.ts",
"devDependencies": {
"@types/frida-gum": "*",
"@types/node": "*",
"frida-compile": "*"
}
}

tsconfig.json 描述typescript 属性,不是很懂,反正这样写是可以的,全都用最新的。

1
2
3
4
5
6
7
8
9
10
11
➜  frida-test cat tsconfig.json
{
"compilerOptions": {
"target": "esnext",
"lib": ["esnext"],
"allowJs": true,
"noEmit": true,
"strict": true,
"esModuleInterop": true
}
}

执行命令 npm install 将项目初始化掉,整个就完成了。

三、编写typescript 脚本 或者 javascript 脚本

随便取个名字,例如 index.ts,在里面写代码可以获得typescript的自动补全。

ts 补全效果如图所示:

四、将ts编译为可被 frida 加载的 js 文件

1
2
3
4
5
Java.perform(function () {
console.log("Attach Success!");
Java.use("android.util.Log").d("tutu", "Attach Success!");
}
);

(虽然这段很像 js,但它其实是ts,语法比较通用) 编译一次:

frida-compile -o _agent.js index.ts

或者使用 watcher 功能,有变更后自动编译:

frida-compile -w -o _agent.js index.ts

这里的 frida-compile 可以使用 npm install frida-compile -g ,也可以使用当前目录的./node_modules/.bin/frida-compile 。

五、使用 frida-cli 加载输出的 js 脚本

作为一个安卓选手,当然要用手机来测,省略无关步骤后:

frida -U -l _agent.js com.leadroyal.helloandroid

成功输出日志,本文完结。