Установить отменяемое истина в 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