skip to content
Зміст

Сучасний світ мобільних технологій постійно розвивається, і з ним зростає потреба в надійних інструментах для розробки та аналізу додатків.

Зворотна розробка (reverse engineering) — це дослідження пристрою чи програми з метою розуміння принципів їхньої роботи.

Найчастіше її застосовують для:

  • створення аналогів без точного копіювання функцій

  • модифікації та розширення функціоналу додатків

  • усунення обмежень у використанні програмного забезпечення

  • звісно, у цілях злому додатків (наприклад, для вивчення роботи API)

Ми ж розглянемо реверс-інжиніринг .apk файлів в розрізі інструмента APKLab.


Що ж таке APKLab?

Одним із найефективніших інструментів для аналізу Android-додатків точно є плагін APKLab.

Основні можливості цього пацана:

  • автоматизація складних рутинних процесів

  • інтеграція з популярними інструментами реверс-інжинірингу

  • декомпіляція, редагування та повторна збірка APK-файлів

  • редагування smali-коду та ресурсів

  • звіт про аналіз шкідливого ПЗ

  • оптимізація роботи з обфускованим кодом

  • повторне підписання APK-файлів

Обфускація — це процес ускладнення вихідного коду програми, який робить його важчим для читання та аналізу, але не змінює функціональності. Це досягається шляхом перейменування класів, методів і змінних у неінформативні назви, видалення зайвого коду та застосування інших технік для захисту від зворотного інжинірингу.

У цій статті ми детально розглянемо функціонал, встановлення і практичне застосування APKLab, а також зробимо акцент на процесі перехоплення HTTPS-трафіку.


Як встановити APKLab?

Для роботи з додатком для декомпіляції та аналізу необхідно попередньо встановити:

  • Java Development Kit (JDK)

  • Visual Studio Code

  • apktool

  • jadx

  • python

  • quark

Встановлення Visual Studio Code

Інсталяція APKLab

  • відкрийте VS Code

  • перейдіть до вкладки Extensions (CMD+Shift+X)

APKLab - VS Code - Extensions

  • у рядку пошуку введіть APKLab і натисніть Install

Налаштування залежностей

Завантажте та встановіть apktool та jadx:

Terminal window
brew install apktool
Terminal window
brew install jadx

Встановлення Quark-Engine та налаштування для роботи з APKLab

Встановлення Python3

Для роботи Quark-Engine необхідно мати встановлений Python3.

1. Перевірте, чи Python3 вже встановлений

Terminal window
python3 --version

Якщо Python3 встановлений, команда покаже його версію.

Якщо ні, встановіть його через Homebrew:

Terminal window
brew install python

2. Перевірте, чи встановлений pip (менеджер пакетів для Python):

Terminal window
python3 -m ensurepip --upgrade

Встановлення Quark-Engine

Quark-Engine встановлюється через pip або pipx. Найкраще використовувати pipx для ізольованої установки.

1. Встановіть pipx:

Terminal window
brew install pipx pipx ensurepath

2. Установіть Quark-Engine через pipx:

Terminal window
pipx install quark-engine

3. Перевірте, чи Quark-Engine встановлений і працює:

Terminal window
quark --help

Завантаження правил для Quark-Engine

Quark-Engine потребує правил для аналізу APK.

1. Завантажте правила з офіційного репозиторію Quark-Engine:

Terminal window
git clone https://github.com/quark-engine/quark-rules.git ~/.quark-engine/quark-rules

2. Перевірте, чи правила завантажились:

Terminal window
ls ~/.quark-engine/quark-rules/rules

Ви повинні побачити список JSON-файлів.


Перевірка роботи

  • відкрийте APK-файл через APKLab:
    • Show And Run Commands (CMD + Shift + P)

    • в списку оберіть “APKLab: Open an APK”

APKLab: Open an APK

  • оберіть необхідний файл .apk

  • оберіть необхідні аргументи (далі розберемо шо тут до чого)

features and arguments

  • далі буде відкрито окремий проєкт з “розібраним” .apk файлом - це і означає, що все ок

