Android-додатків Pentesting

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Основи Android-додатків

Рекомендується спочатку прочитати цю сторінку, щоб дізнатися про найважливіші аспекти безпеки Android і найнебезпечніші компоненти в Android-додатку:

Android Applications Basics

ADB (Android Debug Bridge)

Це основний інструмент, який потрібен для підключення до пристрою Android (емулятора або фізичного пристрою).
ADB дозволяє керувати пристроями як через USB, так і через Network з комп’ютера. Ця утиліта дає змогу копіювати файли в обох напрямках, встановлювати та видаляти додатки, виконувати shell-команди, робити резервні копії даних, читати логи та виконувати інші функції.

Подивіться на наступний список ADB Commands, щоб дізнатися, як використовувати adb.

Smali

Іноді корисно змінити код додатку, щоб отримати доступ до прихованої інформації (наприклад, добре обфускованих паролів або флагів). У такому випадку може бути доречно декомпілювати APK, змінити код і перекомпілювати його.
У цьому уроці ви можете навчитися декомпілювати APK, змінювати Smali-код і повторно збирати APK з новою функціональністю. Це може бути дуже корисною альтернативою для деяких тестів під час динамічного аналізу, які будуть представлені. Тому завжди майте на увазі цю можливість.

Інші цікаві трюки

Автоматичне отримання APK з кількох джерел (justapk)

pip install justapk (Python 3.11+). CLI виводить JSON у stdout і прогрес у stderr (підходить для pipe). Він намагається використовувати детермінований ланцюжок запасних джерел: APK20 → F-Droid → APKPure (mobile API) → APKMirror (HTML scrape) → Uptodown (mobile API) → APKCombo (HTML scrape). Джерела, захищені Cloudflare, використовують curl_cffi з імітацією TLS fingerprint, щоб наслідувати реальних клієнтів і зменшити блокування через виявлення ботів.

justapk download <package>              # auto fallback
justapk download <package> -s apkpure   # pin a source / version / output dir
justapk search telegram
justapk info org.telegram.messenger
justapk convert app.xapk -o output/      # merges splits, re-signs with debug key

convert об’єднує XAPK/split APKs і підписує їх debug key, тож підсумковий APK signature/provenance відрізняється від оригіналу (використовуйте для тестування/аналізу, не для production installs).

  • Витягнути APK з пристрою:
adb shell pm list packages
com.android.insecurebankv2

adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk

adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
  • Об’єднати всі splits і base apks за допомогою APKEditor:
mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
java -jar ../APKEditor.jar m -i splits/ -o merged.apk

# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed

Android malware tradecraft (loaders, fileless DEX, persistence)

Native staging + fileless DEX loaders

Деякі Android droppers впроваджують нативну бібліотеку (lib*.so), яка дешифрує та записує другий ELF (наприклад, l.so) у тимчасовий шлях, завантажує його через JNI, а потім завантажує реальну логіку як DEX лише в пам’яті за допомогою dalvik.system.InMemoryDexClassLoader. Це знижує статичну видимість payload і запобігає запису classes*.dex на диск.

Practical triage points:

  • Look for native libs that dlopen or call System.loadLibrary very early, then resolve Java methods via obfuscated stack strings (e.g., XOR decoded on the stack).
  • Watch for InMemoryDexClassLoader in logs/strings or hooks, which indicates fileless DEX execution.

Quick Frida hook to dump the in‑memory DEX buffer:

Java.perform(() => {
const IM = Java.use('dalvik.system.InMemoryDexClassLoader');
IM.$init.overload('java.nio.ByteBuffer','java.lang.ClassLoader').implementation = function(buf, parent){
const arr = Java.array('byte', buf.array());
const fos = Java.use('java.io.FileOutputStream').$new("/sdcard/memdex.dex");
fos.write(arr); fos.close();
return this.$init(buf, parent);
};
});

Anti-analysis kill-switch

Packed loaders часто self-terminate, коли перевірки emulator або analysis не проходять (наприклад, CPU_ABI validation), викликаючи:

android.os.Process.killProcess(android.os.Process.myPid());

Persistence via foreground service + MediaPlayer loop

Легкий шаблон персистентності — тримати активний foreground service з закріпленим сповіщенням і постійно відтворювати майже нечутну аудіопетлю через MediaPlayer. Це тримає процес «активним» і зменшує вбивання процесу ОС через неактивність. Шукайте використання ForegroundService + MediaPlayer, що зациклює невеликий asset (зазвичай кілька секунд).

Accessibility overlay + ACTION_SET_TEXT hijacking

Після того, як користувач надає Accessibility, banking trojans можуть стежити за foreground app, відтворювати реалістичний оверлей (часто WebView HTML, закодований у Base64) і замінювати поля транзакції за допомогою AccessibilityNodeInfo.ACTION_SET_TEXT. Це дозволяє приховано підмінювати адресу отримувача, поки жертва бачить правдоподібний UI.

Minimal text replacement example:

Bundle args = new Bundle();
args.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE,
"ATTACKER_USDT_ADDRESS");
node.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, args);

Легітимна push-інфраструктура як C2 gating

Замість кастомних сокетів деяке malware використовує Firebase Cloud Messaging (FCM) як C2-канал. Повідомлення FCM можуть ініціювати перевірки телеметрії (стан заряджання, battery %, температура, неактивність користувача) і gate дії, такі як mining або fraud для прихованості.

Encrypted native payload staging with filename‑derived keys

