Android v 6.0.1
Frida v 12.2.19
我是Frida的新手,不确定如何解决此问题。我要定位的函数位于路径com-> appname->文件夹-> 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 :(得分:1)
类名永远不会以$
结尾。然后,您的情况下会有一个匿名内部类的编号或内部类的名称abc
。
因此,类名很可能是com.appname.folder.xyz$abc
。
但是,有时类名由于意外而有所不同。在这种情况下,列出Frida已知的所有类名称并对特定程序包进行过滤是很有意义的:
Java.enumerateLoadedClasses({
onMatch: function(className) {
if (className.startsWith("com.appname.folder.xyz")) {
console.log(className);
}
},
onComplete: function() {}
});
它将打印com.appname.folder.xyz
下面的类列表。只要看一下,然后选择合适的一个即可。