我正在尝试弄清楚如何使用Frida读取Java类的公共unmodifiableList字段。下面是我的类:
public final class MyClass {
public final String myString;
public final List myList;
public MyClass() {
this.myString = "Hello!";
this.myList = Collections.unmodifiableList({ "this_is_a_string" });
}
}下面是我用来提取这两个字段的JS Frida代码:
Java.perform(function() {
function onField(instance) {
const fields = instance.getClass().getDeclaredFields();
for(var i = 0; i < fields.length; i++) {
const value = fields[i].get(instance);
if(fields[i].getName() == "myString") {
// This correctly prints "Hello!".
console.log("myString: " + value);
} else if(fields[i].getName() == "myList") {
for(var j = 0; j < value.length; i++) {
// This prints out a blank line, as opposed to "this_is_a_string".
console.log(value[j]);
}
}
}
}
Java.choose("com.myapp.MyClass", { onField: onField, onComplete: function() {} })
});问题是我无法访问unmodifiableList的任何方法或字段(包括size()和索引)。我如何从这个列表中读取?
发布于 2020-06-26 07:56:16
Java.cast的使用解决了这个问题。
// ...
var list = Java.cast(value, Java.use("java.util.List"));https://stackoverflow.com/questions/62585759
复制相似问题