Native payloads можуть доставлятися як зашифровані ELF-блоби і розшифровуватися за допомогою CipherInputStream(), використовуючи ключ derived from SHA‑1 of the downloaded filename. Кожне ім’я файлу/версія дає унікальний ключ, що ускладнює повторне використання статичних IOC.

Jezail rooted Android pentesting toolkit (REST API + web UI)

  • Працює на rooted device (Magisk/rootAVD) і запускає HTTP server on tcp/8080 з Flutter web UI та REST API.
  • Install the release APK with perms: adb install -g -r jezail.apk, then launch the app (server auto-starts).
  • Endpoints: http://<device-ip>:8080/ (UI), http://<device-ip>:8080/api/json (API listing), http://<device-ip>:8080/api/swagger (Swagger).
  • Emulator port-forward to reach UI/API from the host: adb forward tcp:8080 tcp:8080 then browse http://localhost:8080.

Android Enterprise & Work Profile Attacks

Android Enterprise Work Profile Bypass

Кейси та вразливості

Air Keyboard Remote Input Injection

Android Rooting Frameworks Manager Auth Bypass Syscall Hook

Abusing Android Media Pipelines Image Parsers

Firmware Level Zygote Backdoor Libandroid Runtime

Статичний аналіз

Перш за все, для аналізу APK слід переглянути Java код за допомогою декомпілятора.
Будь ласка, прочитайте тут, щоб знайти інформацію про різні доступні декомпілятори.

Пошук цікавої інформації

