Сейчас на форуме: -Sanchez- (+8 невидимых)

 eXeL@B —› Основной форум —› Взлом Android приложений
<< 1 ... 27 . 28 . 29 . 30 . 31 . 32 . 33 . 34 . 35 . 36 . 37 ... 38 . 39 . >>
Посл.ответ Сообщение

Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 12 сентября 2011 12:37 · Поправил: SaNX
· Личное сообщение · #1

В теме обсуждаются вопросы взлома под андроид и соответствующие тулзы.
ТУТОРИАЛЫ:
--> Тутор от chelpa<--
--> От аффтора antilvl<--
--> дебаг .so<--

ТУЛЗЫ:
JEB
ApkAnalyser
--> Android Reverse Engineering (A.R.E.) <--
--> Apktool <--
--> Smali/baksmali <--
--> APKRecovery <--
--> Dex2Jar <--
--> APKInspector <--
--> Lucky Patcher 1.2.0 <--
--> Crack Assist 0.3 <--
--> ART <--
--> JD-GUI <--
--> DexInspector <--
--> Android unpacker <--
GikDbg


В аттаче fernflower, очень годный жава декомпилер.
0ece_06.12.2012_EXELAB.rU.tgz - fernflower.jar

-----
SaNX


| Сообщение посчитали полезным: 4kusNick, WmLiM, gsx3000, Maximus, CoolMax_86, Rustem, Oott, streit, t0ShA, BAHEK, sooqa, Ara, VodoleY, vden, Thegodofviruses, SDFnik, Soso, ff0h, RAMZEZzz, quency, XroM_N70, Alinator3500, Coderess, samtehnik, Isaev, dgyst, ALSSL, dosprog, omeh2003, d0wn, ELF_7719116, Bad_guy


Ранг: 196.6 (ветеран), 11thx
Активность: 0.070.01
Статус: Участник

Создано: 28 марта 2016 16:08 · Поправил: [wl]
· Личное сообщение · #2

bluestack (хотя весит он тоже много)



Ранг: 171.0 (ветеран), 11thx
Активность: 0.050
Статус: Участник

Создано: 29 марта 2016 02:00 · Поправил: Apokrif
· Личное сообщение · #3

[wl] пишет:
script_kidis пишет:
Есть уже отковырянное приложение под андроид простая апка
bluestack (хотя весит он тоже много)

bluestack это эмулятор ARM, а у него простая апка (т.е. без .so).
Или Genymotion или гуглевый Android эмулятор x86, ISC или еще более ранний просто "летать будут".



Ранг: 46.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 01 июня 2016 02:51
· Личное сообщение · #4

Всем привет.
Ломаю андроид прогу, столкнулся с тем, что в новой ее версии разработчики критически важные пост запросы на сервер попрятали в нативном коде, в папке assets файлы .so.dat
Подскажите как разбирать это ? Нужно найти в .so адреса, на которые идут пост запросы из программы.



Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 июня 2016 04:31 · Поправил: JST
· Личное сообщение · #5

del



Ранг: 30.2 (посетитель), 18thx
Активность: 0.030
Статус: Участник

Создано: 01 июня 2016 15:52
· Личное сообщение · #6

mixer632 пишет:
Подскажите как разбирать это ? Нужно найти в .so адреса, на которые идут пост запросы из программы.

Ну так в первом сообщении топика есть ссылка на дебаг *.so, да и в чем сложность то? Берете ida в руки и в перед.



Ранг: 46.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 02 июня 2016 03:28
· Личное сообщение · #7

Quadcon пишет:
Ну так в первом сообщении топика есть ссылка на дебаг *.so, да и в чем сложность то? Берете ida в руки и в перед.

Я выяснил, что программа накрыта протектором DexProtect. У меня вопрос файлы *.so.dat ее результат деятельности, это те самые файлы, что в той статье в шапке или тут совсем другой подход снятия защиты ?
Меня интересует как снять этот протектор с андроид проги. Как я понял основная проблема в нем.
Про иду, я пробовал засунуть эти файлы в иду, не запускается анализ их.



Ранг: 90.7 (постоянный), 32thx
Активность: 0.020
Статус: Участник

Создано: 08 июня 2016 12:39
· Личное сообщение · #8

mixer632 пишет:
Про иду, я пробовал засунуть эти файлы в иду, не запускается анализ их.

В таком виде защиты лучше действовать с правами root на устройстве. Когда приложение запущено, это so.dat приводятся в нормальный вид где то во внутренней памяти и уже потом запускаются (это лишь предположение). Вот в этот момент их и надо скопировать отдельно куда-то и уже анализировать их.



Ранг: 46.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 08 июня 2016 13:06 · Поправил: mixer632
· Личное сообщение · #9

chelpa, работаю на виртуальном устройстве с рутом. А как правильно грузить в иду потом уже скопированный *.so либу. Я знаю список функций нативных, которые она реализует, но когда в иду гружу, она не определяет имена функций. Мне хочется через иду найти, где код этих функций там. Она там определила функции просто как обычно sub_номер.
Анализ запускается на *.so файле, перехваченном с устройства, но имена функций не находит.



Ранг: 90.7 (постоянный), 32thx
Активность: 0.020
Статус: Участник

Создано: 08 июня 2016 15:29
· Личное сообщение · #10

mixer632 пишет:
А как правильно грузить в иду потом уже скопированный *.so либу.

Имена функций скорее всего удалены, такое теперь часто встречается, придётся анализировать без названий. Хотя может и есть методы приведения этого всего в порядок, но я таких тонкостей не знаю



Ранг: 46.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 08 июня 2016 21:36
· Личное сообщение · #11

chelpa пишет:
Имена функций скорее всего удалены, такое теперь часто встречается, придётся анализировать без названий.

А как определить с какой инструкции в ида какая из нативных функций начинается, как это определять интересует.



Ранг: 90.7 (постоянный), 32thx
Активность: 0.020
Статус: Участник

Создано: 09 июня 2016 17:10
· Личное сообщение · #12

mixer632 пишет:
А как определить с какой инструкции в ида какая из нативных функций начинается, как это определять интересует.

не совсем понял вопрос)) но ответ - без понятия))



Ранг: 46.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 09 июня 2016 22:47
· Личное сообщение · #13

chelpa, у меня в смали файле есть список прототипов нативных функций типа вот пример public static native void aadb(Object var0, Object var1);
Мне хочется через иду определить с какой команды каждая эта нативная функция в этой либе начинается, а далее уже исследовать те функции, которые интересуют.




Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 10 июня 2016 00:37 · Поправил: DenCoder
· Личное сообщение · #14

mixer632 пишет:
Я знаю список функций нативных, которые она реализует, но когда в иду гружу, она не определяет имена функций.

У *.so должен же быть экспорт, весь экспорт по именам.

mixer632 пишет:
у меня в смали файле есть список прототипов нативных функций типа вот пример public static native void aadb(Object var0, Object var1);
Мне хочется через иду определить с какой команды каждая эта нативная функция в этой либе начинается

Смали - это, грубо говоря, байт-код от компилятора джавы, *.so - машинный код для ARM. Если в приложении на джаве как-то используется so-модуль, то связь с ним через импорт, ида должна его показывать, хотя бы минимум, соответсвенно в *.so ида должна показывать экспорт, иначе никак. Где-то как-то должна быть связь public static native void aadb(Object var0, Object var1) с настоящим названием, если это прототип функции из *.so, иначе бы не грузилось и не работало...

Добавлено спустя 6 минут
DenCoder пишет:
У *.so должен же быть экспорт, весь экспорт по именам.

Попробуйте найти dlopen() и dlsym(), через них динамическая линковка/импорт

-----
IZ.RU




Ранг: 46.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 10 июня 2016 01:41
· Личное сообщение · #15

DenCoder пишет:
соответсвенно в *.so ида должна показывать экспорт, иначе никак.

Да, но только в экспорте всего одна функция JNI_OnLoad.

Функции dlopen() и dlsym() действительно тут есть.


