48
Android Reverse-Engineering DEX (Dalvik Executable) Инструментарий для реверс-инжиниринга Android-приложений. Немного о DEX (Dalvik Executable) формате Юрий Крутилин 5 августа 2015 г

Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Embed Size (px)

Citation preview

Page 1: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Android Reverse-Engineering

DEX (Dalvik Executable)Инструментарий для реверс-инжиниринга Android-приложений. Немного о DEX (Dalvik Executable) формате

Юрий Крутилин5 августа 2015 г

Page 2: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

whoami

▪ Юрий Крутилин

[email protected]

▪ skype: krutilin

▪ https://ru.linkedin.com/in/krutilin

▪ http://habrahabr.ru/users/seod/

Page 3: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

whoami

▪ DevExtreme (Cross-platform HTML 5/JS tools from DevExpress)

▪ QA и игры для детей.

▪ GetDev (getdev.net Юзер группа разработчиков в Туле)

▪ Особенности WebView

▪ Android

▪ other

Page 4: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

План▪ Способы получения apk

▪ Структура Android приложений

▪ Dex (Dalvik Executable)

▪ обзор формата

▪ парсеры

▪ Инструментарий для реверс инжиниринга Android приложений

▪ Декомпиляция ресурсов

▪ Утилиты для работы с Dex

▪ Зачем? Как применить?

▪ Заключение

▪ Вопросы

Page 5: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Способы получения apk

▪ Использование файл менеджера,

например Total Commander

Page 6: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Способы получения 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-приложений

Способы получения apk

▪ Скачать из магазина Google Play

http://apps.evozi.com/apk-downloader/

использовать обертку для Google Play API

Page 8: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Структура Android приложений

>cordova create hello com.example.hello HelloWorld

>cd hello

>cordova platform add android

Page 9: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Структура Android приложений

>cordova build

Page 10: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Структура Android приложений

apk to zip

Page 11: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Структура Android приложений

assets не компилируемые ресурсы. Доступ из приложения через файловую систему.

Page 12: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Структура Android приложений

res компилируемые ресурсы.resources.arsc таблица ресусов по индексам.

Page 13: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Структура Android приложений

META-INFAndroidManifest.xmlresources.arscclasses.dex

Page 14: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Dalvik

Dalvik opcodes:

http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html

Page 15: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Dalvik

Page 16: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Dalvik

Page 17: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Dalvik

Dalvik opcodes:

http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html

Page 18: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Dalvik

Page 19: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Структура Dex файлов

http://source.android.com/devices/tech/dalvik/dex-format.html

Page 20: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Dex особенности▪ выполняется на регистровой виртуальной машине

▪ кодировка LEB128

Page 21: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Dex особенности

LEB128 (Little Endian Base 128)

Page 22: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

▪ выполняется на регистровой виртуальной машине

▪ кодировка LEB128

▪ относительная адресация

Dex особенности

Page 23: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

▪ Относительная адресация (в отличие от iOS)

▪ Большинство DEX объектов представлены по индексу в списке

▪ Закодированные объекты в списке вычисляют свой индекс от первого

объекта + смещение до текущего объекта

▪ Использование такой дельты, дает меньшие числа и меньший размер в

байтах при использовании кодировки LEB128

Например:

В стурктуре class_data_item поля static_fields, instance_fields, direct_methods

и virtual_methods представлены при помощи смещений.

Dex особенности

Page 24: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

▪ Пример относительной адресации

Dex особенности

Page 25: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

▪ выполняется на регистровой виртуальной машине

▪ кодировка LEB128

▪ относительная адресация

▪ упаковка всех классов в один файл (в отличие от упаковки каждого класса в

отдельный файл в .class формате java)

Dex особенности

Page 26: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

▪ выполняется на регистровой виртуальной машине

▪ кодировка LEB128

▪ относительная адресация

▪ упаковка всех классов в один файл (в отличие от упаковки каждого класса в

отдельный файл в .class формате java)

▪ Использование MUTF-8

Dex особенности

Page 27: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

▪ MUTF-8

▪ Используется для кодирования строк в DEX формате

▪ Символы могут быть длинной в 1, 2 или 3 байта

▪ null байт '\u0000' закодирован в двух байтах в отличие от UTF-8 и всегда

является концом строки

▪ Дополнительные символы кодируются в виде пар char символов

(Supplementary characters).

Dex особенности

Page 28: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

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-приложений

Dex парсеры

▪ Для быстрого погружения можно использовать следующие реализации

▪ 010 Editor + dex template http://www.sweetscape.com/010editor/

▪ Dexer C# https://github.com/sailro/Dexer

Page 30: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Dex парсеры

Page 31: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Dex парсеры

Page 32: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Dex парсеры

Page 33: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Dex парсеры

Page 34: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Dex парсеры

Page 35: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Dex парсеры

Page 36: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Dex парсеры

Page 37: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Ресурсы

▪ AndroidManifest.xml

▪ assets

▪ res + resources.arsc

Код

▪ Dex -> Smali

▪ Dex -> Java

Подпись▪ META-INF

Инструментарий

Page 38: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

aapt dump xmltree android-debug.apk AndroidManifest.xml>AndroidManifest.xml

Инструментарий

Page 39: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

▪ 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-приложений

▪ Apktool - комплексный набор тулзов для разбора Android приложений

▪ Кроссплатформенное решение

▪ Реализована распаковка и упаковки приложения и ресурсов

▪ Реализован разбор Dalvik байткода в Smali

▪ Регулярно выходят обновления

http://ibotpeaches.github.io/Apktool/

Инструментарий

Page 41: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

▪ ApkAnalyser - набор тулзов для разбора Android приложений от Sony

Инструментарий

Page 42: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Инструментарий

Page 43: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Инструментарий

Сырцы (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-приложений

Инструментарий

▪ > java -jar baksmali-2.0.3.jar classes.dex

Page 45: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

▪ Подпись

▪ Для подписывания можно использовать keytool и jarsigner которые идет в

составе Java SDK

▪ Либо своя реализация, например, на C#

Инструментарий

Page 46: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Зачем? Как применить?

▪ Обезвреживание зловредных приложений и вирусов

▪ Создание зловредных приложений и вирусов

▪ Общий анализ приложений

▪ Упаковка dex в dex

▪ Упаковка приложения в картинку

▪ Потоковая обработка приложений

Page 47: Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений

Заключение

▪ Люди

▪ 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-приложений

Вопросы

▪ Юрий Крутилин

[email protected]

▪ skype: krutilin

▪ https://ru.linkedin.com/in/krutilin

▪ http://habrahabr.ru/users/seod/