Просто переглянувши strings APK, можна шукати passwords, URLs (https://github.com/ndelphit/apkurlgrep), api keys, encryption, bluetooth uuids, tokens та будь-що цікаве… також перевіряйте на наявність code execution backdoors або authentication backdoors (хардкоджені admin credentials у додатку).

Firebase

Особливу увагу звертайте на firebase URLs і перевіряйте, чи вони неправильно налаштовані. Більше інформації про те, що таке Firebase і як його експлуатувати тут.

Базове розуміння додатку - Manifest.xml, strings.xml

Огляд файлів Manifest.xml та strings.xml може виявити потенційні вразливості безпеки. До цих файлів можна отримати доступ за допомогою декомпіляторів або перейменувавши розширення APK на .zip та розпакувавши його.

Вразливості, які можна виявити в Manifest.xml, включають:

  • Debuggable Applications: Додатки, позначені як debuggable (debuggable="true") у Manifest.xml, становлять ризик, оскільки дозволяють підключення, які можуть призвести до експлуатації. Для детальнішого розуміння того, як експлуатувати debuggable applications, зверніться до гайду про знаходження та експлуатацію debuggable додатків на пристрої.
  • Backup Settings: Атрибут android:allowBackup="false" має бути явно встановлений для додатків, які працюють з чутливою інформацією, щоб запобігти несанкціонованому резервному копіюванню даних через adb, особливо коли увімкнено usb debugging.
  • Network Security: Користувацькі конфігурації network security (android:networkSecurityConfig="@xml/network_security_config") у res/xml/ можуть визначати деталі безпеки, такі як certificate pins і налаштування HTTP-трафіку. Приклад — дозволити HTTP-трафік для певних доменів.
  • Exported Activities and Services: Виявлення exported activities і services у манифесті може показати компоненти, які можуть бути зловжиті. Подальший аналіз під час dynamic testing може виявити способи експлуатації цих компонентів.
  • Content Providers and FileProviders: Відкриті content providers можуть дозволити несанкціонований доступ або зміну даних. Конфігурацію FileProviders також слід ретельно перевіряти.
  • Broadcast Receivers and URL Schemes: Ці компоненти можуть бути використані для експлуатації, особливо зверніть увагу на те, як URL schemes обробляються щодо вразливостей вводу.
  • SDK Versions: Атрибути minSdkVersion, targetSDKVersion і maxSdkVersion вказують на підтримувані версії Android, що підкреслює важливість відмови від підтримки застарілих, вразливих версій Android з міркувань безпеки.

З файлу strings.xml можна виявити чутливу інформацію, таку як API keys, custom schemas та інші нотатки розробника, що підкреслює необхідність ретельного перегляду цих ресурсів.

Tapjacking

Tapjacking — це атака, коли malicious application запускається і розміщується поверх victim application. Коли воно візуально закриває жертву, його інтерфейс спроектований таким чином, щоб обдурити користувача для взаємодії з ним, при цьому взаємодія передається до victim app.
Фактично це заштовхує користувача в невідомість щодо того, що він насправді виконує дії у victim app.

Find more information in:

Tapjacking

Task Hijacking

Activity з launchMode встановленим як singleTask без визначеного taskAffinity вразлива до Task Hijacking. Це означає, що зловмисний application може бути встановлений і, якщо його запустити перед реальним додатком, він може hijack the task of the real application (тоді користувач буде взаємодіяти з malicious application, думаючи, що використовує реальний).

Більше інформації:

Android Task Hijacking

Insecure data storage

Internal Storage

В Android файли, збережені в internal storage, призначені для доступу виключно додатком, який їх створив. Цей захід безпеки забезпечується операційною системою Android і зазвичай є достатнім для потреб більшості додатків. Проте розробники іноді використовують режими MODE_WORLD_READABLE та MODE_WORLD_WRITABLE для дозволу спільного доступу до файлів між різними додатками. Ці режими не обмежують доступ до файлів з боку інших додатків, включно з потенційно malicious.

  1. Статичний аналіз:
  • Переконайтеся, що використання MODE_WORLD_READABLE і MODE_WORLD_WRITABLE ретельно перевіряється. Ці режими можуть потенційно зробити файли доступними для непередбачуваного або несанкціонованого доступу.
  1. Динамічний аналіз:
  • Перевірте права доступу до файлів, створених додатком. Зокрема, перевірте, чи якісь файли не встановлені як читабельні або записувані для всіх. Це може становити значний ризик для безпеки, оскільки дозволяє будь-якому додатку, встановленому на пристрої, незалежно від його походження чи намірів, читати або змінювати ці файли.

External Storage

При роботі з файлами на external storage, таких як SD Cards, слід вжити певних запобіжних заходів:

  1. Accessibility:
  • Файли на external storage є глобально читабельними та записуваними. Це означає, що будь-який додаток або користувач може отримати до них доступ.
  1. Security Concerns:
  • Через простоту доступу не рекомендується зберігати на external storage чутливу інформацію.
  • External storage може бути вилучено або доступ до неї може отримати будь-який додаток, що робить її менш безпечною.
  1. Handling Data from External Storage:
  • Завжди виконуйте валідацію введених даних з external storage. Це критично, оскільки дані надходять з недовіреного джерела.
  • Зберігання виконуваних файлів або class-файлів на external storage для динамічного завантаження суворо не рекомендується.
  • Якщо ваш додаток має отримувати виконувані файли з external storage, переконайтеся, що ці файли підписані та криптографічно перевірені перед динамічним завантаженням. Це важливо для збереження цілісності безпеки вашого додатку.

External storage може бути доступна за шляхами /storage/emulated/0 , /sdcard , /mnt/sdcard

Tip

Починаючи з Android 4.4 (API 17), у SD card є структура каталогів, яка обмежує доступ додатку тільки до каталогу, спеціально призначеного для цього додатка. Це запобігає отриманню читання чи запису до файлів іншого додатка зловмисним додатком.

Sensitive data stored in clear-text

  • Shared preferences: Android дозволяє кожному додатку легко зберігати xml-файли за шляхом /data/data/<packagename>/shared_prefs/ і іноді в цій папці можна знайти чутливу інформацію у clear-text.
  • Databases: Android дозволяє кожному додатку легко зберігати sqlite-бази за шляхом /data/data/<packagename>/databases/ і іноді в цій папці можна знайти чутливу інформацію у clear-text.

Broken TLS

Accept All Certificates

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

SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it.

Ненадійна криптографія

Погані процеси управління ключами

Деякі розробники зберігають чутливі дані у локальному сховищі і шифрують їх ключем, який hardcoded/predictable у коді. Так робити не слід, оскільки reversing може дозволити зловмисникам витягти конфіденційну інформацію.

Використання insecure та/або deprecated алгоритмів

Розробникам не слід використовувати deprecated algorithms для виконання авторизаційних checks, store або send даних. Деякі з цих алгоритмів: RC4, MD4, MD5, SHA1… Якщо для збереження паролів використовуються hashes, слід застосовувати hashes стійкі до brute-force з використанням salt.

Інші перевірки

  • Рекомендується obfuscate the APK, щоб ускладнити роботу reverse engineer для атакуючих.
  • Якщо додаток є чутливим (наприклад, bank apps), він має виконувати own checks to see if the mobile is rooted і діяти відповідно.
  • Якщо додаток є чутливим (наприклад, bank apps), він має перевіряти, чи використовується emulator.
  • Якщо додаток є чутливим (наприклад, bank apps), він має check it’s own integrity before executing щоб переконатися, що його не модифікували.
  • Використовуйте APKiD, щоб перевірити, який compiler/packer/obfuscator використовувався для побудови APK

React Native Application

Read the following page to learn how to easily access javascript code of React applications:

React Native Application

Xamarin Applications

Read the following page to learn how to easily access C# code of a xamarin applications:

Xamarin Apps

Superpacked Applications

According to this blog post superpacked is a Meta algorithm that compress the content of an application into a single file. The blog talks about the possibility of creating an app that decompress these kind of apps… and a faster way which involves to execute the application and gather the decompressed files from the filesystem.

Automated Static Code Analysis

Інструмент mariana-trench здатний знаходити vulnerabilities шляхом scanning code додатку. Цей інструмент містить набір known sources (що вказує інструменту places, де input контролюється користувачем), sinks (що вказує інструменту dangerous places, де зловмисний введений користувачем input може завдати шкоди) та rules. Ці rules вказують комбінації sources-sinks, які означають вразливість.

Завдяки цьому mariana-trench will review the code and find possible vulnerabilities on it.

Secrets leaked

An application may contain secrets (API keys, passwords, hidden urls, subdomains…) inside of it that you might be able to discover. You could us a tool such as https://github.com/dwisiswant0/apkleaks

Bypass Biometric Authentication

Bypass Biometric Authentication (Android)

Інші цікаві функції

  • Code execution: Runtime.exec(), ProcessBuilder(), native code:system()
  • Send SMSs: sendTextMessage, sendMultipartTestMessage
  • Native functions declared as native: public native, System.loadLibrary, System.load
  • Read this to learn how to reverse native functions
  • In-memory native code execution via JNI (downloaded shellcode → mmap/mprotect → call):

In Memory Jni Shellcode Execution

Other tricks

content:// protocol



Dynamic Analysis

First of all, you need an environment where you can install the application and all the environment (Burp CA cert, Drozer and Frida mainly). Therefore, a rooted device (emulated or not) is extremely recommended.

Online Dynamic analysis

You can create a free account in: https://appetize.io/. This platform allows you to upload and execute APKs, so it is useful to see how an apk is behaving.

You can even see the logs of your application in the web and connect through adb.

Thanks to the ADB connection you can use Drozer and Frida inside the emulators.

Local Dynamic Analysis

Using an emulator

  • Android Studio (You can create x86 and arm devices, and according to this latest x86 versions support ARM libraries without needing an slow arm emulator).
  • Learn to set it up in this page:

AVD - Android Virtual Device

  • Genymotion (Free version: Personal Edition, you need to create an account. It’s recommend to download the version WITH VirtualBox to avoid potential errors.)
  • Nox (Free, but it doesn’t support Frida or Drozer).

Tip

При створенні нового емулятора на будь-якій платформі пам’ятайте, що чим більший екран, тим повільніше буде працювати емулятор. Тому за можливості обирайте менші екрани.

To install google services (like AppStore) in Genymotion you need to click on the red marked button of the following image:

Also, notice that in the configuration of the Android VM in Genymotion you can select Bridge Network mode (this will be useful if you will be connecting to the Android VM from a different VM with the tools).

Use a physical device

You need to activate the debugging options and it will be cool if you can root it:

  1. Settings.
  2. (FromAndroid 8.0) Select System.
  3. Select About phone.
  4. Press Build number 7 times.
  5. Go back and you will find the Developer options.

Once you have installed the application, the first thing you should do is to try it and investigate what does it do, how does it work and get comfortable with it.
I will suggest to perform this initial dynamic analysis using MobSF dynamic analysis + pidcat, so we will be able to learn how the application works while MobSF captures a lot of interesting data you can review later on.

Magisk/Zygisk quick notes (recommended on Pixel devices)

  • Patch boot.img with the Magisk app and flash via fastboot to get systemless root
  • Enable Zygisk + DenyList for root hiding; consider LSPosed/Shamiko when stronger hiding is required
  • Keep original boot.img to recover from OTA updates; re-patch after each OTA
  • For screen mirroring, use scrcpy on the host

Unintended Data Leakage

Logging

Розробникам слід бути обережними з публікацією debugging information, оскільки це може призвести до витоку чутливих даних. Рекомендується використовувати інструменти pidcat та adb logcat для моніторингу логів застосунку й виявлення та захисту чутливої інформації. Pidcat віддають перевагу за зручність та читабельність.

Warning

Зверніть увагу, що з версій пізніших за Android 4.0 applications are only able to access their own logs. Тому додатки не можуть отримати доступ до логів інших додатків.
У будь-якому випадку, все одно рекомендується not log sensitive information.

Copy/Paste Buffer Caching

Android’s clipboard-based framework забезпечує функціонал копіювання/вставки в додатках, але несе ризик, оскільки other applications можуть access буфер обміну й потенційно розкривати чутливі дані. Важливо disable copy/paste функції для чутливих секцій додатку, наприклад деталей кредитної картки, щоб запобігти витокам даних.

Crash Logs

Якщо додаток crashes і saves logs, ці логи можуть допомогти нападникам, особливо коли додаток неможливо зворотно інженерити. Щоб зменшити ризик, уникайте логування під час падінь, а якщо логи потрібно передавати мережею, забезпечте їх відправку через SSL-канал.

As pentester, try to take a look to these logs.

Analytics Data Sent To 3rd Parties

Applications часто інтегрують сервіси на кшталт Google Adsense, що може ненавмисно leak sensitive data через неправильну імплементацію розробниками. Щоб виявити потенційні витоки даних, рекомендується intercept the application’s traffic і перевірити, чи не надсилається чутлива інформація до third-party services.

SQLite DBs

Більшість додатків використовують internal SQLite databases для збереження інформації. Під час pentest перегляньте databases, імена tables та columns і всі збережені data, оскільки ви можете знайти sensitive information (що буде вразливістю).
Бази даних мають розташовуватись у /data/data/the.package.name/databases, наприклад /data/data/com.mwr.example.sieve/databases

Якщо база даних зберігає конфіденційну інформацію і вона encrypted, але ви можете find пароль всередині додатку, це все одно vulnerability.

Перелічте таблиці за допомогою .tables та ознайомтеся зі схемою таблиці через .schema <table_name>

Drozer (Exploit Activities, Content Providers and Services)

From Drozer Docs: Drozer дозволяє вам assume the role of an Android app та взаємодіяти з іншими додатками. Він може робити anything that an installed application can do, наприклад використовувати Android’s Inter-Process Communication (IPC) механізм та взаємодіяти з операційною системою. .
Drozer — корисний інструмент для exploit exported activities, exported services and Content Providers, як ви дізнаєтесь у наступних розділах.

Exploiting exported Activities

Read this if you want to refresh what is an Android Activity.
Також пам’ятайте, що код activity починається в методі onCreate.

Authorisation bypass

Коли Activity є exported, ви можете викликати її екран з зовнішнього додатку. Отже, якщо activity з sensitive information є exported, ви можете bypass механізми автентифікації для доступу до нього.

Learn how to exploit exported activities with Drozer.

You can also start an exported activity from adb:

  • PackageName is com.example.demo
  • Exported ActivityName is com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity

NOTE: MobSF буде вважати шкідливим використання singleTask/singleInstance як android:launchMode в activity, але через this, очевидно, це небезпечно тільки на старих версіях (API versions < 21).

Tip

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

Витік (leak) конфіденційної інформації

Activities також можуть повертати результати. Якщо вам вдасться знайти експортовану й незахищену activity, яка викликає метод setResult і повертає конфіденційну інформацію, це призводить до витоку (leak) конфіденційної інформації.

Tapjacking

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

Exploiting Content Providers - Accessing and manipulating sensitive information

Прочитайте це, якщо хочете освіжити, що таке Content Provider.
Content providers, по суті, використовуються для share data. Якщо у додатку є доступні content providers, ви можете змогти extract sensitive дані з них. Також варто протестувати можливі SQL injections та Path Traversals, оскільки вони можуть бути вразливими.

Дізнайтеся, як експлуатувати Content Providers за допомогою Drozer.

Exploiting Services

Прочитайте це, якщо хочете освіжити, що таке Service.
Пам’ятайте, що дії Service починаються в методі onStartCommand.

Service, по суті, це те, що може отримувати дані, обробляти їх і повертати (або ні) відповідь. Тому, якщо додаток експортує якісь services, вам слід перевірити код, щоб зрозуміти, що він робить, і протестувати його динамічно, щоб витягти конфіденційну інформацію, обійти заходи автентифікації…
Дізнайтеся, як експлуатувати Services за допомогою Drozer.

Exploiting Broadcast Receivers

Прочитайте це, якщо хочете освіжити, що таке Broadcast Receiver.
Пам’ятайте, що дії Broadcast Receiver починаються в методі onReceive.

Broadcast Receiver очікує певний тип повідомлення. Залежно від того, як receiver обробляє повідомлення, він може бути вразливим.
Дізнайтеся, як експлуатувати Broadcast Receivers за допомогою Drozer.

Ви можете шукати deep links вручну, використовуючи інструменти на кшталт MobSF або скрипти на кшталт this one.
Ви можете open оголошений scheme за допомогою adb або браузера:

adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]

Зауважте, що ви можете опустити ім’я пакета, і мобільний пристрій автоматично викличе додаток, який має відкрити це посилання.

<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>

Код, що буде виконаний

Щоб знайти код, який буде виконано в App, перейдіть до activity, яке викликається deeplink, і знайдіть функцію onNewIntent.

Чутлива інформація

Кожного разу, коли ви знаходите deep link, перевіряйте, що він не отримує чутливі дані (наприклад паролі) через URL-параметри, тому що будь-який інший додаток може видавати себе за deep link і викрасти ці дані!

Параметри в шляху

Ви повинні також перевірити, чи який-небудь deep link не використовує параметр всередині шляху URL, наприклад: https://api.example.com/v1/users/{username} , у такому випадку ви можете примусити path traversal, звернувшись до чогось на кшталт: example://app/users?username=../../unwanted-endpoint%3fparam=value .
Зверніть увагу, що якщо ви знайдете правильні endpoints всередині додатку, ви можете спричинити Open Redirect (якщо частина шляху використовується як domain name), account takeover (якщо ви можете змінити details користувачів без CSRF token і вразливий endpoint використовував правильний метод) та будь-яку іншу vuln. Більше інформації тут.

Більше прикладів

Цікавий bug bounty report про links (/.well-known/assetlinks.json).

