1
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 添加项目。

4

1 回答 1

1

你有两个问题:

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

考虑到这两个问题,以下几行应该可以工作(在更正类名之后):

// correct the class name in the next line
var cls = Java.use("<full.name.to>.OBDSportsModelManager"); 
cls.mDiagnosisCommand.value.add(items);
于 2020-03-06T15:39:54.793 回答