Я пытаюсь написать функцию с использованием 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
],
},
},
]
}
Я пробовал несколько разных подходов, но у меня все еще много ошибок и проблем. Прежде чем копать глубже, кто-нибудь знает о существующей реализации, которая сэкономила бы мне немного времени? Я много гуглил, но мог найти только сценарии, которые выводят методы классов и имена полей, ничего, что бы разумно смотрело на значения, включая угловые случаи, требующие доступа _name, члены stati c, рекурсивный дамп и т. Д. c ...
Спасибо!