Інспекція транспортного рівня та помилки верифікації

  • Certificates are not always inspected properly Android-додатками. Часто такі додатки ігнорують попередження та приймають self-signed certificates або, в деяких випадках, повертаються до використання HTTP connections.
  • Negotiations during the SSL/TLS handshake are sometimes weak, використовуються insecure cipher suites. Ця вразливість робить з’єднання сприйнятливим до man-in-the-middle (MITM) атак, дозволяючи нападникам дешифрувати дані.
  • Витік приватної інформації є ризиком, коли додатки автентифікуються через secure channels, але потім спілкуються через non-secure channels для інших операцій. Такий підхід не захищає чутливі дані, такі як session cookies або details користувачів, від перехоплення зловмисниками.

Certificate Verification

Ми зосередимося на перевірці сертифікатів. Цілісність сертифіката сервера має бути перевірена для підвищення безпеки. Це критично, оскільки insecure TLS configurations та передача чутливих даних через незашифровані канали можуть становити значні ризики. Для детальних кроків щодо перевірки server certificates та усунення вразливостей, цей ресурс надає вичерпні вказівки.

SSL Pinning

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

Traffic Inspection

Щоб інспектувати HTTP traffic, необхідно встановити сертифікат proxy tool (наприклад, Burp). Без встановлення цього сертифіката зашифрований трафік може бути невидимим у проксі. Для керівництва зі встановлення custom CA certificate, натисніть тут.

Додатки, що таргетять API Level 24 and above, вимагають змін у Network Security Config, щоб приймати CA-сертифікат проксі. Цей крок критично важливий для інспекції зашифрованого трафіку. Для інструкцій щодо модифікації Network Security Config, перегляньте цей туторіал.

Якщо використовується Flutter, потрібно дотримуватися інструкцій на цій сторінці. Це тому, що просте додавання сертифіката в сховище не спрацює, оскільки Flutter має власний список дійсних CAs.

Static detection of SSL/TLS pinning

Перед спробами runtime bypasses швидко визначте, де в APK застосовується pinning. Статичне виявлення допомагає спланувати hooks/patches і зосередитись на потрібних кодових шляхах.

Tool: SSLPinDetect

  • Open-source static-analysis utility that decompiles the APK to Smali (via apktool) and scans for curated regex patterns of SSL/TLS pinning implementations.
  • Reports exact file path, line number, and a code snippet for each match.
  • Covers common frameworks and custom code paths: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, and Network Security Config XML pins.

Install

  • Передумови: Python >= 3.8, Java on PATH, apktool
git clone https://github.com/aancw/SSLPinDetect
cd SSLPinDetect
pip install -r requirements.txt

Використання

# Basic
python sslpindetect.py -f app.apk -a apktool.jar

# Verbose (timings + per-match path:line + snippet)
python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v

Приклад правил шаблонів (JSON) Використовуйте або розширюйте signatures для виявлення proprietary/custom pinning styles. Ви можете завантажити власний JSON і виконувати сканування в масштабі.

{
"OkHttp Certificate Pinning": [
"Lcom/squareup/okhttp/CertificatePinner;",
"Lokhttp3/CertificatePinner;",
"setCertificatePinner"
],
"TrustManager Override": [
"Ljavax/net/ssl/X509TrustManager;",
"checkServerTrusted"
]
}

Примітки та поради

  • Швидке сканування великих застосунків за допомогою багатопотоковості та memory-mapped I/O; попередньо скомпільовані regex зменшують накладні витрати/хибні спрацьовування.
  • Колекція шаблонів: https://github.com/aancw/smali-sslpin-patterns
  • Типові цілі виявлення для подальшої перевірки:
  • OkHttp: використання CertificatePinner, setCertificatePinner, посилання на пакети okhttp3/okhttp
  • Custom TrustManagers: javax.net.ssl.X509TrustManager, перевизначення checkServerTrusted
  • Custom SSL contexts: SSLContext.getInstance + SSLContext.init з кастомними менеджерами
  • Declarative pins у res/xml network security config і посилання в manifest
  • Використовуйте знайдені місця для планування Frida hooks, статичних патчів або перегляду конфігурацій перед динамічним тестуванням.

Обхід SSL Pinning

Коли реалізовано SSL Pinning, його обхід стає необхідним для інспекції HTTPS-трафіку. Для цього доступні різні методи:

  • Автоматично змінити apk щоб обійти SSLPinning за допомогою apk-mitm. Найбільша перевага цього варіанту — що не потрібен root для обходу SSL Pinning, але доведеться видалити додаток і перевстановити його, і це не завжди спрацьовує.
  • Ви можете використати Frida (розглянуто нижче) для обходу цього захисту. Ось гайд для використання Burp+Frida+Genymotion: https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/
  • Ви також можете спробувати автоматично обійти SSL Pinning за допомогою objection: objection --gadget com.package.app explore --startup-command "android sslpinning disable"
  • Ви також можете спробувати автоматично обійти SSL Pinning за допомогою MobSF dynamic analysis (пояснюється нижче)
  • Якщо ви все ще вважаєте, що частину трафіку не перехоплюєте, можете спробувати перенаправити трафік у Burp за допомогою iptables. Читайте цей блог: https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62

Пошук поширених веб-вразливостей

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

Frida

Frida — це інструментарій динамічної інструментації для розробників, реверс-інженерів і дослідників безпеки.
Ви можете отримати доступ до запущеного застосунку та hook методів під час виконання, щоб змінювати поведінку, змінювати значення, витягувати значення, виконувати інший код…
Якщо ви хочете pentest Android applications, вам потрібно знати, як використовувати Frida.

Anti-instrumentation & workflow обходу SSL Pinning

Android Anti Instrumentation And Ssl Pinning Bypass

Дамп пам’яті - Fridump

Перевірте, чи зберігає застосунок конфіденційну інформацію в пам’яті, якої не має зберігати, наприклад паролі чи мнемоніки.

Використовуючи Fridump3 ви можете зробити дамп пам’яті застосунку за допомогою:

# With PID
python3 fridump3.py -u <PID>

# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"

Це вивантажить пам’ять у папку ./dump, і там ви можете використати grep, наприклад:

strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"

Чутливі дані в Keystore

В Android Keystore — найкраще місце для зберігання чутливих даних, проте за наявності достатніх привілеїв все ще possible to access it. Оскільки додатки часто зберігають тут sensitive data in clear text, то pentests повинні перевіряти це, оскільки root user або особа з фізичним доступом до пристрою може вкрасти ці дані.

Навіть якщо додаток зберіг дані в Keystore, дані повинні бути зашифровані.

Щоб отримати доступ до даних всередині Keystore, ви можете використати цей Frida script: https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js

frida -U -f com.example.app -l frida-scripts/tracer-cipher.js

Fingerprint/Biometrics Bypass

Використовуючи наведений Frida-скрипт, можливо bypass fingerprint authentication, яке можуть виконувати Android застосунки для захисту певних чутливих областей:

frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>

Фонові зображення

Коли ви переводите додаток у фон, Android зберігає знімок додатка, щоб при поверненні на передній план він почав завантажувати зображення перед самим додатком, тому здається, що додаток завантажився швидше.

Однак, якщо цей знімок містить чутливу інформацію, той, хто має доступ до знімка, може вкрасти цю інформацію (зауважте, що для доступу потрібен root).

The snapshots are usually stored around: /data/system_ce/0/snapshots

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

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

Android Application Analyzer

Цей інструмент може допомогти у керуванні різними інструментами під час динамічного аналізу: https://github.com/NotSoSecure/android_application_analyzer

Intent Injection

Розробники часто створюють проксі-компоненти, такі як activities, services та broadcast receivers, які обробляють ці Intents і передають їх у методи типу startActivity(...) або sendBroadcast(...), що може бути ризиковано.

Небезпека полягає в тому, що атакам дозволяють викликати non-exported app components або отримувати доступ до чутливих content providers, неправильно перенаправивши ці Intents. Помітним прикладом є компонент WebView, який перетворює URL на об’єкти Intent через Intent.parseUri(...) і потім виконує їх, що потенційно призводить до зловмисних Intent ін’єкцій.

Essential Takeaways

  • Intent Injection схоже на проблему Open Redirect у web.
  • Експлойти пов’язані з передачею об’єктів Intent як extras, які можуть бути перенаправлені для виконання небезпечних операцій.
  • Це може відкрити неекспортовані компоненти та content providers для атакуючих.
  • Конвертація URL у Intent у WebView може сприяти небажаним діям.

Android Client Side Injections and others

Мабуть, ви вже знайомі з цим типом вразливостей з Web. Слід бути особливо обережним з такими вразливостями в Android-додатку:

  • SQL Injection: При роботі з динамічними запитами або Content-Providers переконайтеся, що ви використовуєте параметризовані запити.
  • JavaScript Injection (XSS): Перевірте, що підтримка JavaScript та Plugin вимкнена для будь-яких WebViews (вимкнено за замовчуванням). More info here.
  • Local File Inclusion: WebViews повинні мати відключений доступ до файлової системи (увімкнено за замовчуванням) - (webview.getSettings().setAllowFileAccess(false);). More info here.
  • Eternal cookies: У кількох випадках, коли Android-додаток завершує сеанс, cookie не відкликається або може навіть зберігатися на диску
  • Secure Flag in cookies

Automatic Analysis

MobSF

Static analysis

Vulnerability assessment of the application з використанням зручного web-інтерфейсу. Ви також можете виконати динамічний аналіз (але потрібно підготувати середовище).

docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

Notice that MobSF can analyse Android(apk), IOS(ipa) and Windows(apx) applications (Windows applications must be analyzed from a MobSF installed in a Windows host).
Also, if you create a ZIP file with the source code if an Android or an IOS app (go to the root folder of the application, select everything and create a ZIPfile), it will be able to analyse it also.

MobSF also allows you to diff/Compare analysis and to integrate VirusTotal (you will need to set your API key in MobSF/settings.py and enable it: VT_ENABLED = TRUE VT_API_KEY = <Your API key> VT_UPLOAD = TRUE). You can also set VT_UPLOAD to False, then the hash will be upload instead of the file.

Асистований динамічний аналіз з MobSF

MobSF також дуже корисний для dynamic analysis в Android, але в цьому випадку потрібно встановити MobSF та genymotion на ваш хост (VM або Docker не підходять). Note: You need to start first a VM in genymotion and then MobSF.
MobSF dynamic analyser може:

  • Dump application data (URLs, logs, clipboard, screenshots made by you, screenshots made by “Exported Activity Tester”, emails, SQLite databases, XML files, and other created files). Усе це робиться автоматично, окрім скриншотів — їх потрібно робити вручну або натиснути “Exported Activity Tester”, щоб отримати скриншоти всіх експортованих activity.
  • Capture HTTPS traffic
  • Use Frida to obtain runtime information

From android versions > 5, it will automatically start Frida and will set global proxy settings to capture traffic. It will only capture traffic from the tested application.

Frida

By default, it will also use some Frida Scripts to bypass SSL pinning, root detection and debugger detection and to monitor interesting APIs.
MobSF can also invoke exported activities, grab screenshots of them and save them for the report.

To start the dynamic testing press the green bottom: “Start Instrumentation”. Press the “Frida Live Logs” to see the logs generated by the Frida scripts and “Live API Monitor” to see all the invocation to hooked methods, arguments passed and returned values (this will appear after pressing “Start Instrumentation”).
MobSF also allows you to load your own Frida scripts (to send the results of your Friday scripts to MobSF use the function send()). It also has several pre-written scripts you can load (you can add more in MobSF/DynamicAnalyzer/tools/frida_scripts/others/), just select them, press “Load” and press “Start Instrumentation” (you will be able to see the logs of that scripts inside “Frida Live Logs”).

Moreover, you have some Auxiliary Frida functionalities:

  • Enumerate Loaded Classes: It will print all the loaded classes
  • Capture Strings: It will print all the capture strings while using the application (super noisy)
  • Capture String Comparisons: Could be very useful. It will show the 2 strings being compared and if the result was True or False.
  • Enumerate Class Methods: Put the class name (like “java.io.File”) and it will print all the methods of the class.
  • Search Class Pattern: Search classes by pattern
  • Trace Class Methods: Trace a whole class (see inputs and outputs of all methods of th class). Remember that by default MobSF traces several interesting Android Api methods.

Once you have selected the auxiliary module you want to use you need to press “Start Intrumentation” and you will see all the outputs in “Frida Live Logs”.

Shell

Mobsf також надає shell з деякими adb командами, MobSF commands, та поширеними shell commands внизу сторінки динамічного аналізу. Декілька цікавих команд:

help
shell ls
activities
exported_activities
services
receivers

HTTP інструменти

When http traffic is capture you can see an ugly view of the captured traffic on “HTTP(S) Traffic” bottom or a nicer view in “Start HTTPTools” green bottom. From the second option, you can send the captured requests to proxies like Burp or Owasp ZAP.
To do so, power on Burp –> turn off Intercept –> in MobSB HTTPTools select the request –> press “Send to Fuzzer” –> select the proxy address (http://127.0.0.1:8080\).

Once you finish the dynamic analysis with MobSF you can press on “Start Web API Fuzzer” to fuzz http requests an look for vulnerabilities.

Tip

After performing a dynamic analysis with MobSF the proxy settings me be misconfigured and you won’t be able to fix them from the GUI. You can fix the proxy settings by doing:

adb shell settings put global http_proxy :0

Асистований динамічний аналіз з Inspeckage

You can get the tool from Inspeckage.
This tool with use some Hooks to let you know what is happening in the application while you perform a dynamic analysis.

Yaazhini

This is a great tool to perform static analysis with a GUI

Qark

This tool is designed to look for several security related Android application vulnerabilities, either in source code or packaged APKs. The tool is also capable of creating a “Proof-of-Concept” deployable APK and ADB commands, to exploit some of the found vulnerabilities (Exposed activities, intents, tapjacking…). As with Drozer, there is no need to root the test device.

pip3 install --user qark  # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java

ReverseAPK

  • Показує всі витягнуті файли для зручного перегляду
  • Автоматично декомпілює APK файли у формати Java та Smali
  • Аналізує AndroidManifest.xml на наявність типових вразливостей і поведінки
  • Статичний аналіз вихідного коду на типові вразливості і поведінку
  • Інформація про пристрій
  • та інше
reverse-apk relative/path/to/APP.apk

SUPER Android Analyzer

SUPER — це програма командного рядка, яка може використовуватися в Windows, MacOS X та Linux і аналізує .apk файли в пошуку вразливостей. Вона робить це, розпаковуючи APKs і застосовуючи низку правил для виявлення цих вразливостей.

Всі правила зосереджені у файлі rules.json, і кожна компанія або тестер може створити власні правила для аналізу того, що їм потрібно.

Завантажте останні бінарні файли зі сторінки download page

super-analyzer {apk_file}

StaCoAn

StaCoAn — кросплатформовий інструмент, що допомагає розробникам, bugbounty hunters та ethical hackers виконувати static code analysis мобільних додатків.

Ідея полягає в тому, що ви перетягуєте файл мобільного додатка (файл .apk або .ipa) у додаток StaCoAn, і він згенерує для вас візуальний та переносний звіт. Ви можете налаштувати параметри та wordlists, щоб отримати персоналізований досвід.

Завантажити latest release:

./stacoan

AndroBugs

AndroBugs Framework — це система аналізу вразливостей Android, яка допомагає розробникам або hackers знаходити потенційні вразливості в Android-додатках.
Windows releases

python androbugs.py -f [APK file]
androbugs.exe -f [APK file]

Androwarn

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

Виявлення здійснюється шляхом static analysis Dalvik bytecode додатка, представленого у вигляді Smali, із використанням бібліотеки androguard.

Цей інструмент шукає поширені поведінки “поганих” застосунків, такі як: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution…

python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3

MARA Framework

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

Може:

  • Видобувати Java та Smali код за допомогою різних інструментів
  • Аналізувати APK за допомогою: smalisca, ClassyShark, androbugs, androwarn, APKiD
  • Видобувати приватну інформацію з APK за допомогою regexps.
  • Аналізувати Manifest.
  • Аналізувати знайдені домени за допомогою: pyssltest, testssl and whatweb
  • Деобфускувати APK через apk-deguard.com

Koodous

Корисно для виявлення malware: https://koodous.com/

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

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

ProGuard

From Wikipedia: ProGuard — відкритий інструмент командного рядка, який стискає, оптимізує та обфускує Java-код. Він здатний оптимізувати байткод, а також виявляти та видаляти невикористовувані інструкції. ProGuard — вільне програмне забезпечення і поширюється під GNU General Public License, version 2.

ProGuard постачається як частина Android SDK і запускається при збірці застосунку в release-режимі.

DexGuard

Find a step-by-step guide to deobfuscate the apk in https://blog.lexfo.fr/dexguard.html

(From that guide) Last time we checked, the Dexguard mode of operation was:

  • load a resource as an InputStream;
  • feed the result to a class inheriting from FilterInputStream to decrypt it;
  • do some useless obfuscation to waste a few minutes of time from a reverser;
  • feed the decrypted result to a ZipInputStream to get a DEX file;
  • finally load the resulting DEX as a Resource using the loadDex method.

DeGuard

DeGuard reverses the process of obfuscation performed by Android obfuscation tools. This enables numerous security analyses, including code inspection and predicting libraries.

Ви можете завантажити обфускований APK на їхню платформу.

[Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app

This is a LLM tool to find any potential security vulnerabilities in android apps and deobfuscate android app code. Uses Google’s Gemini public API.

Simplify

It is a generic android deobfuscator. Simplify virtually executes an app to understand its behavior and then tries to optimize the code so it behaves identically but is easier for a human to understand. Each optimization type is simple and generic, so it doesn’t matter what the specific type of obfuscation is used.

APKiD

APKiD gives you information about how an APK was made. It identifies many compilers, packers, obfuscators, and other weird stuff. It’s PEiD for Android.

Посібник

Read this tutorial to learn some tricks on how to reverse custom obfuscation

Лабораторії

Androl4b

AndroL4b — віртуальна машина для Android-безпеки на базі ubuntu-mate, яка містить збірку останніх фреймворків, підручників та лабораторних робіт від різних ентузіастів та дослідників для reverse engineering і malware analysis.

Посилання

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks