首页 > 解决方案 > frida - 如果在附加之前调用方法,则挂钩 Android 方法不起作用

问题描述

假设应用程序使用按钮触发函数调用。

    Button btn = new Button(this);
    btn.setText("Test");
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            hello();
        }
    });

函数定义:

public int hello() {
    Log.v(TAG,"hello frida!");
    return 0;
}

挂钩helloAPI 的脚本:

Java.perform(function () {
  var clzname = "com.sample.MainActivity";
  var instance = Java.use(clzname);
  instance.hello.overload().implementation = function () {
    console.log("[*] onEnter hello...");
    var retval = this.hello();
    return retval;
  };
});

如果启动应用程序,则附加脚本:

frida -U -l hook.js com.sample

它工作正常,下面的日志将输出:

-> [*] onEnter hello...

但是如果启动应用程序,然后单击按钮首先触发API调用,然后附加脚本,它不起作用,控制台没有输出。

这是否意味着如果 API 已经被调用,那么我们不能挂钩它?如何修复我的脚本?

标签: frida

解决方案


推荐阅读