Как написать хук Фриды для вложенной функции класса?

Android v 6.0.1

Фрида v 12.2.19

Я новичок в Фриде и не знаю, как решить эту проблему. Функция, на которую я нацеливаюсь, находится в пути com -> appname -> folder -> xyz.class

В xyz.class класс вложен так:

public abstract class abc
{
    public string dosomething()
    {
        StringBuilder localStringBuilder = new StringBuilder();
        localStringBuilder.append(getClass().getSimpleName());
        localStringBuilder.append("Value 1=");
        localStringBuilder.append(this.value1);
        localStringBuilder.append("Value 2=");
        localStringBuilder.append(this.value2);
        return localStringBuilder.dosomething();
    }
}

Я написал этот хук, чтобы попытаться вывести и value1, и value2 на консоль.

custom_script.js:

setImmediate(function() {
console.log("[*] Starting script");

    Java.perform(function () {
        var Activity = Java.use("com.appname.folder.xyz$");
        Activity.dosomething.overload().implementation = function () {
            var datastring = localStringBuilder.dosomething();
            console.log(datastring);
            return datastring;
        };
    });

})

Я не уверен, как обрамлять путь в функции Java.use(), нужно ли мне ставить xyz.class или xyz$ или xyz.class.abc$.

Error: java.lang.ClassNotFoundException: Didn't find class "com.appname.folder.xyz$" on path... etc.

Если я указываю путь как com.appname.folder.xyz.class.abc$, я просто получаю ошибку "Процесс завершен".

Команда Frida, которую я использую на терминале,

frida -U -f com.appname -l custom_script.js --no-pause

Что не так в моем сценарии?

Изменить: добавлено слово в заголовок

0 ответов

Имя класса никогда не заканчивается на $, После этого есть номер для анонимных внутренних классов или имя внутреннего класса abc в твоем случае.

Поэтому имя класса, скорее всего, "com.appname.folder.xyz$abc".

Однако иногда название класса отличается от неожиданности. В таких случаях имеет смысл перечислить все имена классов, известные Фриде, и отфильтровать их для определенного пакета:

Java.enumerateLoadedClasses({
    onMatch: function(className) {
        if (className.startsWith("com.appname.folder.xyz")) {
            console.log(className);
        }
    },
    onComplete: function() {}
});  

Распечатывает список классов ниже com.appname.folder.xyz, Просто посмотрите на это и выберите правильный.

Другие вопросы по тегам