Практичне застосування APKLab

Аналіз шкідливих додатків

Даний інструмент дозволяє виконувати широкий спектр дій для аналізу потенційно шкідливих додатків:

  • Розпаковування APK-файлів. Інструмент автоматично декомпілює APK у вихідний код Smali або Java. Це дозволяє переглядати структуру програми.

  • Аналіз AndroidManifest.xml. Ви можете виявити небезпечні дозволи, які можуть використовуватися для шкідливих дій, таких як доступ до особистих даних або активація привілеїв адміністратора.

  • Вивчення Smali-коду або Java-декомпіляції. APKLab дає змогу шукати вразливості або підозрілі функції в коді, наприклад, виклики сторонніх бібліотек або погано захищених API.

Для цього можна використовувати такі функції:

  • quark_analysis [Use Quark-Engine] - автоматично виявляє потенційно шкідливі активності.

  • decompile_java [Use Jadx] - декомпілює APK у Java-код для зручнішого аналізу.

  • —show-bad-code (jadx) - показує некоректний (погано декомпільований) код, який може містити проблеми.

quark_analysis

Клікабельний список з інформацією о вразливостях


Модифікація додатку

APKLab є корисним інструментом для розробників, які працюють із додатками без доступу до вихідного коду:

  • Редагування ресурсів. Можливість змінювати файли ресурсів, такі як strings.xml або графічні елементи.

  • Оптимізація коду. Декомпілюйте Java-код або Smali, вносьте оптимізації та збирайте APK назад.

  • Внесення виправлень. Розробники можуть змінювати роботу додатка, вносячи виправлення в код без вихідного проекту.

Для цього можна використовувати:

  • —no-src (apktool) - якщо потрібно зосередитись на ресурсах, а не на декомпіляції коду.

  • —no-res (apktool) - зосереджується виключно на коді, ігноруючи ресурси.

  • —force-manifest (apktool) - забезпечує правильне декодування файлу AndroidManifest.xml.

apktool

Ресурси додатку


Перевірка безпеки

Деобфускація — це процес відновлення зрозумілого вигляду обфускованого коду. Вона включає спроби розшифрувати або зробити код читабельним шляхом аналізу, перейменування класів і методів у зрозумілі назви, а також відновлення вихідної логіки програми для полегшення її аналізу.

Цей плагін допомагає також знаходити критичні вразливості:

  • Аналіз передачі даних. Виявлення незашифрованих або небезпечних каналів зв’язку.

  • Пошук уразливих API-викликів. Перевірка функцій, які можуть стати вектором для атак.

  • Виявлення hardcoded-даних. APKLab дозволяє знаходити жорстко закодовані паролі, токени або конфіденційну інформацію в ресурсах чи коді.

Корисні функції для цього:

  • —deobf (jadx) - деобфускація коду, що дозволяє зробити його більш читабельним.

  • —only-main-classes (apktool) - аналізує тільки основні класи, що пришвидшує процес.

  • —no-debug-info (apktool) - відключає зайву дебаг-інформацію, щоб зосередитись на основних аспектах безпеки.

jadx

Деобфускація коду


Перехоплення HTTPS-трафіку та обхід SSL Pinning

Окремо хотілося би виділити можливість обходу SSL Pinning через дану тулзу. Давайте окремо це і розглянемо.


Як працює “Prepare for HTTPS Inspection”:

Пропоную детальніше розглянути, що відбувається, коли ви виконуєте “Prepare for HTTPS Inspection” і потім “APKLab: Rebuild the APK”:

  1. Декомпіляція APK-файлу

APKLab розбирає APK для доступу до коду Smali або Java.

  1. Prepare for HTTPS Inspection

