Как подключить метод onClick внутри метода с использованием Frida - PullRequest
0 голосов
/ 15 февраля 2020

Я хочу изменить поведение метода onClick, подключившись к frida. Код, который я использовал:

Java.perform(function() {
    console.log("[*] START...")
    var mClass = Java.use("sg.vantagepoint.uncrackable1.MainActivity")
    mClass.a.onClick.implementation=function() {
        console.log("[*] Clicked ")
    }
})

Ошибка получения iam

TypeError: cannot write property 'implementation' of undefined
    at [anon] (../../../frida-gum/bindings/gumjs/duktape.c:57636)
    at /uncrackable1.js:6
    at frida/node_modules/frida-java-bridge/lib/vm.js:11
    at E (frida/node_modules/frida-java-bridge/index.js:346)
    at frida/node_modules/frida-java-bridge/index.js:298
    at frida/node_modules/frida-java-bridge/lib/vm.js:11
    at frida/node_modules/frida-java-bridge/index.js:278
    at /uncrackable1.js:11

Исходный код

    private void a(String str) {
        AlertDialog create = new AlertDialog.Builder(this).create();
        create.setTitle(str);
        create.setMessage("This is unacceptable. The app is now going to exit.");
        create.setButton(-3, "OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialogInterface, int i) {
                System.exit(0);
            }
        });

1 Ответ

1 голос
/ 15 февраля 2020

Вы пытаетесь подключить неправильный класс - скорее всего потому, что вы используете Jadx для декомпиляции неправильных настроек и не знаете о Java классах.

Если вы используете Jadx для декомпиляции файла APK обязательно отключите настройку Встроенные анонимные классы , чтобы увидеть реальное имя класса, к которому относится метод.

Метод onClick() принадлежит анонимный внутренний класс, созданный new DialogInterface.OnClickListener(), а не sg.vantagepoint.uncrackable1.MainActivity - следовательно, вы пытаетесь подключить неправильный класс. Метод a(String), в котором он используется, совершенно не имеет отношения к подключению. Анонимные внутренние классы имеют свое собственное имя класса, основанное на внешнем классе, добавляемом $ и числом. Поэтому правильное имя класса может быть sg.vantagepoint.uncrackable1.MainActivity$1 или sg.vantagepoint.uncrackable1.MainActivity$2, в зависимости от того, сколько других анонимных внутренних классов присутствует.

Кроме того, что-то вроде mClass.a.onClick невозможно, так как внутри метода нет метода (a - это метод, а onClick - это метод).

В конце концов, вы может закончиться следующим кодом Фриды:

Java.perform(function() {
    console.log("[*] START...")
    var mClass = Java.use("sg.vantagepoint.uncrackable1.MainActivity$1")
    mClass.onClick.implementation=function() {
        console.log("[*] Clicked ")
    }
})
...