Как написать хук Фриды для вложенной функции класса? - PullRequest
0 голосов
/ 30 ноября 2018

Android v 6.0.1

Frida v 12.2.19

Я новичок в Frida и не знаю, как решить эту проблему.Функция, на которую я нацеливаюсь, находится в пути 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();
    }
}

I 'Мы написали этот хук, чтобы попытаться вывести и 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

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

Редактировать: Добавлено слово в заголовок

1 Ответ

0 голосов
/ 11 января 2019

Имя класса никогда не заканчивается на $.После этого в вашем случае есть номер для анонимных внутренних классов или имя внутреннего класса 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.Просто посмотрите на него и выберите правильный.

...