Ця дія готує APK-файл для аналізу HTTPS-запитів, які відправляє додаток. Що ж при цьому відбувається:

  • Додавання сертифіката для MITM-проксі У файл network_security_config.xml (або створюється новий, якщо його немає) додається конфігурація, яка дозволяє додатку приймати самопідписані сертифікати. Це потрібно для використання інструментів типу Charles Proxy чи іншого сніфферу, які виконують роль “людини посередині” (MITM) для перехоплення HTTPS-трафіку.

  • Модифікація APK APK змінюється, щоб дозволити перехоплення зашифрованого трафіку. Без цього програма могла б заблокувати такі спроби.

  • Декомпіляція та зміна файлів: APKLab використовує інструменти, як apktool, для декомпіляції APK. У вихідних файлах додається необхідна конфігурація для роботи HTTPS Inspection.

  1. APKLab: Rebuild the APK

    Після внесення змін APK потрібно зібрати заново. Ось що відбувається:

    • Зворотна компіляція: інструмент apktool, збирає змінені файли назад у формат APK. Всі зміни, зроблені під час “Prepare for HTTPS Inspection”, інтегруються у фінальний файл.

    • Підписання APK: під час збірки APKLab генерує тестовий підпис (test key), оскільки оригінальний APK зазвичай має власний цифровий підпис розробника, який не можна повторити без відповідного ключа. Цей підпис дозволяє встановити змінений APK на пристрій для тестування.

    • Створення готового APK: у результаті ви отримуєте новий APK-файл, який можна встановити на пристрій для подальшого аналізу.


Приклад підготовки apk до обходу SSL Pinning

  1. Обираємо потрібний нам .apk файл (для прикладу юзаю twitter.apk)

  2. Запускаємо Visual Studio Code

  3. Визиваємо APKLab і обираємо наш apk (через CMD+Shift+P)

  4. Нічого не обираючи (за замовчуванням обрано —only-main-classes apktool)

  5. Натискаємо “ОK”

  6. Дочекавшись обробки погоджуємося довіряти проекту Тепер в директорії, де був наш twitter.apk зʼявилась папка - twitter

  7. Далі “правою кнопкою миші” натискаємо на apktool.yml

  8. Обираємо “Prepare for HTTPS Inspection”

  9. Дочекавшись закінчення операції знову “правою кнопкою миші” натискаємо на apktool.yml

  10. Обираємо “APKLab: Rebuild the APK”

  11. Нічого не змінюючи натискаємо на “OK” (рекомендував би ще обрати опцію debug)

  12. Тепер перезібраний apk нас чекає по шляху: twitter/dist


Якщо поставити на пристрій наш перезібраний вище .apk файл та налаштувати перехоплення трафіку, то ми можемо впевнитися у тому, що трафік ми вже бачимо:

Перехват трафіка


Поради для захисту Android-додатків від зворотного інжинірингу

Захист додатків є критично важливим для збереження конфіденційності даних, захисту інтелектуальної власності та запобігання несанкціонованим модифікаціям. Детально давайте розглянемо, шо з усім цим можна зробити.


Використовуйте інструменти обфускації

Обфускація робить код менш зрозумілим для аналізу, додаючи рівень складності для зловмисників.

  • ProGuard (вбудований в Android SDK):

    • змінює імена класів, методів і змінних на нічого незначущі символи (наприклад, a, b, c)

    • видаляє невикористані класи та методи

    • мінімізує розмір APK.

  • R8 (заміна ProGuard, доступна в сучасних версіях Android Studio):

    • більш ефективний та швидкий інструмент обфускації

    • включає shrinker, оптимізатор та обфускатор в одному модулі.

  • DexGuard:

    • розширена версія ProGuard, яка додає додаткові функції захисту, такі як динамічна обфускація та захист від дебагу.
  • Динамічна обфускація

    • перетворення функцій і логіки в байт-код Dex:

      • додаток завантажує та виконує обфусковані модулі лише під час роботи
    • динамічне завантаження класів:

      • завантаження кодів через ClassLoader із зашифрованих ресурсів.

Захист від дебагу

Блокування дебаг-інструментів запобігає доступу до вихідного коду та runtime-аналізу.

  • Перевірка середовища:

    • визначайте, чи працює додаток на реальному пристрої або в емуляторі

    • використовуйте бібліотеки, які можуть виявляти інструменти дебагу, наприклад, Frida, Xposed чи Magisk.

  • Виявлення активних процесів дебагу:

    • використовуйте системні API (Debug.isDebuggerConnected()) для моніторингу.
  • Реалізація багаторівневого логування:

    • використовуйте кастомні механізми логування, які будуть непомітними для зловмисників.

Шифрування коду

Дані та критичні частини коду повинні бути шифровані для запобігання прямому доступу.

  • Зашифруйте конфігураційні файли (наприклад, shared_preferences або database)

  • Зашифруйте класи та ресурси (додайте захист на рівні .dex файлів)


Реалізуйте SSL Pinning

SSL Pinning захищає комунікацію між додатком і сервером, запобігаючи перехопленню трафіку (Man-in-the-Middle атаки).

  • Механізм SSL Pinning:

    • вбудовуйте сертифікати серверів безпосередньо в додаток

    • перевіряйте відповідність сертифіката під час кожного запиту

  • Додаткові рекомендації:

    • регулярно оновлюйте сертифікати

    • використовуйте сторонні бібліотеки (наприклад, OkHttp з підтримкою SSL Pinning).


Виявлення модифікованих додатків

Запобігання використанню підроблених або модифікованих версій вашого додатка:

  • Цифровий підпис APK:

    • перевіряйте, чи відповідає підпис APK оригінальному.
  • Контроль інтеграції:

    • впровадьте перевірку хешів на рівні вихідного коду.
  • Runtime-перевірка:

    • додаток може самостійно перевіряти, чи було змінено файли в його структуру.
  • Play Integrity API:

    • використовуйте Play Integrity API для перевірки автентичності додатка і середовища виконання

    • перевіряє, чи додаток встановлений із Google Play і працює в захищеному середовищі

    • захищає від використання модифікованих версій APK

    • допомагає виявляти рутовані пристрої, емулятори та інші небезпечні середовища.


Захист ресурсів

Ресурси, такі як текстові рядки, іконки чи графіка, також повинні бути захищені:

  • Обфускація ресурсів (інструменти, такі як AndResGuard, зменшують видимість та змінюють імена ресурсів).

  • Зашифруйте текстові дані (використовуйте шифрування для критичних даних (паролі, API-токени)).


Інтеграція з хмарними рішеннями

Хмарні рішення допомагають зберігати критичні обчислення та дані поза межами пристрою:

  • Перенесіть складні обчислення в хмару:

    • зловмисники не зможуть отримати доступ до бізнес-логіки.
  • Використовуйте API Gateway:

    • захищайте кінцеві точки API через шифрування та авторизацію.

Аутентифікація та токени

Захищайте комунікацію та доступ до серверів:

  • Використовуйте OAuth2.0 для авторизації користувачів.

  • Використовуйте токени доступу замість жорстко закодованих даних.


Регулярні оновлення

Зловмисники знаходять нові способи обійти захист, тому оновлення — це ключовий елемент:

  • Постійно вдосконалюйте механізми безпеки.

  • Випускайте оновлення для виправлення знайдених вразливостей.


Висновок

Хочу зауважити, що переглянув багато відомих додатків і захист практично в усіх на рівні. Розібратися в коді після деобфускації є надзвичайно складно, а іноді й неможливо, але є додатки, де можна перехопити трафік і навіть при зборці з опцією debug - бачити логи додатку.

Але якщо ви бажаєте впевнитися у тому, що ваш додаток достатньо захищений, то це саме той інструмент.

APKLab — універсальний інструмент для реверс-інжинірингу Android-додатків. Незалежно від того, чи ви аналітик безпеки, розробник, чи тестувальник - цей інструмент стане вашим надійним помічником. Ми вже можемо окреслити переваги та недоліки цього плагіну.

Переваги APKLab:

  • інтеграція з популярними інструментами

  • простота використання

  • потужний функціонал для аналізу та модифікації APK

Недоліки APKLab:

  • потреба у попередньому налаштуванні

  • обмежена ефективність для додатків із сильною обфускацією


Обговорення
Вхід через GitHub
Завантаження коментарів...