Декомпіляція і налагодження android-додатків

Декомпіляція і налагодження android-додатків

У статті буде розказано про те, як підключити відладчик до Android-додатку і покроково пройти через викликані методи, використовуючи інформацію, отриману після декомпіляцію додатки.

Вимоги до тестової середовищі:

У статті буде використовуватися наступна конфігурація: Windows 8, Android Studio і IntelliJ IDEA. Пристрій: Nexus 4 з Android версії 4.4.4. Рекомендую все утиліти додати в змінну оточення PATH, щоб полегшити і прискорити доступ до цих інструментів.

Android application package (APK), який використовується в статті, можна завантажити звідси: com.netspi.egruber.test.apk.

Інструкція нижче допоможе вам підготувати пристрій для експериментів.

Активація розділу Developer Options

Для початку на Android-пристрої повинна бути дозволена налагодження через USB (опція USB debugging), що дозволить «спілкуватися» з девайсом за допомогою інструментів з набору Android SDK. Однак перед цим необхідно активувати розділ Developer options. На пристрої зайдіть в розділ Settings> About Phone і натисніть кілька разів на пункт Build Number, після чого має з'явитися повідомлення про те, що розділ Developer options активований.

Декомпіляція і налагодження android-додатків

Декомпіляція і налагодження android-додатків

Малюнок 1: Для того щоб активувати розділ Developer options, необхідно кілька разів клацнути на Build number

Дозвіл налагодження через USB

Щоб дозволити налагодження через USB-порт, зайдіть в розділ Settings> Developer options і відзначте прапорець навпроти USB debugging.

Декомпіляція і налагодження android-додатків

Малюнок 2: Включення опції USB debugging

Підключення пристрою і запуск ADB

Після підключення пристрою до комп'ютера через USB-порт, має з'явитися повідомлення «USB debugging connected on the device». Також слід перевірити, чи можна підключитися до пристрою за допомогою додатка Android Debug Bridge (ADB), що входить до складу Android SDK (пакет Android SDK Platform-tools). У командному рядку введіть таку команду:

Пристрій повинен з'явитися у списку.

Декомпіляція і налагодження android-додатків

Малюнок 3: Список підключених пристроїв

Якщо пристрій не відображається в списку, то найбільш вірогідна причина в некоректно встановлених драйверах (в Windows). Залежно від пристрою драйвер можна знайти або в Android SDK, або на сайті виробника.

Перевірка додатки на можливість налагодження

Перед налагодженням Android-додатків спочатку необхідно перевірити, чи є така можливість. Перевірку можна виконати декількома способами.

Перший спосіб - запустити Android Device Monitor. що входить до складу Android SDK (в папці tools). У Windows файл називається monitor.bat. При відкритті Android Device Monitor пристрій відобразиться в розділі Devices.

Декомпіляція і налагодження android-додатків

Малюнок 4: Додаток Android Device Monitor

Якщо який-небудь додаток на пристрої можна налагоджувати, це додаток також відобразиться в списку. Я створив тестову програму, але список порожній, оскільки програму налагоджувати не можна.

Другий спосіб перевірити додаток на можливість налагодження - дослідити файл AndroidManifest.xml з пакета додатка (APK, Android application package). APK є zip-архів, що містить всю інформацію, необхідну для запуску програми на Android-пристрої.

Всякий раз, коли додатки завантажується з Google Play Store, також завантажується і пакет програми. Всі завантажені APK-файли зазвичай зберігаються на пристрої в папці / data / app. Якщо у вас немає прав суперкористувача, ви не зможете отримати список файлів з директорії / data / app. Хоча, якщо ви знаєте ім'я APK-файлу, можете скопіювати його за допомогою утиліти adb. Щоб дізнатися ім'я APK-файлу, введіть наступну команду:

З'явиться командний рядок пристрою. Потім введіть наступну команду:

pm list packages -f

У списку подано пакетів на пристрої.

Декомпіляція і налагодження android-додатків

Малюнок 5: Перелік пакетів на пристрої

Дивлячись на список, знаходимо тестове додаток.

Декомпіляція і налагодження android-додатків

Малюнок 6: Пакет створеного тестового додатка (виділено білим)

