Как написать хук Фриды для вложенной функции класса?
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
, Просто посмотрите на это и выберите правильный.