frida изменяет параметры c как ArrayList - PullRequest
1 голос
/ 06 марта 2020
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;
}

, но не работает хорошо.

Я гуглил Фриду ArrayList, добавляю элементы без посторонней помощи.

1 Ответ

1 голос
/ 06 марта 2020

У вас есть две проблемы:

  1. Вы используете this.mDiagnosisCommand, но поле является полем c, поэтому оно принадлежит классу 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);
...