0

在 Frida 的挂钩 javascript 文件中,我可以声明一个派生自 OnClickListener 的新类吗?我想将一个新的 OnClickListener 实例传递给现有视图的 setOnClickListener 方法。

我可以得到一个现有的视图类,如下所示:

var viewCls = Java.use("com.xxx.myView");

此视图在原始应用程序中没有任何 onClickListener。是否可以通过 Frida 将 onClickListener 实例附加到此视图?

我知道如何实例化一个现有的类,但我不知道如何在 Frida 中声明一个新类。

非常感谢你的建议。

4

1 回答 1

0

我没有找到如何在 Frida 中声明一个新类。但是,我找到了一种解决方法来完成我的要求。我在这里分享它,希望可以帮助那些和我遇到同样问题的人。基本上,我想做的是为现有的 View 实例添加一个 onClickListener 。由于我们无法在 Frida 中声明新的 onClickListener 派生类,我们可以在单独的 dex 库文件中声明它。在 Frida 中,我们可以动态加载这个 dex 文件,找到类,然后新建它。步骤如下:

1、创建一个java库,声明自己的onClickListener派生类。例如:

package com.test.frida
class MyOnClickListener implements onClickListener {
     public void onClick() {
         //you code here
     }
}

2、编译成Android库文件,假设为mylib.dex。然后推送到安卓设备。

3、在Frida中,假设你要添加onClickListener的view是appView。我们首先加载 mylib.dex,如下所示:

var loader = Java.use("dalvik.system.DexClassLoader").$new(mylib_dex_path, optimizeDir, null, appView.getContext())

optimizeDir 应该是属于应用程序的目录。很容易找到一个。

4、获取MyOnClickListener.class并为其新建一个实例。

Java.classFactory.loader = loader;
var myListenerCls = Java.classFactory.use("com.test.frida.MyOnClickListener");
var listenerObj = myListenerCls.$new();

5、最后把这个监听器传给appView

appView.setOnClickListener(listenerObj);
于 2019-08-08T06:46:48.417 回答