3

Frida を使用して、Java オブジェクト インスタンスを引数として取り、Java オブジェクト フィールドのすべての値と型を含む JS オブジェクトを、おそらく再帰的に返す関数を作成しようとしています。

たとえば、次のようなものがあるとします。

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 アクセス、静的メンバー、再帰的ダンプなどを必要とするコーナーケースを含め、クラスメソッドとフィールド名をダンプするスクリプトしか見つけることができませんでした。

ありがとう!

4

1 に答える 1