![Page 1: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/1.jpg)
Android Reverse-Engineering
DEX (Dalvik Executable)Инструментарий для реверс-инжиниринга Android-приложений. Немного о DEX (Dalvik Executable) формате
Юрий Крутилин5 августа 2015 г
![Page 2: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/2.jpg)
whoami
▪ Юрий Крутилин
▪ skype: krutilin
▪ https://ru.linkedin.com/in/krutilin
▪ http://habrahabr.ru/users/seod/
![Page 3: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/3.jpg)
whoami
▪ DevExtreme (Cross-platform HTML 5/JS tools from DevExpress)
▪ QA и игры для детей.
▪ GetDev (getdev.net Юзер группа разработчиков в Туле)
▪ Особенности WebView
▪ Android
▪ other
![Page 4: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/4.jpg)
План▪ Способы получения apk
▪ Структура Android приложений
▪ Dex (Dalvik Executable)
▪ обзор формата
▪ парсеры
▪ Инструментарий для реверс инжиниринга Android приложений
▪ Декомпиляция ресурсов
▪ Утилиты для работы с Dex
▪ Зачем? Как применить?
▪ Заключение
▪ Вопросы
![Page 5: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/5.jpg)
Способы получения apk
▪ Использование файл менеджера,
например Total Commander
![Page 6: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/6.jpg)
Способы получения 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
![Page 7: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/7.jpg)
Способы получения apk
▪ Скачать из магазина Google Play
http://apps.evozi.com/apk-downloader/
использовать обертку для Google Play API
![Page 8: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/8.jpg)
Структура Android приложений
>cordova create hello com.example.hello HelloWorld
>cd hello
>cordova platform add android
![Page 9: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/9.jpg)
Структура Android приложений
>cordova build
![Page 10: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/10.jpg)
Структура Android приложений
apk to zip
![Page 11: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/11.jpg)
Структура Android приложений
assets не компилируемые ресурсы. Доступ из приложения через файловую систему.
![Page 12: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/12.jpg)
Структура Android приложений
res компилируемые ресурсы.resources.arsc таблица ресусов по индексам.
![Page 13: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/13.jpg)
Структура Android приложений
META-INFAndroidManifest.xmlresources.arscclasses.dex
![Page 14: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/14.jpg)
Dalvik
Dalvik opcodes:
http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
![Page 15: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/15.jpg)
Dalvik
![Page 16: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/16.jpg)
Dalvik
![Page 17: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/17.jpg)
Dalvik
Dalvik opcodes:
http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
![Page 18: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/18.jpg)
Dalvik
![Page 19: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/19.jpg)
Структура Dex файлов
http://source.android.com/devices/tech/dalvik/dex-format.html
![Page 20: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/20.jpg)
Dex особенности▪ выполняется на регистровой виртуальной машине
▪ кодировка LEB128
![Page 21: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/21.jpg)
Dex особенности
LEB128 (Little Endian Base 128)
![Page 22: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/22.jpg)
▪ выполняется на регистровой виртуальной машине
▪ кодировка LEB128
▪ относительная адресация
Dex особенности
![Page 23: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/23.jpg)
▪ Относительная адресация (в отличие от iOS)
▪ Большинство DEX объектов представлены по индексу в списке
▪ Закодированные объекты в списке вычисляют свой индекс от первого
объекта + смещение до текущего объекта
▪ Использование такой дельты, дает меньшие числа и меньший размер в
байтах при использовании кодировки LEB128
Например:
В стурктуре class_data_item поля static_fields, instance_fields, direct_methods
и virtual_methods представлены при помощи смещений.
Dex особенности
![Page 24: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/24.jpg)
▪ Пример относительной адресации
Dex особенности
![Page 25: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/25.jpg)
▪ выполняется на регистровой виртуальной машине
▪ кодировка LEB128
▪ относительная адресация
▪ упаковка всех классов в один файл (в отличие от упаковки каждого класса в
отдельный файл в .class формате java)
Dex особенности
![Page 26: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/26.jpg)
▪ выполняется на регистровой виртуальной машине
▪ кодировка LEB128
▪ относительная адресация
▪ упаковка всех классов в один файл (в отличие от упаковки каждого класса в
отдельный файл в .class формате java)
▪ Использование MUTF-8
Dex особенности
![Page 27: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/27.jpg)
▪ MUTF-8
▪ Используется для кодирования строк в DEX формате
▪ Символы могут быть длинной в 1, 2 или 3 байта
▪ null байт '\u0000' закодирован в двух байтах в отличие от UTF-8 и всегда
является концом строки
▪ Дополнительные символы кодируются в виде пар char символов
(Supplementary characters).
Dex особенности
![Page 28: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/28.jpg)
Dex ограничения
Ограничения связаны с 32х битностью.
«65К методов хватит всем» или как бороться с лимитом DEX методов в Android
http://habrahabr.ru/post/230665/
https://medium.com/@rotxed/dex-skys-the-limit-no-65k-methods-is-
28e6cb40cf71
![Page 29: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/29.jpg)
Dex парсеры
▪ Для быстрого погружения можно использовать следующие реализации
▪ 010 Editor + dex template http://www.sweetscape.com/010editor/
▪ Dexer C# https://github.com/sailro/Dexer
![Page 30: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/30.jpg)
Dex парсеры
![Page 31: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/31.jpg)
Dex парсеры
![Page 32: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/32.jpg)
Dex парсеры
![Page 33: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/33.jpg)
Dex парсеры
![Page 34: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/34.jpg)
Dex парсеры
![Page 35: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/35.jpg)
Dex парсеры
![Page 36: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/36.jpg)
Dex парсеры
![Page 37: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/37.jpg)
Ресурсы
▪ AndroidManifest.xml
▪ assets
▪ res + resources.arsc
Код
▪ Dex -> Smali
▪ Dex -> Java
Подпись▪ META-INF
Инструментарий
![Page 38: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/38.jpg)
aapt dump xmltree android-debug.apk AndroidManifest.xml>AndroidManifest.xml
Инструментарий
![Page 39: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/39.jpg)
▪ 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
Инструментарий
![Page 40: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/40.jpg)
▪ Apktool - комплексный набор тулзов для разбора Android приложений
▪ Кроссплатформенное решение
▪ Реализована распаковка и упаковки приложения и ресурсов
▪ Реализован разбор Dalvik байткода в Smali
▪ Регулярно выходят обновления
http://ibotpeaches.github.io/Apktool/
Инструментарий
![Page 41: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/41.jpg)
▪ ApkAnalyser - набор тулзов для разбора Android приложений от Sony
Инструментарий
![Page 42: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/42.jpg)
Инструментарий
![Page 43: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/43.jpg)
Инструментарий
Сырцы (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/
![Page 44: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/44.jpg)
Инструментарий
▪ > java -jar baksmali-2.0.3.jar classes.dex
![Page 45: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/45.jpg)
▪ Подпись
▪ Для подписывания можно использовать keytool и jarsigner которые идет в
составе Java SDK
▪ Либо своя реализация, например, на C#
Инструментарий
![Page 46: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/46.jpg)
Зачем? Как применить?
▪ Обезвреживание зловредных приложений и вирусов
▪ Создание зловредных приложений и вирусов
▪ Общий анализ приложений
▪ Упаковка dex в dex
▪ Упаковка приложения в картинку
▪ Потоковая обработка приложений
![Page 47: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/47.jpg)
Заключение
▪ Люди
▪ 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/
![Page 48: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений](https://reader033.vdocuments.pub/reader033/viewer/2022052302/55d30902bb61ebc7278b4579/html5/thumbnails/48.jpg)
Вопросы
▪ Юрий Крутилин
▪ skype: krutilin
▪ https://ru.linkedin.com/in/krutilin
▪ http://habrahabr.ru/users/seod/