March 27, 2015

NeoQUEST 2015: как решить raSSLedovanie за 13 минут

Итак, в задании дан APK файл.
В первую очередь я достал classes.dex, применил к нему dex2jar а затем JD-GUI, но поскольку ничего такого очень интересного я там не нашел, я забросил эту идею и пошел смотреть native библиотеки. Внимание привлекает библиотека libndkNative.so, по размеру и названию она выглядит так как будто эта библиотека самописная.
Откроем эту библиотеку IDA лицензионным конечно же.
Известно что все импортируемые при помощи JNI имена функций начинаются с Java_
Читая функцию (и не особо вдаваясь в детали. в самом деле, за 13 минут это даже прочитать-то полностью не получилось бы) замечаем очень подозрительный вызов функции system (или j_j_system). Подозрителен он тем, что в нормальных программах на Android он практически не встречается (и было бы определенно интересно посмотреть а что такое там вообще запускают).
Конечно же это не касается моих программ, например C4droid которым мы и воспользуемся для решения данной задачи.
В составе GCC плагина для C4droid присутствует отладчик gdb, которым можно очень удобно повесить breakpoint на функцию system а затем глянуть что там запускают.
При помощи команды ps определяем PID процесса, а затем прицепляемся к нему при помощи
/data/data/com.n0n3m4.droidc/files/gcc/debugger/gdb /system/bin/app_process PID
Затем ставим breakpoint при помощи
break system
Продолжаем выполнение программы при помощи
c
Жмем Send Request и попадаем на breakpoint.
Затем в регистрах можно увидеть запускаемые команды, интересный параметр хранится в r4
x/s $r4
0x5f401b38:     "/data/data/com.ifree.ndkNative/lib/libcurl.so -k -A \"Android User-Agent\" -H \"Accept-Language: sr\" -d \"765=69d7d41f1bc07bb4d101289acb3b048c\" https://db765.ru/138aa49508a4a55dc3d5f274268ac90e.php"
Убирая лишние слеши и заменяя libcurl.so на curl получим
curl -k -A "Android User-Agent" -H "Accept-Language: sr" -d "765=69d7d41f1bc07bb4d101289acb3b048c" https://db765.ru/138aa49508a4a55dc3d5f274268ac90e.php
Замечаем что это base64 от ZIP файла (при помощи curl -k -A "Android User-Agent" -H "Accept-Language: sr" -d "765=69d7d41f1bc07bb4d101289acb3b048c" https://db765.ru/138aa49508a4a55dc3d5f274268ac90e.php | base64 -d | file -)
Декодируем и распаковываем его и получаем код (в файле code.png):
SSLK3YDB765

No comments:

Post a Comment