Тепер необхідно скопіювати файл пакета. Відкриваємо шелл і вводимо наступну команду:

adb pull /data/app/[.apk file] [location]

Декомпіляція і налагодження android-додатків

Малюнок 7: Копіюємо APK-файл з пристрою в систему

Тепер потрібно відкрити файл пакета і досліджувати вміст AndroidManifest.xml. На жаль, ми не можемо просто так розпакувати архів, оскільки APK-файл закодований в бінарному форматі. Для розкодування найчастіше використовується утиліта apktool. хоча я використовую APK Studio. оскільки у цієї програми доброзичливий графічний інтерфейс. Далі в статті ми розповімо про APK Studio.

У APK Studio клікніть на маленьку зелену іконку, задайте ім'я проекту і вкажіть шлях до APK файлу. Потім вкажіть нехай для збереження проекту.

Декомпіляція і налагодження android-додатків

Малюнок 8: Створення нового проекту в APK Studio

Після відкриття APK виберіть файл AndroidManifest.xml і подивіться параметри тега application. Якщо прапор android: debuggable відсутня (або присутній, але встановлено значення false), значить, додаток налагоджувати не можна.

Декомпіляція і налагодження android-додатків

Малюнок 9: Вміст файлу AndroidManifest.xml

Модифікація файлу AndroidManifest.xml

За допомогою утиліти apktool або APK Studio ми можемо модифікувати файли і упаковувати вміст назад в пакет. Зараз ми змінимо файл AndroidManifest.xml так, щоб додаток можна було налагоджувати. Додаємо всередину тега application рядок android: debuggable = "true".

Декомпіляція і налагодження android-додатків

Малюнок 10: Змінюємо вміст тега application

Після додавання прапора натискаємо на іконку «молоток» і заново збираємо пакет. Пересобран пакет буде знаходитися в директорії build / apk.

Декомпіляція і налагодження android-додатків

Малюнок 11: Повторна збірка пакета завершилася успішно

Після пересборки пакет підписується і його можна заново встановити на пристрої (всі Android-додатки повинні бути підписані). Більшість додатків не перевіряє сертифікат, за допомогою якого відбувається підпис. В іншому випадку необхідно змінити код, який виконує цю перевірку.

Тепер потрібно встановити пересобран пакет. Спочатку видаляємо старе додаток за допомогою наступної команди:

adb pm uninstall [package name]

Потім встановлюємо новий пакет:

adb install [.apk file]

Також можна видалити і встановити пакет однією командою:

adb install -r [.apk file]

Декомпіляція і налагодження android-додатків

Малюнок 12: Встановлення пересобран пакета

Перевірте, щоб переустановленное додаток коректно запускалося на пристрої. Якщо все працює, переходимо назад в Android Device Monitor, де має з'явитися тестове додаток.

Декомпіляція і налагодження android-додатків

Малюнок 13: Тепер пересобран додаток можна налагоджувати

Налаштування середовища розробки (IDE)

Тепер до пересобран додатком можна підчепити відладчик, але спочатку потрібно створити проект в середовищі розробки (в статті використовується IntelliJ IDEA). Створюємо новий проект. В поле Application name вказуємо довільне ім'я. В поле Package name вказуємо ім'я, в точності збігається з ієрархією папок пересобран пакета.

Декомпіляція і налагодження android-додатків

Малюнок 14: Створення нового проекту в IntelliJ IDEA

Зазвичай ім'я APK-файлу збігається зі структурою папок, хоча, якщо ви не впевнені, в APK Studio перевірте ієрархію директорій до папки, де знаходяться файли додатків. У моєму випадку ім'я та структура папок повністю збігаються (com.netspi.egruber.test).

Декомпіляція і налагодження android-додатків

Малюнок 15: Ієрархія директорій тестового додатка

Зніміть прапорець «Create Hello World Activity» і завершите створення проекту (всі інші параметри залишаються за замовчуванням). Новий проект повинен виглядати приблизно так:

Декомпіляція і налагодження android-додатків

Малюнок 16: Ієрархія папок і файлів нового проекту

