5.搭建frida开发环境

一、问题描述

没有代码提示写js是一件很痛苦的事情,所以本文主要介绍一下如何自己搭建frida开发环境。

最终实现的效果就是:

  1. 有代码提示信息
  2. 可以分模块开发

编辑器使用的vscode,如何安装就不多说了,除此之外还需要node环境,没有的可以直接点击这里去官方下载安装。

二、操作步骤

安装好node后,先自己新建一个文件夹,比如我这里名字为FridaEnv,然后从终端进入这个文件夹,使用npm初始化这个文件夹,命令为npm init

image-20231104200030773

后面会让选择很多东西,不用管,直接一直按Enter即可,即默认选项。

紧接着就是安装frida代码提示的包:npm i @types/frida-gum

image-20231104200258814

js代码本身是没有类型提示的,很多时候看不到函数参数用起来很麻烦,所以我们还可以安装一下TypeScript,它的使用与JavaScript基本一样,但它有类型提示,用起来更加舒服。

安装命令为:npm i ts-loader typescript -D

image-20231104200910900

后面的-D意思是只在开发环境下使用它。

因为其工作原理是将TypeScript代码重新编译成为JavaScript代码,我们最终运行的依旧只能是js代码,所以最后的结果是不需要这两个包的。

每次自己手动编译也很麻烦,所以还需要一个webpack工具,它可以将这一个过程自动化。

不仅如此,它更强大的作用其实是可以让我们分模块开发不同功能的代码,然后最后将其打包成为一个js文件。

安装命令为:npm i webpack webpack-cli -D

image-20231104201237763

安装完成后,输入code .,用vscode打开这个文件夹,新建一个文件webpack.config.js,这是打包工具webpack的配置文件,我们需要用它来配置一些选项:

const path = require("path");
module.exports = {
    mode: "production",
    entry: './entry.ts', //入口文件,从项目根目录指定
    module:{
        rules:[
            {
                test:/\.tsx?$/,
                use:'ts-loader',
                exclude:/node_modules/
            },
        ]
    },
    resolve: {
        extensions: ['.tsx', '.ts', '.js'],
      },
    output: {
        path: path.resolve(__dirname, "."), //将js文件直接打包到根目录
        filename: "script.js" //打包到script.js文件中
    },
    watch: true
}

具体有哪些选项,或者这些选项有什么作用,可以去其官网查看:webpack

此时项目结构如下:

image-20231104201757663

然后TypeScript也需要一个配置文件,名字为tsconfig.json,内容如下:

{
    "compilerOptions": {
      "target": "es2016", 
      "module": "commonjs",
       "outDir": "./dist/",
      "esModuleInterop": true,
      "forceConsistentCasingInFileNames": true,
      "strict": true,
    },
    "files": ["entry.ts"]
}

更多参数、或者其含义,可以去官网查看:TypeScript

此时项目结构如下:

image-20231104202344561

它报错了,原因是这里我填入的入口文件没有创建,在根目录创建一个即可,这个文件便是后面我们写代码的主文件了:

image-20231104202711963

然后进入这个包管理文件,写一个脚本命令,让webpack能够实时监视我们的目录变化,自动编译:

  "scripts": {
    "watch": "webpack --config webpack.config.js"
  },

自此,我们的环境就搭建好了。

三、简单使用

现在来使用一下试一试,比如frida提供了一个Java的类:

image-20231104202946187

可以看到,此时它就能自动列出所有可用的函数与类了。

然后还有自动编译代码的功能,现在运行命令:npm run watch

image-20231104203238925

此时只要你在entry.ts文件中写的任何代码,都会被实时编译到script.js文件中去,并且还会进行优化:

image-20231104203400325

不仅如此,现在我们还可以进行多模块开发,在没有使用webpack前,是无法实现的:

image-20231104203624179

这里我建了一个Hook文件夹,然后再建了一个Widget文件夹,并创建文件EditText

原因是可Hook的对象有很多,所以我打算将其全部分类存放在Hook文件夹下。

同时由于我目前学习Hook的一个安卓记事本程序存放文本用的是Widget下的EditText类,所以就有了这样的结构。

然后我还在这个函数中导出了要hook的setText函数。

使用起来也很简单,直接在入口文件中将其导入即可:

image-20231104204142042

最终无论你写了多少代码,最后都会被编译到script.js这一个文件中去。

此时我们只需要运行frida的命令,执行这个script.js代码文件即可。

image-20231104204516726

此时就成功完成了Hook,并将程序中的数据给截取出来了。

同时由于frida本身也会自动监视它运行的代码文件变化,所以你根本无需重新运行命令,它会自动将编译生成好的代码文件重新进行加载。

所以之后你就只需要专注于下自己的代码即可!

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux