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 添加项目。
你有两个问题:
- 您正在使用
this.mDiagnosisCommand
但该字段是静态字段,因此它属于 class OBDSportsModelManager
而不是 class 实例 this
.
- 通过调用
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);
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 添加项目。
你有两个问题:
- 您正在使用
this.mDiagnosisCommand
但该字段是静态字段,因此它属于 classOBDSportsModelManager
而不是 class 实例this
. - 通过调用
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);