DenCoder пишет:
Если в приложении на джаве как-то используется so-модуль

Да используется, к примеру вызов aadb будет там ha.aadb(парам1, парам2);



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 10 июня 2016 10:52
· Личное сообщение · #16

mixer632
Смотри внутри JNI_OnLoad регистрацию интерфейсов. Там будут все маппинги.

-----
старый пень


| Сообщение посчитали полезным: DenCoder


Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 10 июня 2016 12:11
· Личное сообщение · #17

mixer632
То, что выделено в окне функций жирным - импорт. j_j_dlsym - двойной джамп на dlsym(), слабый признак обфускации... но можно через эту функу выйти на заветный код. Правда имена импортируемых функций скорей всего шифрованы... в этом случае расшифровать их стоит определённого труда без дебага. Про JNI_OnLoad не знал... джавовский обработчик загрузки модуля...

-----
IZ.RU




Ранг: 171.0 (ветеран), 11thx
Активность: 0.050
Статус: Участник

Создано: 12 июня 2016 20:31 · Поправил: Apokrif
· Личное сообщение · #18

r_e пишет:
Смотри внутри JNI_OnLoad регистрацию интерфейсов. Там будут все маппинги.

Не обязательно. Это просто рекомендуется делать маппинги (для не экспортируемых функций) в JNI_OnLoad. Маппинги регистрируются с помощью RegisterNatives и её можно вызвать во многих местах. Я вызываю RegisterNatives() в статическом методе моего класса и у этого класса "вдруг" появляется еще вагон функций:
Code:
  1. JNIEXPORT int JNICALL Java_XXX_create( JNIEnv *env, jobject object, jstring engineConfig ) {
  2.   env->RegisterNatives(...)
  3. }


| Сообщение посчитали полезным: DenCoder

Ранг: 46.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 14 июня 2016 16:22
· Личное сообщение · #19

Apokrif, я пропатчил в приложении метод расшифровки assests файлов *.so.dat и classes.dex.dat. Он их расшифровывает и копирует потом себе. Я убрал всю расшифровку, а туда подложил уже расшифрованные. Но при старте прога теперь не падает, но libdexprotector.so в катлог вижу ловит сигнал SIGBUS и прога висит.
Можете подсказать почему так получается ? Сама прога только расшифровывает либу и подгружает в память ее через эту функцию void java.lang.Runtime.load(java.lang.String,java.lang.ClassLoader)




Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 14 июня 2016 21:14
· Личное сообщение · #20

mixer632 пишет:
но libdexprotector.so в катлог вижу ловит сигнал SIGBUS и прога висит.

Всё зависит от того, каким дебаггером отлаживаете. Встречался на ARM с такой ситуацией, долго не мог понять, в чём дело... Вышел случайно на инфу, что происходит SIG-спам (предполагаю, что из-за неправильного ответа в прошлом), а дебаггер не может на это нормально отреагировать, и получает либо череду SIG, либо просто молчание ввиду очередного не-ответа.

-----
IZ.RU




Ранг: 46.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 14 июня 2016 22:06 · Поправил: mixer632
· Личное сообщение · #21

DenCoder, я без дебага запускал на устройстве приложение. Как-то пробовал как тут https://habrahabr.ru/post/150825/ собрать приложение для дебага, но апктул с опцией -d не хочет собирать. Автор в статье говорит, что это принципиально собирать с опцией -d.

Добавлено спустя 4 минуты
DenCoder, в моей проге нашел причину падения, она считывает сигнатуру примерно так.
Code:
  1. context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures[0];
и байты сигнатуры участвуют в расшифровке дех и библиотеки, то есть с левой подписью прога просто падает из-за неверной расшифровке. Попробовал модифицировать прогу и класть старый сертификат, на устройстве xposed с модулем xinstaller поставил, чтобы поставилось с левой подписью. Но когда стоит галка ставить с левой подписью, то все проги падают при попытке работать с классами getPackageManager.



Ранг: 171.0 (ветеран), 11thx
Активность: 0.050
Статус: Участник

Создано: 15 июня 2016 08:00 · Поправил: Apokrif
· Личное сообщение · #22

mixer632 пишет:
в моей проге нашел причину падения, она считывает сигнатуру примерно так.
...
и байты сигнатуры участвуют в расшифровке дех и библиотеки, то есть с левой подписью прога просто падает из-за неверной расшифровке.

Закиньте старую сигнатуру как строку в java и замените все вызовы getPackageInfo(..., PackageManager.GET_SIGNATURES)?



Ранг: 46.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 17 июня 2016 01:27 · Поправил: mixer632
· Личное сообщение · #23

DenCoder пишет:
j_j_dlsym - двойной джамп на dlsym(), слабый признак обфускации... но можно через эту функу выйти на заветный код.

Вы предполагаете, что в смали файлах может быть вызов через эту функцию ? Я уже такое искал, да и просмотрел весь код от момента загрузки либы до передачи управления протом основной программе. Сам прот грузит эту либу и в самом конце его работы вызывают какую-то нативную функцию с такими параметрами:
Code:
  1. private static native int ead(Object var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8);

Все инт параметры не зависят от глобальных переменных и вычисляются перед входом в эту функцию, то есть всегда одни и те же туда поступают инты. А объект это туда передают this, то есть указатель на сам класс, в котором этот прототип написан.
Вызывает ее через метод invoke примерно так:
Code:
  1.  var1 = ((Integer)var11.invoke(...)
  2.       if(var1 != 0) {
  3.          throw new UnsatisfiedLinkError("DP: " + var1);
  4.       }

В модифицированном приложении всегда попадает на этот throw почему-то.
Как думаете может эта функция и отвечает за настройку тех функций, которых нет в экспорте изначально, потому что после этого он передает управление уже проге, и она начинает работать уже с методами нативными.
Еще интересует почему эта функция успешно выполняется протом, ее тоже нет в экспорте библы.



Ранг: 171.0 (ветеран), 11thx
Активность: 0.050
Статус: Участник

Создано: 17 июня 2016 17:17 · Поправил: Apokrif
· Личное сообщение · #24

mixer632 пишет:
Code:
  1. var1 = ((Integer)var11.invoke(...)
А var11 это не java.lang.reflect.Method или наследник?

| Сообщение посчитали полезным: DenCoder

Ранг: 46.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 17 июня 2016 17:19 · Поправил: mixer632
· Личное сообщение · #25

Apokrif пишет:
А var11 это не java.lang.reflect.Method или наследник?

Да, это Method.
Так определяется в той функции:
Code:
  1. Method var11 = var9.getDeclaredMethod("ead", new Class[]{Class.forName("java.lang.Object"), var10, var10, var10, var10, var10, var10, var10, var10});

var10 инты.



Ранг: 171.0 (ветеран), 11thx
Активность: 0.050
Статус: Участник

Создано: 19 июня 2016 19:20
· Личное сообщение · #26

mixer632,
Я бы начал разбор с DEXPROTECTOR со скачивания триала и защиты своей крошечной проги...
Посмотреть, что он там накрутил, попробовать сломать или обойти.
Я его не смотрел и ничего полезного сказать не могу.



Ранг: 46.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 19 июня 2016 19:44 · Поправил: mixer632
· Личное сообщение · #27

Apokrif, я именно так и хотел сделать, но после запроса на их офф сайте ничего не приходит на почту, хотя пишут что за 24 часа ответят. Сделал запросы с яндекс почты, потом с гугловой, подумал яндекс игнорят, но уже неделю молчат и не дают триал скачать. Может есть где на варезниках его скачать ?
По сути защиту я снял, ведь все смали файлы вытащил, которые он при запуске расшифровывает и быстро удаляет, их вытащил, *.so библиотеку тоже вытащил, собрал их все вместе и в стартовом файле прописал загрузку библы:
Code:
  1. System.load("Полный путь к *.so");

Но как только прога пытается вызвать нативный метод, то падает, а в катлог выдает, что не видит реализацию метода. Как бы экспорт в этой либе настроить, ведь падает, так как нет в экспорте этих методов.

Добавлено спустя 1 час 35 минут
Пробую в своей тестовой проге загрузить эту либу, но получаю ошибку:
Code:
  1. 06-19 18:02:29.945: D/dalvikvm(2910): Trying to load lib /data/data/my.apk/files/libdexprotector.so 0xa6ff79b0
  2. 06-19 18:02:29.949: D/dalvikvm(2910): Added shared lib /data/data/my.apk/files/libdexprotector.so 0xa6ff79b0
  3. 06-19 18:02:30.640: W/dalvikvm(2910): JNI_OnLoad returned bad version (-1) in /data/data/my.apk/files/libdexprotector.so 0xa6ff79b0

Не знаете почему JNI_OnLoad ошибку возвращает при загрузке, как это обойти ?



Ранг: 171.0 (ветеран), 11thx
Активность: 0.050
Статус: Участник

Создано: 20 июня 2016 07:28 · Поправил: Apokrif
· Личное сообщение · #28

mixer632 пишет:Но как только прога пытается вызвать нативный метод, то падает, а в катлог выдает, что не видит реализацию метода. Как бы экспорт в этой либе настроить, ведь падает, так как нет в экспорте этих методов.

Не знаете почему JNI_OnLoad ошибку возвращает при загрузке, как это обойти?

Вам ответили раньше, что если нативных методов нет в экспорте, то они скорее всего регистрируются в JNI_OnLoad(), который у вас не отрабатывает правильно (т.к. видит что-то левое).
Дебажте саму JNI_OnLoad(), что еще то можно посоветовать?



Ранг: 46.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 20 июня 2016 22:04
· Личное сообщение · #29

Apokrif пишет:
Дебажте саму JNI_OnLoad()

Посоветуйте как это делать. Пробую как тут http://www.vans-soft.ru/2016/01/android.html через gikdbg отладчик, но он очень глюченный, удается податтачиться к приложению с либой. Я так понимаю после запуска приложения и старта либы выполняется jni_onload() и в экспорте должны появиться скрытые методы ее, но в этом отладчике только те, что изначально ида показывает. На счет отладчика нативных библиотек что лучше этот gikdbg или андроид сервер от иды или какие-то другие может еще посоветуете.



Ранг: 171.0 (ветеран), 11thx
Активность: 0.050
Статус: Участник

Создано: 21 июня 2016 06:04 · Поправил: Apokrif
· Личное сообщение · #30

>Я так понимаю после запуска приложения и старта либы выполняется jni_onload() и в экспорте должны появиться скрытые методы ее
Нет, не появятся.
Я, честно говоря, не знаю, как остановится на jni_onload().
Для начала можно посмотреть в листинге, что на какие плюсовые фукнкции мапятся жабовые в jni_onload(). Это про условии, что сама jni_onload() не зашифрована никак.
Она должна выглядеть примерно как описано тут
Если зашифрована, то нужно доставить триал…

>На счет отладчика нативных библиотек
Я пользую только ida...



Ранг: 46.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 21 июня 2016 10:56
· Личное сообщение · #31

Apokrif пишет:
Я, честно говоря, не знаю, как остановится на jni_onload().

Я думаю только модифицируя ее бесконечным циклом наверно ловить.

Apokrif пишет:
Для начала можно посмотреть в листинге, что на какие плюсовые функции мапятся жабовые в jni_onload().

Я так понимаю надо выловить RegisterNatives() в этой функции, но это можно сделать без захода во все методы, трассируя jni_onload() или нет ? Как бы бряк на нее поставить в ида.

И еще если другой подход, мне нужно найти метод, который она динамически экспортирует, этот метод реализует пост и гет запросы. Можно без вылавливания RegisterNatives(), как-то найти, где пост запросы в ида дизасм коде ее или бряк поставить на что-то, связанное с http пост запросами ?


<< 1 ... 27 . 28 . 29 . 30 . 31 . 32 . 33 . 34 . 35 . 36 . 37 ... 38 . 39 . >>
 eXeL@B —› Основной форум —› Взлом Android приложений
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати