首页
社区
课程
招聘
Frida调试环境搭建
发表于: 2021-2-1 10:32 15583

Frida调试环境搭建

2021-2-1 10:32
15583

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-compileTypeScript编译成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

建立好的目录如下:

1
2
3
ts3
├─dist
└─src

2.1.3 初始化 NPM

在项目的根目录下,执行下面的命令:

1
npm init -y

现在项目结构如下:

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
tsc --init

现在项目结构如下:

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编辑 ,原因:
收藏
免费 5
支持
分享
最新回复 (6)
雪    币: 2510
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
感谢分享!!
2021-2-1 12:15
1
雪    币: 35
活跃值: (136)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
对入门者来说,是一片很好用的文章,非常详细
2021-2-2 15:46
0
雪    币: 5
活跃值: (116)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
大佬, 我按照你的调试教程试了一下, 发现frida会报错: Failed to attach: v8 runtime not available due to build configuration , 查了一下原因应该是frida版本的问题. 是我用法不对嘛...  大佬写文章的时候用的是哪个版本啊
2021-3-2 22:24
1
雪    币: 2469
活跃值: (3197)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
peter_puff 大佬, 我按照你的调试教程试了一下, 发现frida会报错: Failed to attach: v8 runtime not available due to build configuration ...
教程最前面有介绍测试环境
2021-3-3 08:01
0
雪    币: 5
活跃值: (116)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
genliese 教程最前面有介绍测试环境

我按照教程最前面的版本都配置好了, 还是会报错 Failed to attach: v8 runtime not available due to build configuration 

最后发现是由于frida-server版本的问题. 我下载了最新的frida-server-14.2.13 就不报这个错了

最后于 2021-3-5 00:30 被peter_puff编辑 ,原因:
2021-3-5 00:16
0
雪    币: 2550
活跃值: (7033)
能力值: ( LV7,RANK:102 )
在线值:
发帖
回帖
粉丝
7
真麻烦,这内容看着劝退啊
2022-10-20 17:39
0
游客
登录 | 注册 方可回帖
返回