Після створення проекту потрібно додати вихідний код з APK-файлу для того, щоб відладчик «знав» імена символів, методів, змінних і т. Д. Хороша новина в тому, що Android-додатки можна декомпілювати практично без втрати якості (вихідний код буде збігатися з оригіналом). Після декомпіляцію вихідний текст імпортується в середу розробки (IDE).

Отримання вихідних текстів з пакета додатка

Для початку необхідно перетворити APK в jar-файл. Потім ми за допомогою java-декомпілятори отримаємо вихідний текст програми. Перетворення в jar будемо робити за допомогою утиліти dex2jar. У dex2jar є файл d2j-dex2jar.bat, який використовується для конвертації APK в jar. Синтаксис команди досить простий:

d2j-dex2jar.bat [.apk file]

Декомпіляція і налагодження android-додатків

Малюнок 17: Перетворення APK в jar

Потім відкриваємо або перетягуємо отриманий файл в JD-GUI (це java-декомпілятор).

Декомпіляція і налагодження android-додатків

Малюнок 18: Структура jar-файлу

Jar-файл повинен відобразитися у вигляді ієрархічної структури, всередині якої знаходяться java-файли з Новомосковскбельним вихідним кодом. Заходимо в File> Save All Sources, щоб упакувати все вихідні тексти в zip-архів.

Декомпіляція і налагодження android-додатків

Малюнок 19: Збереження вихідних текстів декомпілювати файлу

Після збереження вихідних текстів розпаковуємо архів в окрему директорію.

Декомпіляція і налагодження android-додатків

Малюнок 20: Розпакований архів

Тепер потрібно імпортувати обидві директорії в створений раніше проект в IDE. У IntelliJ заходимо в папку src і копіюємо туди вміст розпакованого архіву (дві директорії).

Декомпіляція і налагодження android-додатків

Малюнок 21: Обидві папки скопійовані в директорію src

Повертаючись в Intellij, бачимо оновлений проект.

Декомпіляція і налагодження android-додатків

Малюнок 22: У проекті з'явилися вихідні тексти

Якщо ми кликнемо на який-небудь елемент зі списку, то побачимо вихідний текст. Як видно на скріншоті нижче (вихідний текст класу LoginActivity), вихідний код обфусцірован за допомогою ProGuard.

Декомпіляція і налагодження android-додатків

Малюнок 23: Обфусцірованний вихідний текст класу LoginActivity

Тепер, коли в проекті з'явилися вихідні тексти, ми можемо почати встановлювати точки зупинки на методах і змінних. По досягненню точок зупину додаток буде зупинятися. Як приклад я встановив точку зупину на методі (прямо в обфусцірованном коді), що відповідає за обробку інформації, введеної в текстовому полі.

Декомпіляція і налагодження android-додатків

Малюнок 24: Поставлено крапку зупинки на обфусцірованний метод

Як тільки з'явилася точка зупинки, підключаємо відладчик до процесу на пристрої, клікнувши на іконку з екраном в правому верхньому куті (на вашій IDE іконка може відрізнятися).

Малюнок 25: Підключаємо відладчик до процесу

Далі вам буде запропоновано вибрати процес, до якого потрібно підключитися. Це показує лише процеси з прапором android: debuggable = "true".

Декомпіляція і налагодження android-додатків

Малюнок 26: Перелік процесів для підключення відладчика

Після вибору процесу відладчик під'єднатися до пристрою.

Декомпіляція і налагодження android-додатків

Малюнок 27: Отладчик підключений до процесу, запущеного на пристрої

У текстове поле я буду вводити число 42 (якщо пам'ятаєте, на відповідному методі стоїть крапка зупинки).

Декомпіляція і налагодження android-додатків

Малюнок 28: У текстове поле вводимо число 42

Декомпіляція і налагодження android-додатків

Малюнок 29: Спрацювала точка зупинки

На скріншоті нижче видно число, яке раніше ми ввели в текстовому полі.

Декомпіляція і налагодження android-додатків

Малюнок 30: Перелік змінних поточного екземпляра класу

  • Декомпіляція і налагодження android-додатків
  • Декомпіляція і налагодження android-додатків
  • Декомпіляція і налагодження android-додатків
  • Декомпіляція і налагодження android-додатків