frida 将静态参数修改为 ArrayList

frida modify static param as ArrayList

public class OBDSportsModelManager {
    public static ArrayList<DataArray> mDiagnosisCommand;
    public boolean getData() {
        mDiagnosisCommand = new ArrayList<>();
        for (String dataArray : this.commandIDs) {
            mDiagnosisCommand.add(new DataArray(dataArray));
        }
        return true;
    }
}

我想向 'mDiagnosisCommand'、

添加更多项目

通过使用此代码:

sports.getData.implementation = function(){
    Log.v("hook-sports", "try to add obd commands!");
    var ret = this.getData();
    var DataArray = Java.use("com.obd2.comm.DataArray");
    var items = DataArray.$new("0x00,0x00,0x00,0x00,0x00,0x42");

    this.mDiagnosisCommand.add(items);  // not working!!!

    Log.v("hook-sports", "hook done!");

    return ret;
}

但效果不佳。

我在没有任何帮助的情况下用谷歌搜索了 frida ArrayList 添加项目。

你有两个问题:

  1. 您正在使用 this.mDiagnosisCommand 但该字段是静态字段,因此它属于 class OBDSportsModelManager 而不是 class 实例 this.
  2. 通过调用 this.mDiagnosisCommand 你只能得到代表这个字段的 Frida 对象,而不是字段值本身。如果您想要字段引用的 ArrayList,您必须添加 .value.

考虑到这两个问题,以下几行应该有效(更正 class 名称后):

// correct the class name in the next line
var cls = Java.use("<full.name.to>.OBDSportsModelManager"); 
cls.mDiagnosisCommand.value.add(items);