我正在尝试使用 Frida 编写一个函数,该函数将 Java 对象实例作为参数并返回一个 JS 对象,其中包含 Java 对象字段的所有值和类型,可能是递归的。
例如,如果我们有类似的东西:
public class Person {
private String fullName;
private int age;
private List hobbies,
public Person(String fullName, int age, List hobbies) {
...
}
public void hello() {
...
}
}
我希望能够(在 Frida JS 脚本中)运行类似的东西
Java.use("Person").hello.implementation = function() {
console.log(JSON.stringify(dumpObject(this, 2))); // dump recursively 2 levels deep
this.hello();
}
并看到类似的东西:
{
"instance":"0x1234",
"type":"Person",
"fields' [
{
"name":"fullName",
"declaredType":"java.lang.String",
"actualType":"java.lang.String",
"value":"John Smith",
},
{
"name":"age",
"declaredType":"int",
"actualType":"int",
"value":25,
},
{
"name":"hobbies",
"declaredType":"java.util.List",
"actualType":"java.util.ArrayList",
"value":{
"instance":"0x4567",
"type":"java.util.ArrayList",
"fields": [
... all the fields of this ArrayList instance, 2 levels deep
],
},
},
]
}
我尝试了几种不同的方法,但我一直遇到很多错误和问题。在我深入挖掘之前,有没有人知道一些现有的实现可以节省我很多时间?我在 Google 上进行了广泛搜索,但只能找到转储类方法和字段名称的脚本,没有可以智能地查看值的脚本,包括需要 _name 访问的极端情况、静态成员、递归转储等......
谢谢!