frida 介绍

官网对Frida的介绍是“Frida是平台原生App的Greasemonkey”,专业一点就是一种动态插桩工具,可以插入一些代码到原生App的内存空间去动态地监视和修改其行为,这些原生平台可以是Windows、Mac、Linux、Android或者iOS,同时Frida还是开源的。

frida 环境安装

python3.7.5

pip install frida==12.8.0 frida-tools==5.3.0

frida-server下载

https://github.com/frida/frida/releases/tag/12.8.0

使用vscode打开该工程可以有frida脚本的代码提示

https://github.com/oleavr/frida-agent-example

一些 frida 命令

查看手机上正在运行的进程

frida-ps -U

以attach模式注入指定应用

frida -U -l hello_world.js android.process.media

一些 adb 命令

查看系统架构命令

adb shell getprop ro.product.cpu.abi

列出所有安装的apk包名

adb shell pm list packages

用于查看App使用的数据库信息

adb shell dbinfo <package-name>

查看包信息,包括四大组件信息以及MIME等相关信息

adb shell dumpsys package <package-name>

查看当前处于前台的Activity

adb shell dumpsys activity top

frida 案例

js 部分

function main() {
  Java.perform(function () {
    var MainActivity = Java.use("com.example.myapplication.MainActivity");
    MainActivity.fun.implementation = function (x, y) {
      console.log(`x=>${x} y=>${y}`);
      var ret_value = this.fun(x, y);
      return ret_value;
    };
  });
}

setImmediate(main);

android 部分

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt_check = findViewById(R.id.check);
        bt_check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.i("demo", "hello");
            }
        });

        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            fun(50, 30);
        }
    }

    private void fun(int x, int y) {
        Log.d("demo", String.valueOf(x + y));
    }
}

目的是为了监控fun函数的参数

发表评论