1. 前言
目标:使用VSCode”调试“frida脚本
环境
设备:Pixel 3 Android9 180720.030
frida:14.2.6
Node.js:14.15.4
npm:6.14.10
Visual Studio Code 1.52.1 (user setup)
VSCode使用的是IntelliJ IDEA Keybindings
2021/1/31
我们使用TypeScript
编写frida脚本,再通过frida-compile
把TypeScript
编译成JavaScript
代码。
使用TypeScript
的好处
自动补全
类型检查
内联文档
重构工具
......
首先介绍搭建TypeScript
调试环境,再具体介绍Frida调试环境的配置
2. 搭建TypeScript调试环境
2.1 搭建TypeScript开发环境
2.1.1 安装Node.js和npm
Node.js下载 efdK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6F1L8$3c8W2K9Y4y4Q4x3X3g2G2M7X3N6Q4x3V1k6W2L8W2)9J5c8X3c8G2N6$3&6D9L8$3q4V1i4K6u0r3
npm和Node.js是捆绑在一起的
配置npm
npm使用的默认源(registry
)是727K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6J5k6h3N6A6M7%4c8J5P5g2)9J5k6h3&6H3L8h3A6K6i4K6u0W2L8%4u0Y4
,在国外访问很慢,就算挂代理访问也慢,所以直接替换成国内的源cf3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4u0W2k6$3W2K6N6s2u0&6i4K6u0W2L8Y4m8E0i4K6u0W2N6r3q4G2j5X3q4G2i4K6u0W2L8%4u0Y4
,操作如下:
得到配置文件路径npm config get
修改用户配置文件
配置文件优先级:
per-project config file (/path/to/my/project/.npmrc)
per-user config file (~/.npmrc)
global config file ($PREFIX/etc/npmrc)
npm builtin config file (/path/to/npm/npmrc)
2.1.2 建立项目目录
使用以下命令创建项目的目录:
1
2
3
4
mkdir ts3
cd ts3
mkdir src
mkdir dist
建立好的目录如下:
2.1.3 初始化 NPM
在项目的根目录下,执行下面的命令:
现在项目结构如下:
1
2
3
4
ts3
├─dist
└─src
└─package.json
package.json介绍
2.1.4 安装TypeScript
在项目的根目录下,执行下面的命令:
1
npm install
-
g typescript
加了参数-g
,会在全局环境安装TypeScript
,不加只会在当前工程下安装TypeScript
2.1.5 创建并配置tsconfig.json
在项目的根目录下,执行下面的命令:
现在项目结构如下:
1
2
3
4
5
ts3
├─dist
└─src
└─package.json
└─tsconfig.json
tsconfig.json介绍
在 tsconfig.json
中取消下面属性项的注释,并修改其属性的值:
这样设置之后,我们在 ./src
中编码 .ts
文件,.ts
文件编译成 .js
后,输出到 ./dist
中。
1
2
"outDir"
:
"./dist"
,
"rootDir"
:
"./src"
,
2.1.6 Hello TypeScript
将下面代码复制到./src/index.ts
中:
1
2
const hello: string
=
'hello, Genliese'
;
console.log(hello);
在项目的根目录下,执行下面的命令:
tsc
是编译命令,详情查看:b9cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2@1M7$3I4S2L8X3N6Q4x3X3g2U0L8W2)9J5c8X3c8G2j5%4y4Q4x3V1k6Z5j5h3&6V1j5X3!0G2K9#2)9J5c8Y4c8&6M7r3g2K6j5%4u0A6M7s2c8Q4x3X3c8A6L8W2)9J5k6o6g2Q4x3X3c8E0K9h3&6#2N6r3g2K6i4K6u0W2K9s2c8E0L8l9`.`.
tsc
的编译选项,详情查看:bf7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2@1M7$3I4S2L8X3N6Q4x3X3g2U0L8W2)9J5c8X3c8G2j5%4y4Q4x3V1k6Z5j5h3&6V1j5X3!0G2K9#2)9J5c8X3y4G2L8i4m8A6L8r3g2J5i4K6u0V1L8%4m8@1K9h3!0F1M7#2)9J5k6h3S2@1L8h3H3`.
1
2
3
4
/
/
编译
tsc
/
/
执行
node .
/
dist
/
index.js
执行结果如下:
2.1.7 使用自动实时编译
手动编译还是比较麻烦,如果能够保存代码后,能自动编译就好了。
详情查看:6b3K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4L8#2)9J5k6h3#2A6j5%4u0G2M7$3!0X3N6q4)9J5k6h3y4G2L8g2)9J5c8X3k6%4L8r3W2F1K9#2)9J5c8W2)9K6c8V1I4A6L8X3E0u0k6q4)9K6c8o6M7K6x3K6f1#2z5l9`.`.
Ctrl + F9
运行构建任务,将显示以下选项:
选择 tsc: watch - tsconfig.json
,回车运行之后,编辑的代码保存之后,就会自动编译。
2.2 代码检查
代码检查主要是用来发现代码错误和统一代码风格。
详情查看:344K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6@1M7#2)9J5k6i4S2U0j5i4c8D9K9i4g2Q4x3X3g2U0L8$3#2Q4x3V1k6W2L8X3N6A6L8X3g2W2M7X3W2F1k6#2)9J5c8X3I4A6L8Y4c8Q4x3X3g2Z5N6r3#2D9
2.2.1 安装ESLint
ESLint
可以安装在当前项目中或全局环境下,因为代码检查是项目的重要组成部分,所以我们一般会将它安装在当前项目中(也可以安装在全局,因为package.json
中记录有依赖库,别人下载项目后,直接npm install
即可安装所有依赖库 )。可以运行下面的脚本来安装:
1
npm install eslint
-
-
save
-
dev
由于 ESLint
默认使用 Espree
进行语法解析,无法识别 TypeScript
的一些语法,故我们需要安装 typescript-eslint-parser
,替代掉默认的解析器,别忘了同时安装 typescript
:
1
npm install typescript typescript
-
eslint
-
parser
-
-
save
-
dev
由于 typescript-eslint-parser
对一部分 ESLint
规则支持性不好,故我们需要安装 eslint-plugin-typescript
,弥补一些支持性不好的规则。
1
npm install eslint
-
plugin
-
typescript
-
-
save
-
dev
现在项目结构如下:
1
2
3
4
5
6
7
ts3
├─dist
└─node_modules
└─src
└─package
-
lock.json
└─package.json
└─tsconfig.json
package-lock.json是锁定依赖库的版本package-lock.json介绍
2.2.2 创建配置文件 .eslintrc.js
ESLint
需要一个配置文件来决定对哪些规则进行检查,配置文件的名称一般是 .eslintrc.js
或 .eslintrc.json
。
当运行 ESLint
的时候检查一个文件的时候,它会首先尝试读取该文件的目录下的配置文件,然后再一级一级往上查找,将所找到的配置合并起来,作为当前被检查文件的配置。
在项目的根目录下,执行下面的命令:
1
2
/
/
创建配置文件
.
/
node_modules
/
.
bin
/
eslint
-
-
init
按需求,选择相应的选项:
图中出现了WARN
,编辑package.json
修改对应字段:
1
2
3
4
5
"description"
:
"default"
,
"repository"
: {
"type"
:
"git"
,
"url"
:
"none"
},
现在项目结构如下:
1
2
3
4
5
6
7
8
ts3
├─dist
└─node_modules
└─src
└─.eslintrc.js
└─package
-
lock.json
└─package.json
└─tsconfig.json
编辑 .eslintrc.js
,增加 parser: 'typescript-eslint-parser',
替换掉默认的解析器,使之识别 TypeScript
的一些语法,如下面所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
module.exports
=
{
parser:
'typescript-eslint-parser'
,
env: {
es6: true,
node: true,
},
extends:
'airbnb-base'
,
globals
: {
Atomics:
'readonly'
,
SharedArrayBuffer:
'readonly'
,
},
parserOptions: {
ecmaVersion:
2018
,
sourceType:
'module'
,
},
rules: {
},
};
2.2.3 在 VSCode中集成ESLint检查
在编辑器中集成 ESLint
检查,可以在开发过程中就发现错误,极大的增加了开发效率。
要在 VSCode
中集成 ESLint
检查,我们需要先安装 ESLint
插件,点击「扩展」按钮,搜索 ESLint
,然后安装即可。
VSCode
中的 ESLint
插件默认是不会检查 .ts
后缀的,需要在「文件 => 首选项 => 设置」中
添加以下配置:
1
2
3
4
5
{
"eslint.validate"
: [
"typescript"
]
}
将下面代码复制到./src/index.ts
中:
1
2
3
4
let num: number
=
1
;
if
(num
=
=
2
) {
console.log(num);
}
现在项目结构如下:
1
2
3
4
5
6
7
8
9
ts3
├─dist
└─node_modules
└─src
└─index.ts
└─.eslintrc.js
└─package
-
lock.json
└─package.json
└─tsconfig.json
现在编辑器,应该会提示 4
个错误:
我们按照错误提示,修改成正确的代码风格(在错误处按Alt+Enter
):
console.log
一般是在调试阶段使用,发布正式版本时,应该移除。所以这里没有提示红色的致命错误,而是使用了警告。
2.2.4 错误纠正
将下面代码复制到./src/index.ts
中:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-2-2 20:16
被genliese编辑
,原因: