Сучасний світ мобільних технологій постійно розвивається, і з ним зростає потреба в надійних інструментах для розробки та аналізу додатків.
Зворотна розробка (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
- завантажте та встановіть VS Code з офіційного сайту.
Інсталяція APKLab
-
відкрийте VS Code
-
перейдіть до вкладки Extensions (CMD+Shift+X)
- у рядку пошуку введіть
APKLab
і натисніть Install
Налаштування залежностей
Завантажте та встановіть apktool та jadx:
brew install apktool
brew install jadx
Встановлення Quark-Engine та налаштування для роботи з APKLab
Встановлення Python3
Для роботи Quark-Engine необхідно мати встановлений Python3.
1. Перевірте, чи Python3 вже встановлений
python3 --version
Якщо Python3 встановлений, команда покаже його версію.
Якщо ні, встановіть його через Homebrew:
brew install python
2. Перевірте, чи встановлений pip
(менеджер пакетів для Python):
python3 -m ensurepip --upgrade
Встановлення Quark-Engine
Quark-Engine встановлюється через pip
або pipx
. Найкраще використовувати pipx
для ізольованої установки.
1. Встановіть pipx:
brew install pipx pipx ensurepath
2. Установіть Quark-Engine через pipx
:
pipx install quark-engine
3. Перевірте, чи Quark-Engine встановлений і працює:
quark --help
Завантаження правил для Quark-Engine
Quark-Engine потребує правил для аналізу APK.
1. Завантажте правила з офіційного репозиторію Quark-Engine:
git clone https://github.com/quark-engine/quark-rules.git ~/.quark-engine/quark-rules
2. Перевірте, чи правила завантажились:
ls ~/.quark-engine/quark-rules/rules
Ви повинні побачити список JSON-файлів.
Перевірка роботи
- відкрийте APK-файл через APKLab:
-
Show And Run Commands (CMD + Shift + P)
-
в списку оберіть “APKLab: Open an APK”
-
-
оберіть необхідний файл .apk
-
оберіть необхідні аргументи (далі розберемо шо тут до чого)
- далі буде відкрито окремий проєкт з “розібраним” .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) - показує некоректний (погано декомпільований) код, який може містити проблеми.
Клікабельний список з інформацією о вразливостях
Модифікація додатку
APKLab є корисним інструментом для розробників, які працюють із додатками без доступу до вихідного коду:
-
Редагування ресурсів. Можливість змінювати файли ресурсів, такі як
strings.xml
або графічні елементи. -
Оптимізація коду. Декомпілюйте Java-код або Smali, вносьте оптимізації та збирайте APK назад.
-
Внесення виправлень. Розробники можуть змінювати роботу додатка, вносячи виправлення в код без вихідного проекту.
Для цього можна використовувати:
-
—no-src (apktool) - якщо потрібно зосередитись на ресурсах, а не на декомпіляції коду.
-
—no-res (apktool) - зосереджується виключно на коді, ігноруючи ресурси.
-
—force-manifest (apktool) - забезпечує правильне декодування файлу
AndroidManifest.xml
.
Ресурси додатку
Перевірка безпеки
Деобфускація — це процес відновлення зрозумілого вигляду обфускованого коду. Вона включає спроби розшифрувати або зробити код читабельним шляхом аналізу, перейменування класів і методів у зрозумілі назви, а також відновлення вихідної логіки програми для полегшення її аналізу.
Цей плагін допомагає також знаходити критичні вразливості:
-
Аналіз передачі даних. Виявлення незашифрованих або небезпечних каналів зв’язку.
-
Пошук уразливих API-викликів. Перевірка функцій, які можуть стати вектором для атак.
-
Виявлення hardcoded-даних. APKLab дозволяє знаходити жорстко закодовані паролі, токени або конфіденційну інформацію в ресурсах чи коді.
Корисні функції для цього:
-
—deobf (jadx) - деобфускація коду, що дозволяє зробити його більш читабельним.
-
—only-main-classes (apktool) - аналізує тільки основні класи, що пришвидшує процес.
-
—no-debug-info (apktool) - відключає зайву дебаг-інформацію, щоб зосередитись на основних аспектах безпеки.
Деобфускація коду
Перехоплення HTTPS-трафіку та обхід SSL Pinning
Окремо хотілося би виділити можливість обходу SSL Pinning через дану тулзу. Давайте окремо це і розглянемо.
Як працює “Prepare for HTTPS Inspection”:
Пропоную детальніше розглянути, що відбувається, коли ви виконуєте “Prepare for HTTPS Inspection” і потім “APKLab: Rebuild the APK”:
- Декомпіляція APK-файлу
APKLab розбирає APK для доступу до коду Smali або Java.
- Prepare for HTTPS Inspection
Ця дія готує APK-файл для аналізу HTTPS-запитів, які відправляє додаток. Що ж при цьому відбувається:
-
Додавання сертифіката для MITM-проксі У файл network_security_config.xml (або створюється новий, якщо його немає) додається конфігурація, яка дозволяє додатку приймати самопідписані сертифікати. Це потрібно для використання інструментів типу Charles Proxy чи іншого сніфферу, які виконують роль “людини посередині” (MITM) для перехоплення HTTPS-трафіку.
-
Модифікація APK APK змінюється, щоб дозволити перехоплення зашифрованого трафіку. Без цього програма могла б заблокувати такі спроби.
-
Декомпіляція та зміна файлів: APKLab використовує інструменти, як apktool, для декомпіляції APK. У вихідних файлах додається необхідна конфігурація для роботи HTTPS Inspection.
-
APKLab: Rebuild the APK
Після внесення змін APK потрібно зібрати заново. Ось що відбувається:
-
Зворотна компіляція: інструмент apktool, збирає змінені файли назад у формат APK. Всі зміни, зроблені під час “Prepare for HTTPS Inspection”, інтегруються у фінальний файл.
-
Підписання APK: під час збірки APKLab генерує тестовий підпис (test key), оскільки оригінальний APK зазвичай має власний цифровий підпис розробника, який не можна повторити без відповідного ключа. Цей підпис дозволяє встановити змінений APK на пристрій для тестування.
-
Створення готового APK: у результаті ви отримуєте новий APK-файл, який можна встановити на пристрій для подальшого аналізу.
-
Приклад підготовки apk до обходу SSL Pinning
-
Обираємо потрібний нам .apk файл (для прикладу юзаю twitter.apk)
-
Запускаємо Visual Studio Code
-
Визиваємо APKLab і обираємо наш apk (через CMD+Shift+P)
-
Нічого не обираючи (за замовчуванням обрано —only-main-classes apktool)
-
Натискаємо “ОK”
-
Дочекавшись обробки погоджуємося довіряти проекту Тепер в директорії, де був наш twitter.apk зʼявилась папка - twitter
-
Далі “правою кнопкою миші” натискаємо на apktool.yml
-
Обираємо “Prepare for HTTPS Inspection”
-
Дочекавшись закінчення операції знову “правою кнопкою миші” натискаємо на apktool.yml
-
Обираємо “APKLab: Rebuild the APK”
-
Нічого не змінюючи натискаємо на “OK” (рекомендував би ще обрати опцію debug)
-
Тепер перезібраний 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()
) для моніторингу.
- використовуйте системні API (
-
Реалізація багаторівневого логування:
- використовуйте кастомні механізми логування, які будуть непомітними для зловмисників.
Шифрування коду
Дані та критичні частини коду повинні бути шифровані для запобігання прямому доступу.
-
Зашифруйте конфігураційні файли (наприклад,
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:
-
потреба у попередньому налаштуванні
-
обмежена ефективність для додатків із сильною обфускацією