Upload
mailrugroup
View
211
Download
2
Embed Size (px)
Citation preview
Android Reverse-Engineering
DEX (Dalvik Executable)Инструментарий для реверс-инжиниринга Android-приложений. Немного о DEX (Dalvik Executable) формате
Юрий Крутилин5 августа 2015 г
whoami
▪ Юрий Крутилин
▪ skype: krutilin
▪ https://ru.linkedin.com/in/krutilin
▪ http://habrahabr.ru/users/seod/
whoami
▪ DevExtreme (Cross-platform HTML 5/JS tools from DevExpress)
▪ QA и игры для детей.
▪ GetDev (getdev.net Юзер группа разработчиков в Туле)
▪ Особенности WebView
▪ Android
▪ other
План▪ Способы получения apk
▪ Структура Android приложений
▪ Dex (Dalvik Executable)
▪ обзор формата
▪ парсеры
▪ Инструментарий для реверс инжиниринга Android приложений
▪ Декомпиляция ресурсов
▪ Утилиты для работы с Dex
▪ Зачем? Как применить?
▪ Заключение
▪ Вопросы
Способы получения apk
▪ Использование файл менеджера,
например Total Commander
Способы получения apk
▪ ADB (Android Debug Bridge)
> adb shell pm list packages
> adb shell pm path com.example.someapp
“package:/data/app/com.example.someapp-1/base.apk”
> adb pull <remote> <local>
http://developer.android.com/tools/help/adb.html
Способы получения apk
▪ Скачать из магазина Google Play
http://apps.evozi.com/apk-downloader/
использовать обертку для Google Play API
Структура Android приложений
>cordova create hello com.example.hello HelloWorld
>cd hello
>cordova platform add android
Структура Android приложений
>cordova build
Структура Android приложений
apk to zip
Структура Android приложений
assets не компилируемые ресурсы. Доступ из приложения через файловую систему.
Структура Android приложений
res компилируемые ресурсы.resources.arsc таблица ресусов по индексам.
Структура Android приложений
META-INFAndroidManifest.xmlresources.arscclasses.dex
Dalvik
Dalvik opcodes:
http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
Dalvik
Dalvik
Dalvik
Dalvik opcodes:
http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
Dalvik
Структура Dex файлов
http://source.android.com/devices/tech/dalvik/dex-format.html
Dex особенности▪ выполняется на регистровой виртуальной машине
▪ кодировка LEB128
Dex особенности
LEB128 (Little Endian Base 128)
▪ выполняется на регистровой виртуальной машине
▪ кодировка LEB128
▪ относительная адресация
Dex особенности
▪ Относительная адресация (в отличие от iOS)
▪ Большинство DEX объектов представлены по индексу в списке
▪ Закодированные объекты в списке вычисляют свой индекс от первого
объекта + смещение до текущего объекта
▪ Использование такой дельты, дает меньшие числа и меньший размер в
байтах при использовании кодировки LEB128
Например:
В стурктуре class_data_item поля static_fields, instance_fields, direct_methods
и virtual_methods представлены при помощи смещений.
Dex особенности
▪ Пример относительной адресации
Dex особенности
▪ выполняется на регистровой виртуальной машине
▪ кодировка LEB128
▪ относительная адресация
▪ упаковка всех классов в один файл (в отличие от упаковки каждого класса в
отдельный файл в .class формате java)
Dex особенности
▪ выполняется на регистровой виртуальной машине
▪ кодировка LEB128
▪ относительная адресация
▪ упаковка всех классов в один файл (в отличие от упаковки каждого класса в
отдельный файл в .class формате java)
▪ Использование MUTF-8
Dex особенности
▪ MUTF-8
▪ Используется для кодирования строк в DEX формате
▪ Символы могут быть длинной в 1, 2 или 3 байта
▪ null байт '\u0000' закодирован в двух байтах в отличие от UTF-8 и всегда
является концом строки
▪ Дополнительные символы кодируются в виде пар char символов
(Supplementary characters).
Dex особенности
Dex ограничения
Ограничения связаны с 32х битностью.
«65К методов хватит всем» или как бороться с лимитом DEX методов в Android
http://habrahabr.ru/post/230665/
https://medium.com/@rotxed/dex-skys-the-limit-no-65k-methods-is-
28e6cb40cf71
Dex парсеры
▪ Для быстрого погружения можно использовать следующие реализации
▪ 010 Editor + dex template http://www.sweetscape.com/010editor/
▪ Dexer C# https://github.com/sailro/Dexer
Dex парсеры
Dex парсеры
Dex парсеры
Dex парсеры
Dex парсеры
Dex парсеры
Dex парсеры
Ресурсы
▪ AndroidManifest.xml
▪ assets
▪ res + resources.arsc
Код
▪ Dex -> Smali
▪ Dex -> Java
Подпись▪ META-INF
Инструментарий
aapt dump xmltree android-debug.apk AndroidManifest.xml>AndroidManifest.xml
Инструментарий
▪ AXMLPrinter https://code.google.com/p/android4me/
▪ Apktool - комплексный набор тулзов для разбора Android приложений
http://ibotpeaches.github.io/Apktool/
▪ Androidguard - набор тулзов на питоне для разботы с Android приложениями
https://github.com/androguard/androguard
▪ ApkAnalyser - набор тулзов для разбора Android приложений от Sony
https://github.com/sonyxperiadev/ApkAnalyser
Инструментарий
▪ Apktool - комплексный набор тулзов для разбора Android приложений
▪ Кроссплатформенное решение
▪ Реализована распаковка и упаковки приложения и ресурсов
▪ Реализован разбор Dalvik байткода в Smali
▪ Регулярно выходят обновления
http://ibotpeaches.github.io/Apktool/
Инструментарий
▪ ApkAnalyser - набор тулзов для разбора Android приложений от Sony
Инструментарий
Инструментарий
Инструментарий
Сырцы (Smali, Jar, Java)
▪ smali/baksmali https://code.google.com/p/smali/
▪ dexdump
▪ Dex2Jar https://github.com/pxb1988/dex2jar
▪ Jd-gui http://jd.benow.ca/
▪ JAD http://varaneckas.com/jad/
▪ Androidguard’s DAD https://github.com/androguard/androguard
▪ JEB https://www.pnfsoftware.com/
Инструментарий
▪ > java -jar baksmali-2.0.3.jar classes.dex
▪ Подпись
▪ Для подписывания можно использовать keytool и jarsigner которые идет в
составе Java SDK
▪ Либо своя реализация, например, на C#
Инструментарий
Зачем? Как применить?
▪ Обезвреживание зловредных приложений и вирусов
▪ Создание зловредных приложений и вирусов
▪ Общий анализ приложений
▪ Упаковка dex в dex
▪ Упаковка приложения в картинку
▪ Потоковая обработка приложений
Заключение
▪ Люди
▪ Rodrigo Chiossi https://twitter.com/rchiossi Intel (active)
▪ Sebastien Lebreton http://sebastien.lebreton.free.fr/blog/ MS (2013)
▪ Axelle Apvrille https://twitter.com/cryptax Fortinet (active)
▪ Другое
▪ http://source.android.com/devices/tech/dalvik/dex-format.html
▪ https://www.fortiguard.com/
▪ https://markfaction.wordpress.com/2012/07/15/stack-based-vs-register-based-virtual-machine-
architecture-and-the-dalvik-vm/
Вопросы
▪ Юрий Крутилин
▪ skype: krutilin
▪ https://ru.linkedin.com/in/krutilin
▪ http://habrahabr.ru/users/seod/