Установить отменяемое истина в smali

Я был обратный инжиниринг файла АПК, и я обнаружил, что Theler AlertDialog можно отменить ложь

invoke-virtual {v0, v4}, Landroid/app/AlertDialog$Builder;->setCancelable(Z)Landroid/app/AlertDialog$Builder;

(в коде Java это показывает отменяемое ложь)

Поэтому я попробовал этот код в моем другом приложении и скомпилировал его

.setCancelable(true)

но это смалийская кодовая линия остается прежней

invoke-virtual {v2, v3}, Landroid/app/AlertDialog$Builder;->setCancelable(Z)Landroid/app/AlertDialog$Builder;

Так как же я могу изменить отменяемый на истину в файле smali.

2 ответа

Решение

Прочитайте это: http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings

Если вы это сделаете, вы увидите, что он использует постоянный пул. Вам нужно отредактировать пул констант и создать новый invokevirtual с тем значением, которое вы добавили в пул констант.

Поскольку вы, вероятно, новичок в этом деле вместо моего обычного предложения BCEL или ASM, я собираюсь дать вам ссылку на JBE, http://set.ee/jbe/

invoke-virtual является мнемокодом для команды Java для вызова виртуального метода объекта (довольно очевидно). Он использует от 1 до многих "параметров" (или, строго говоря, регистров) для выполнения фактического вызова. Первый - это указатель на объект, метод которого вы вызываете, а остальные используются для определения значений параметров этого метода. В вашем первоначальном примере v0 а также v4 являются указателями на регистры (вы можете думать о них как о локальных переменных). Так v0 это указатель на объект android.app.AlertDialog.Builder учебный класс. v4 регистр содержит значение параметра setCancelable. Из этого куска кода невозможно сказать, вызываете ли вы ->setCancelable(True) или же ->setCancelable(False)smali-код этой части будет одинаковым для них обоих. Фактическое значение параметра метода установлено в v4 зарегистрируйтесь где-нибудь ДО этой строки кода. Так что вы можете увидеть что-то вроде const/4 v4, 0x0 несколько строк выше. Это определяет False значение для параметра. Измените его на 0x1, и вы готовы к apktool-it обратно к apk.

Некоторое чтение, чтобы рассмотреть: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html https://code.google.com/p/smali/wiki/Registers

Другие вопросы по тегам