Как правильно вставить toast в smali листинг?

193
02 июля 2017, 13:25

Пытаюсь разобраться в функции генерации запросов в приложении. В запросе в параметре передается MD5-строка. Генерится она вот так (.class):

paramSession = dh.a(dh.a(paramSession) + dh.a(str2));

smali:

invoke-static {v0}, Lcom/avito/android/util/dh;->a(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-static {v9}, Lcom/avito/android/util/dh;->a(Ljava/lang/String;)Ljava/lang/String;
move-result-object v3
invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-static {v0}, Lcom/avito/android/util/dh;->a(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0

Где: dh.a - MD5 функция.

paramSession - некий secretKey

str2 - urlEncodedParams.

C urlEncodeParams подбором разберусь. А вот что за secretKey - не ясно. В переменную эту напихивается то url, то хост.

Хочу попробовать вставить toast, в текст которого я засуну строку paramSession.

Код toast(smali):

const/4 v10, 0x1
const-string v8, "YOUR MESSAGE @ iOSGods.com"
invoke-static {p0, v8, v10}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v10
invoke-virtual {v10}, Landroid/widget/Toast;->show()V

Не знаю как правильно сунуть код toast-a в листинг. Собранное приложение постоянно вылетает. Пробовал менять регистры (думал занимаю нужные). Какие еще могут быть проблемы? Может его можно вставлять лишь в определенном месте или что-то вроде того. Есть ли иной способ получить интересные мне строки до оборачивания их в MD5?

Answer 1

Чтобы сделать инъекцию кода, проще всего вставлять одиночный вызов статик-метода и передавая все нужное уже туда. Именно такой метод предоставляет собой Log.i(). Если класса Log мало, к примеру, хотим сделать Тосты или записать данные в файл, то пишем свой класс со статик-методами, которые будем дергать. Само собой, вся инициализация должна быть статичной. Если надо какой-то стейт, то делаем синглтон живость которого (например, для внешнего сокета) проверяем на каждом вызове. У такого метода есть недостаток: размер кода у метода не должен превышать 65кб, что в общем-то редко, но встреается, к примеру, в гугловых библиотеках. Остается только положить рядом смали-класс с реализацией методов или инъектнуть нужные классы через dx и можно запускать.

READ ALSO
Как обращаться к массиву в strings.xml?

Как обращаться к массиву в strings.xml?

Есть массив в stringsxml:

172
В чем разница forward() и include() у RequestDispatcher?

В чем разница forward() и include() у RequestDispatcher?

Везде написано что include включает контент ресурса (сервлет, JSP или HTML страница) в ответНо не понятно контент какого(где источник) ресурса? Два...

259
MongoDB - тормоз вставки после 5000000 записей

MongoDB - тормоз вставки после 5000000 записей

Всем приветВ общем проблема такая: Проект на JAVA и есть NoSQL DB - MongoDB, необходимо работать примерно с 1000000000 записей

184
Ошибка NullPointerException при попытке использовать WindowManager.LayoutParams

Ошибка NullPointerException при попытке использовать WindowManager.LayoutParams

Использую для управления яркостью экрана такой метод:

198