gennadiy dubina - android: reverse engineering
TRANSCRIPT
Android: вскрываем и анализируем чужие
приложения
Beginner level
Геннадий Дубина
Оглавление
• Зачем?• Tools
– smali/baksmali– Apktool– dex2jar– jd-gui– JADX– ApkStudio– Simplify
• Анализируем и модифицируем код– Web proxy– Smali syntax– BuildConfig.DEBUG и логирование – ProGuard
Зачем?
• Подсмотреть код• Добавить перевод/подправить
ресурсы• Разобрать логику• «Вытащить» ресурсы или ключи• Понять протокол работы
Smali/Baksmali
• Качаем тут - https://bitbucket.org/JesusFreke/smali
• Smali: smali files -> dex• Baksmali: dex->smali files
TO
OL
S
ApkTool
• Качаем тут – http://ibotpeaches.github.io/Apktool
• Распаковка/Упаковка APK• «Дизасемблирование» ресурсов• Дезасемлирование dex
TO
OL
S
dex2jar
• Качаем тут – https://github.com/pxb1988/dex2jar
• Очень много инструментов внутри• Даже есть альтернативный
smali/baksmali• Основной инструмент – d2j-dex2jar
TO
OL
S
JD-GUI
• Java decompiler • Качаем тут - http://jd.benow.ca • Иногда не понимает код
TO
OL
S
JADX
• Качаем тут - https://github.com/skylot/jadx • Свежий инструмент для
декомпиляции .dex • Пытается подставлять имена ресурсов,
иногда это вредит.• Понимает больше кода чем JD-GUI
TO
OL
S
Совсем новые
• ApkStudio - https://apkstudio.codeplex.comИнструмент который умеет открывать APK файлы
• Simplify - https://github.com/CalebFenton/simplifyКомплексный инструмент для автоматического анализа кода,вычисляет зашифрованные переменные по время исполнения
TO
OL
S
Анализ и модификация
• Анализ– Используем «их» jar в «нашем» коде– «Снифим» трафик – Дампим память
• Модификация– Smali– Java
WebProxy
• Простой способ анализировать трафик• Charles - http://www.charlesproxy.com• Платный, но есть триал
Smali syntax
• Сайт о взломе приложений– http://androidcracking.blogspot.com
• Dalvik opcodes(управляющие конструкции)– http://
pallergabor.uw.hu/androidblog/dalvik_opcodes.html – http://
source.android.com/devices/tech/dalvik/dalvik-bytecode.html
• Smali structures examples– http://
androidcracking.blogspot.com/2011/01/example-structuressmali.html
DEBUG
RELEASE
TypesV void - can only be used for return typesZ booleanB byteS shortC charI intJ long (64 bits)F floatD double (64 bits)
L objectexamle: Lpackage/name/ObjectName
[<T> arrayexamle: [[I = int[][], [[[I = int[][][]
Methods and Fields
• Method:Lpackage/name/ObjectName;->MethodName(III)Z
• Field:Lpackage/name/ObjectName;->FieldName:Ljava/lang/String;
StringBuilder append
Логирование
• Удалять, а не выключать!
BuildConfig.DEBUG
• public static final boolean DEBUG = Boolean.parseBoolean("true");
• public static final boolean DEBUG = false;
Debug
Release
Release + ProGuard
Release + ProGuard(optimize)
• Как включить?
• Результат
Logger
DE
BU
G
Timber.d with text
DE
BU
G
Timber.d: format string + args
DE
BU
G
Timber.e: error + format string + args
DE
BU
G
+P
RO
GU
AR
D O
PT
IMIZ
E
Удаляем логирование
Log вместо Timber + ProGurad optimize
Вопросы?