gennadiy dubina - android: reverse engineering

31
Android: вскрываем и анализируем чужие приложения Beginner level Геннадий Дубина

Upload: dataart

Post on 27-Jul-2015

56 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Gennadiy Dubina - Android: Reverse engineering

Android: вскрываем и анализируем чужие

приложения

Beginner level

Геннадий Дубина

Page 2: Gennadiy Dubina - Android: Reverse engineering

Оглавление

• Зачем?• Tools

– smali/baksmali– Apktool– dex2jar– jd-gui– JADX– ApkStudio– Simplify

• Анализируем и модифицируем код– Web proxy– Smali syntax– BuildConfig.DEBUG и логирование – ProGuard

Page 3: Gennadiy Dubina - Android: Reverse engineering

Зачем?

• Подсмотреть код• Добавить перевод/подправить

ресурсы• Разобрать логику• «Вытащить» ресурсы или ключи• Понять протокол работы

Page 4: Gennadiy Dubina - Android: Reverse engineering

Smali/Baksmali

• Качаем тут - https://bitbucket.org/JesusFreke/smali

• Smali: smali files -> dex• Baksmali: dex->smali files

TO

OL

S

Page 5: Gennadiy Dubina - Android: Reverse engineering

ApkTool

• Качаем тут – http://ibotpeaches.github.io/Apktool

• Распаковка/Упаковка APK• «Дизасемблирование» ресурсов• Дезасемлирование dex

TO

OL

S

Page 6: Gennadiy Dubina - Android: Reverse engineering

dex2jar

• Качаем тут – https://github.com/pxb1988/dex2jar

• Очень много инструментов внутри• Даже есть альтернативный

smali/baksmali• Основной инструмент – d2j-dex2jar

TO

OL

S

Page 7: Gennadiy Dubina - Android: Reverse engineering

JD-GUI

• Java decompiler • Качаем тут - http://jd.benow.ca • Иногда не понимает код

TO

OL

S

Page 8: Gennadiy Dubina - Android: Reverse engineering

JADX

• Качаем тут - https://github.com/skylot/jadx • Свежий инструмент для

декомпиляции .dex • Пытается подставлять имена ресурсов,

иногда это вредит.• Понимает больше кода чем JD-GUI

TO

OL

S

Page 9: Gennadiy Dubina - Android: Reverse engineering

Совсем новые

• ApkStudio - https://apkstudio.codeplex.comИнструмент который умеет открывать APK файлы

• Simplify - https://github.com/CalebFenton/simplifyКомплексный инструмент для автоматического анализа кода,вычисляет зашифрованные переменные по время исполнения

TO

OL

S

Page 10: Gennadiy Dubina - Android: Reverse engineering

Анализ и модификация

• Анализ– Используем «их» jar в «нашем» коде– «Снифим» трафик – Дампим память

• Модификация– Smali– Java

Page 11: Gennadiy Dubina - Android: Reverse engineering

WebProxy

• Простой способ анализировать трафик• Charles - http://www.charlesproxy.com• Платный, но есть триал

Page 13: Gennadiy Dubina - Android: Reverse engineering

DEBUG

RELEASE

Page 14: Gennadiy Dubina - Android: Reverse engineering

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[][][]

Page 15: Gennadiy Dubina - Android: Reverse engineering

Methods and Fields

• Method:Lpackage/name/ObjectName;->MethodName(III)Z

• Field:Lpackage/name/ObjectName;->FieldName:Ljava/lang/String;

Page 16: Gennadiy Dubina - Android: Reverse engineering

StringBuilder append

Page 17: Gennadiy Dubina - Android: Reverse engineering

Логирование

• Удалять, а не выключать!

Page 18: Gennadiy Dubina - Android: Reverse engineering

BuildConfig.DEBUG

• public static final boolean DEBUG = Boolean.parseBoolean("true");

• public static final boolean DEBUG = false;

Page 19: Gennadiy Dubina - Android: Reverse engineering

Debug

Page 20: Gennadiy Dubina - Android: Reverse engineering

Release

Page 21: Gennadiy Dubina - Android: Reverse engineering

Release + ProGuard

Page 22: Gennadiy Dubina - Android: Reverse engineering

Release + ProGuard(optimize)

• Как включить?

• Результат

Page 23: Gennadiy Dubina - Android: Reverse engineering

Logger

Page 24: Gennadiy Dubina - Android: Reverse engineering

DE

BU

G

Page 25: Gennadiy Dubina - Android: Reverse engineering

Timber.d with text

DE

BU

G

Page 26: Gennadiy Dubina - Android: Reverse engineering

Timber.d: format string + args

DE

BU

G

Page 27: Gennadiy Dubina - Android: Reverse engineering

Timber.e: error + format string + args

DE

BU

G

Page 28: Gennadiy Dubina - Android: Reverse engineering

+P

RO

GU

AR

D O

PT

IMIZ

E

Page 29: Gennadiy Dubina - Android: Reverse engineering

Удаляем логирование

Page 30: Gennadiy Dubina - Android: Reverse engineering

Log вместо Timber + ProGurad optimize

Page 31: Gennadiy Dubina - Android: Reverse engineering

Вопросы?