From 48e817292d98ded45a7bc8bbc890cdb1ce546889 Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 21 Aug 2025 04:17:17 +0000 Subject: [PATCH] Translated ['src/mobile-pentesting/android-app-pentesting/README.md', 's --- src/SUMMARY.md | 1 + .../android-app-pentesting/README.md | 166 +++++++------- ...-instrumentation-and-ssl-pinning-bypass.md | 203 ++++++++++++++++++ 3 files changed, 290 insertions(+), 80 deletions(-) create mode 100644 src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 432bf44fc..e7e49e187 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -326,6 +326,7 @@ - [Android APK Checklist](mobile-pentesting/android-checklist.md) - [Android Applications Pentesting](mobile-pentesting/android-app-pentesting/README.md) - [Accessibility Services Abuse](mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md) + - [Android Anti Instrumentation And Ssl Pinning Bypass](mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md) - [Android Applications Basics](mobile-pentesting/android-app-pentesting/android-applications-basics.md) - [Android Task Hijacking](mobile-pentesting/android-app-pentesting/android-task-hijacking.md) - [ADB Commands](mobile-pentesting/android-app-pentesting/adb-commands.md) diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index 94192247e..5986f6614 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -19,13 +19,13 @@ android-applications-basics.md ## Smali -Іноді цікаво **модифікувати код додатку**, щоб отримати доступ до **прихованої інформації** (можливо, добре обфусцировані паролі або прапори). Тоді може бути цікаво декомпілювати apk, модифікувати код і знову скомпілювати його.\ -[**У цьому посібнику** ви можете **дізнатися, як декомпілювати APK, модифікувати код Smali та знову скомпілювати APK** з новою функціональністю](smali-changes.md). Це може бути дуже корисно як **альтернатива для кількох тестів під час динамічного аналізу**, які будуть представлені. Тому **завжди тримайте в умі цю можливість**. +Іноді цікаво **модифікувати код додатку**, щоб отримати доступ до **прихованої інформації** (можливо, добре обфусцировані паролі або прапори). Тоді може бути цікаво декомпілювати apk, змінити код і знову скомпілювати його.\ +[**У цьому посібнику** ви можете **дізнатися, як декомпілювати APK, модифікувати код Smali та знову скомпілювати APK** з новою функціональністю](smali-changes.md). Це може бути дуже корисно як **альтернатива для кількох тестів під час динамічного аналізу**, які будуть представлені. Тому **завжди майте на увазі цю можливість**. ## Інші цікаві трюки - [Спуфінг вашого місцезнаходження в Play Store](spoofing-your-location-in-play-store.md) -- [Shizuku Privileged API (ADB-основний доступ без root)](shizuku-privileged-api.md) +- [Shizuku Privileged API (привілейований доступ без root на основі ADB)](shizuku-privileged-api.md) - [Експлуатація ненадійних механізмів оновлення в додатку](insecure-in-app-update-rce.md) - [Зловживання службами доступності (Android RAT)](accessibility-services-abuse.md) - **Завантажити APK**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd) @@ -79,17 +79,17 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed - **Дебаговані програми**: Програми, які встановлені як дебаговані (`debuggable="true"`) у файлі _Manifest.xml_, становлять ризик, оскільки дозволяють з'єднання, які можуть призвести до експлуатації. Для подальшого розуміння того, як експлуатувати дебаговані програми, зверніться до посібника з пошуку та експлуатації дебагованих програм на пристрої. - **Налаштування резервного копіювання**: Атрибут `android:allowBackup="false"` повинен бути явно встановлений для програм, що працюють з чутливою інформацією, щоб запобігти несанкціонованим резервним копіям даних через adb, особливо коли увімкнено налагодження USB. -- **Безпека мережі**: Налаштування безпеки мережі (`android:networkSecurityConfig="@xml/network_security_config"`) у _res/xml/_ можуть вказувати деталі безпеки, такі як пін-коди сертифікатів та налаштування HTTP-трафіку. Прикладом є дозволення HTTP-трафіку для певних доменів. +- **Безпека мережі**: Налаштування безпеки мережі (`android:networkSecurityConfig="@xml/network_security_config"`) у _res/xml/_ можуть вказувати деталі безпеки, такі як пін-коди сертифікатів та налаштування HTTP-трафіку. Наприклад, дозволяючи HTTP-трафік для певних доменів. - **Експортовані активності та сервіси**: Виявлення експортованих активностей та сервісів у маніфесті може підкреслити компоненти, які можуть бути зловживані. Подальший аналіз під час динамічного тестування може виявити, як експлуатувати ці компоненти. - **Постачальники контенту та FileProviders**: Відкриті постачальники контенту можуть дозволити несанкціонований доступ або модифікацію даних. Конфігурацію FileProviders також слід ретельно перевірити. - **Отримувачі трансляцій та URL-схеми**: Ці компоненти можуть бути використані для експлуатації, з особливою увагою до того, як управляються URL-схеми для вразливостей введення. - **Версії SDK**: Атрибути `minSdkVersion`, `targetSDKVersion` та `maxSdkVersion` вказують на підтримувані версії Android, підкреслюючи важливість непідтримки застарілих, вразливих версій Android з міркувань безпеки. -З файлу **strings.xml** можна виявити чутливу інформацію, таку як API ключі, власні схеми та інші нотатки розробників, що підкреслює необхідність ретельного перегляду цих ресурсів. +З файлу **strings.xml** можна виявити чутливу інформацію, таку як API-ключі, власні схеми та інші нотатки розробників, що підкреслює необхідність ретельного перегляду цих ресурсів. ### Tapjacking -**Tapjacking** - це атака, коли **зловмисна** **програма** запускається і **розташовується поверх програми жертви**. Як тільки вона видимо закриває програму жертви, її інтерфейс користувача спроектований таким чином, щоб обманути користувача взаємодіяти з нею, в той час як вона передає взаємодію до програми жертви.\ +**Tapjacking** - це атака, коли **зловмисна** **програма** запускається і **розташовується поверх програми жертви**. Як тільки вона видимо закриває програму жертви, її інтерфейс користувача спроектований так, щоб обманути користувача взаємодіяти з нею, в той час як вона передає взаємодію до програми жертви.\ Фактично, це **осліплює користувача, не даючи йому знати, що він насправді виконує дії в програмі жертви**. Знайдіть більше інформації в: @@ -100,7 +100,7 @@ tapjacking.md ### Викрадення завдань -**Активність** з **`launchMode`**, встановленим на **`singleTask`** без визначеного `taskAffinity`, вразлива до викрадення завдань. Це означає, що **програму** можна встановити, і якщо її запустити перед реальною програмою, вона може **викрасти завдання реальної програми** (так що користувач буде взаємодіяти з **зловмисною програмою, вважаючи, що використовує реальну**). +**Активність** з **`launchMode`**, встановленим на **`singleTask` без визначеного `taskAffinity`**, вразлива до викрадення завдань. Це означає, що **програму** можна встановити, і якщо її запустити перед реальною програмою, вона може **викрасти завдання реальної програми** (так що користувач буде взаємодіяти з **зловмисною програмою, вважаючи, що використовує реальну**). Більше інформації в: @@ -112,12 +112,12 @@ android-task-hijacking.md **Внутрішнє зберігання** -В Android файли, **збережені** у **внутрішньому** зберіганні, **призначені** для **доступу** виключно програмою, яка їх **створила**. Ця міра безпеки **забезпечується** операційною системою Android і зазвичай є адекватною для потреб безпеки більшості програм. Однак розробники іноді використовують режими, такі як `MODE_WORLD_READABLE` і `MODE_WORLD_WRITABLE`, щоб **дозволити** файлам **ділитися** між різними програмами. Проте ці режими **не обмежують доступ** до цих файлів з інших програм, включаючи потенційно зловмисні. +У Android файли, **збережені** у **внутрішньому** зберіганні, **призначені** для **доступу** виключно програмою, яка їх **створила**. Ця міра безпеки **забезпечується** операційною системою Android і зазвичай є адекватною для потреб безпеки більшості програм. Однак розробники іноді використовують режими, такі як `MODE_WORLD_READABLE` і `MODE_WORLD_WRITABLE`, щоб **дозволити** файлам **ділитися** між різними програмами. Проте ці режими **не обмежують доступ** до цих файлів з інших програм, включаючи потенційно зловмисні. 1. **Статичний аналіз:** - **Переконайтеся**, що використання `MODE_WORLD_READABLE` і `MODE_WORLD_WRITABLE` **ретельно перевіряється**. Ці режими **можуть потенційно відкрити** файли для **небажаного або несанкціонованого доступу**. 2. **Динамічний аналіз:** -- **Перевірте** **дозволи**, встановлені на файли, створені програмою. Зокрема, **перевірте**, чи є файли **встановленими на читання або запис для всіх**. Це може становити значний ризик для безпеки, оскільки це дозволить **будь-якій програмі**, встановленій на пристрої, незалежно від її походження чи намірів, **читати або змінювати** ці файли. +- **Перевірте** **дозволи**, встановлені на файлах, створених програмою. Зокрема, **перевірте**, чи є файли, **встановлені на читання або запис для всіх**. Це може становити значний ризик для безпеки, оскільки це дозволить **будь-якій програмі**, встановленій на пристрої, незалежно від її походження чи намірів, **читати або змінювати** ці файли. **Зовнішнє зберігання** @@ -129,7 +129,7 @@ android-task-hijacking.md - З огляду на легкість доступу, рекомендується **не зберігати чутливу інформацію** на зовнішньому зберіганні. - Зовнішнє зберігання може бути видалено або доступно будь-якою програмою, що робить його менш безпечним. 3. **Обробка даних з зовнішнього зберігання**: -- Завжди **виконуйте валідацію введення** на даних, отриманих з зовнішнього зберігання. Це важливо, оскільки дані походять з ненадійного джерела. +- Завжди **виконуйте валідацію введення** даних, отриманих з зовнішнього зберігання. Це важливо, оскільки дані походять з ненадійного джерела. - Зберігання виконуваних файлів або класів на зовнішньому зберіганні для динамічного завантаження категорично не рекомендується. - Якщо ваша програма повинна отримувати виконувані файли з зовнішнього зберігання, переконайтеся, що ці файли **підписані та криптографічно перевірені** перед їх динамічним завантаженням. Цей крок є важливим для підтримки цілісності безпеки вашої програми. @@ -152,13 +152,13 @@ android-task-hijacking.md SSLSocketFactory sf = new cc(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); ``` -Добрий спосіб протестувати це - спробувати захопити трафік, використовуючи проксі, як Burp, без авторизації CA Burp на пристрої. Також ви можете згенерувати з Burp сертифікат для іншого імені хоста та використовувати його. +Добрий спосіб протестувати це - спробувати захопити трафік, використовуючи проксі, як Burp, без авторизації CA Burp на пристрої. Також ви можете згенерувати з Burp сертифікат для іншого імені хоста і використовувати його. ### Ламана криптографія **Слабкі процеси управління ключами** -Деякі розробники зберігають чутливі дані у локальному сховищі та шифрують їх ключем, закодованим у коді. Це не слід робити, оскільки деяке реверсування може дозволити зловмисникам витягти конфіденційну інформацію. +Деякі розробники зберігають чутливі дані у локальному сховищі та шифрують їх за допомогою ключа, закодованого в коді або передбачуваного. Це не слід робити, оскільки деяке реверсування може дозволити зловмисникам витягти конфіденційну інформацію. **Використання ненадійних та/або застарілих алгоритмів** @@ -167,9 +167,9 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); ### Інші перевірки - Рекомендується **обфускувати APK**, щоб ускладнити реверс-інженерні роботи для зловмисників. -- Якщо додаток чутливий (як банківські додатки), він повинен виконувати **власні перевірки, щоб дізнатися, чи пристрій зrootований**, і діяти відповідно. -- Якщо додаток чутливий (як банківські додатки), він повинен перевіряти, чи використовується **емулятор**. -- Якщо додаток чутливий (як банківські додатки), він повинен **перевіряти свою цілісність перед виконанням**, щоб перевірити, чи був він змінений. +- Якщо додаток є чутливим (як банківські додатки), він повинен виконувати **власні перевірки, щоб дізнатися, чи пристрій зrootований**, і діяти відповідно. +- Якщо додаток є чутливим (як банківські додатки), він повинен перевіряти, чи використовується **емулятор**. +- Якщо додаток є чутливим (як банківські додатки), він повинен **перевіряти свою цілісність перед виконанням**, щоб перевірити, чи був він змінений. - Використовуйте [**APKiD**](https://github.com/rednaga/APKiD), щоб перевірити, який компілятор/упаковщик/обфускатор був використаний для створення APK ### React Native Application @@ -190,17 +190,17 @@ react-native-application.md ### Superpacked Applications -Згідно з цим [**блогом**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked - це алгоритм Meta, який стискає вміст програми в один файл. Блог говорить про можливість створення програми, яка розпаковує такі програми... і швидший спосіб, який передбачає **виконання програми та збір розпакованих файлів з файлової системи.** +Згідно з цим [**блогом**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), superpacked - це алгоритм Meta, який стискає вміст програми в один файл. Блог говорить про можливість створення програми, яка розпаковує такі програми... і швидший спосіб, який передбачає **виконання програми та збір розпакованих файлів з файлової системи.** ### Автоматизований статичний аналіз коду -Інструмент [**mariana-trench**](https://github.com/facebook/mariana-trench) здатний знаходити **вразливості** шляхом **сканування** **коду** програми. Цей інструмент містить ряд **відомих джерел** (які вказують інструменту **місця**, де **вхід** **контролюється користувачем**), **синків** (які вказують інструменту **небезпечні** **місця**, де шкідливий вхід користувача може завдати шкоди) та **правил**. Ці правила вказують на **комбінацію** **джерел-синків**, яка вказує на вразливість. +Інструмент [**mariana-trench**](https://github.com/facebook/mariana-trench) здатний знаходити **вразливості** шляхом **сканування** **коду** програми. Цей інструмент містить ряд **відомих джерел** (які вказують інструменту **місця**, де **вхід** **контролюється користувачем), **синків** (які вказують інструменту **небезпечні** **місця**, де шкідливий вхід користувача може завдати шкоди) та **правил**. Ці правила вказують на **комбінацію** **джерел-синків**, яка вказує на вразливість. З цими знаннями **mariana-trench перегляне код і знайде можливі вразливості в ньому**. ### Витік секретів -Додаток може містити секрети (API ключі, паролі, приховані URL, піддомени...) всередині нього, які ви можете виявити. Ви можете використовувати інструмент, такий як [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) +Додаток може містити секрети (API ключі, паролі, приховані URL, піддомени...) всередині, які ви можете виявити. Ви можете використовувати інструмент, такий як [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) ### Обхід біометричної аутентифікації @@ -227,7 +227,7 @@ content-protocol.md ## Динамічний аналіз -> Перш за все, вам потрібне середовище, де ви можете встановити додаток і все середовище (сертифікат CA Burp, Drozer і Frida в основному). Тому дуже рекомендується використовувати пристрій з root-доступом (емулятор або ні). +> По-перше, вам потрібне середовище, де ви можете встановити додаток і все середовище (сертифікат CA Burp, Drozer і Frida в основному). Тому дуже рекомендується використовувати пристрій з root-доступом (емулятор або ні). ### Онлайн динамічний аналіз @@ -243,7 +243,7 @@ content-protocol.md #### Використання емулятора -- [**Android Studio**](https://developer.android.com/studio) (Ви можете створити **x86** та **arm** пристрої, і відповідно до [**цього**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**останні x86** версії **підтримують ARM бібліотеки** без необхідності повільного емулятора arm). +- [**Android Studio**](https://developer.android.com/studio) (Ви можете створювати **x86** та **arm** пристрої, і відповідно до [**цього**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**останні версії x86** підтримують ARM бібліотеки без необхідності в повільному емуляторі arm). - Дізнайтеся, як налаштувати його на цій сторінці: {{#ref}} @@ -272,26 +272,26 @@ avd-android-virtual-device.md 4. Натисніть **Номер збірки** 7 разів. 5. Поверніться назад, і ви знайдете **Опції розробника**. -> Після того, як ви встановили додаток, перше, що вам слід зробити, це спробувати його та дослідити, що він робить, як він працює і звикнути до нього.\ -> Я рекомендую **виконати цей початковий динамічний аналіз, використовуючи динамічний аналіз MobSF + pidcat**, щоб ми могли **дізнатися, як працює додаток**, поки MobSF **збирає** багато **цікавих** **даних**, які ви зможете переглянути пізніше. +> Після встановлення програми перше, що ви повинні зробити, це спробувати її та дослідити, що вона робить, як вона працює і звикнути до неї.\ +> Я рекомендую **виконати цей початковий динамічний аналіз, використовуючи динамічний аналіз MobSF + pidcat**, щоб ми могли **вивчити, як працює програма**, поки MobSF **збирає** багато **цікавих** **даних**, які ви зможете переглянути пізніше. ### Ненавмисний витік даних -**Логування** +**Журналювання** -Розробники повинні бути обережними, щоб не публічно розкривати **інформацію для налагодження**, оскільки це може призвести до витоку чутливих даних. Рекомендується використовувати інструменти [**pidcat**](https://github.com/JakeWharton/pidcat) та `adb logcat` для моніторингу журналів додатка, щоб виявити та захистити чутливу інформацію. **Pidcat** віддається перевага за його простоту використання та читабельність. +Розробники повинні бути обережними, щоб не оприлюднювати **інформацію для налагодження**, оскільки це може призвести до витоку чутливих даних. Рекомендується використовувати інструменти [**pidcat**](https://github.com/JakeWharton/pidcat) та `adb logcat` для моніторингу журналів програми, щоб виявити та захистити чутливу інформацію. **Pidcat** віддається перевага за його простоту використання та читабельність. > [!WARNING] -> Зверніть увагу, що з **пізніми версіями Android 4.0**, **додатки можуть отримувати доступ лише до своїх власних журналів**. Тому додатки не можуть отримувати доступ до журналів інших додатків.\ +> Зверніть увагу, що з **пізніших версій Android 4.0**, **додатки можуть отримувати доступ лише до своїх власних журналів**. Тому додатки не можуть отримувати доступ до журналів інших додатків.\ > Тим не менш, все ще рекомендується **не записувати чутливу інформацію**. **Кешування буфера копіювання/вставки** -Фреймворк Android на основі **буфера обміну** дозволяє функціональність копіювання-вставки в додатках, але несе ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно розкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих розділів програми, таких як дані кредитних карток, щоб запобігти витоку даних. +Фреймворк **на основі буфера обміну** Android дозволяє функціональність копіювання-вставки в додатках, але несе ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно розкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих розділів програми, таких як дані кредитних карток, щоб запобігти витоку даних. **Журнали аварій** -Якщо додаток **виникає аварія** і **зберігає журнали**, ці журнали можуть допомогти зловмисникам, особливо коли додаток не може бути реверсовано. Щоб зменшити цей ризик, уникайте ведення журналів при аваріях, а якщо журнали повинні передаватися через мережу, переконайтеся, що вони надсилаються через SSL-канал для безпеки. +Якщо додаток **зависає** і **зберігає журнали**, ці журнали можуть допомогти зловмисникам, особливо коли додаток не може бути реверсовано. Щоб зменшити цей ризик, уникайте ведення журналів при аваріях, а якщо журнали повинні передаватися через мережу, переконайтеся, що вони надсилаються через SSL-канал для безпеки. Як пентестер, **слідкуйте за цими журналами**. @@ -299,14 +299,14 @@ avd-android-virtual-device.md Додатки часто інтегрують сервіси, такі як Google Adsense, які можуть ненавмисно **викривати чутливі дані** через неправильну реалізацію розробниками. Щоб виявити потенційні витоки даних, рекомендується **перехопити трафік програми** та перевірити, чи надсилається якась чутлива інформація третім особам. -### SQLite БД +### SQLite DBs -Більшість додатків використовуватимуть **внутрішні SQLite бази даних** для збереження інформації. Під час пентесту зверніть увагу на **бази даних**, які створені, назви **таблиць** та **стовпців** і всі **дані**, що зберігаються, оскільки ви можете знайти **чутливу інформацію** (що буде вразливістю).\ +Більшість додатків використовуватимуть **внутрішні SQLite бази даних** для збереження інформації. Під час пентесту зверніть увагу на **бази даних**, що створюються, назви **таблиць** та **стовпців** і всі **дані**, що зберігаються, оскільки ви можете знайти **чутливу інформацію** (що буде вразливістю).\ Бази даних повинні розташовуватися в `/data/data/the.package.name/databases`, як `/data/data/com.mwr.example.sieve/databases` Якщо база даних зберігає конфіденційну інформацію і **зашифрована**, але ви можете **знайти** **пароль** всередині програми, це все ще **вразливість**. -Перерахуйте таблиці, використовуючи `.tables`, і перераховуйте стовпці таблиць, виконуючи `.schema ` +Перелічте таблиці, використовуючи `.tables`, і перелічте стовпці таблиць, виконавши `.schema ` ### Drozer (Експлуатація активностей, постачальників контенту та сервісів) @@ -331,7 +331,7 @@ Drozer є корисним інструментом для **експлуата ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` -**NOTE**: MobSF виявить використання _**singleTask/singleInstance**_ як `android:launchMode` в активності як шкідливе, але через [це](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), очевидно, що це небезпечно лише на старих версіях (версії API < 21). +**NOTE**: MobSF виявить використання _**singleTask/singleInstance**_ як `android:launchMode` в активності як шкідливе, але через [це](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), очевидно, це небезпечно лише на старих версіях (версії API < 21). > [!TIP] > Зверніть увагу, що обхід авторизації не завжди є вразливістю, це залежить від того, як працює обхід і яка інформація піддається розкриттю. @@ -342,32 +342,32 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity #### Tapjacking -Якщо tapjacking не запобігається, ви можете зловживати експортованою активністю, щоб змусити **користувача виконувати неочікувані дії**. Для отримання додаткової інформації про [**що таке Tapjacking, перейдіть за посиланням**](#tapjacking). +Якщо tapjacking не запобігається, ви можете зловживати експортованою активністю, щоб змусити **користувача виконувати несподівані дії**. Для отримання додаткової інформації про [**що таке Tapjacking, перейдіть за посиланням**](#tapjacking). -### Експлуатація постачальників контенту - доступ до чутливої інформації та її маніпуляція +### Використання Content Providers - Доступ до чутливої інформації та її маніпуляція -[**Прочитайте це, якщо хочете освіжити знання про постачальника контенту.**](android-applications-basics.md#content-provider)\ -Постачальники контенту в основному використовуються для **обміну даними**. Якщо у програми є доступні постачальники контенту, ви можете **витягти чутливі** дані з них. Також цікаво протестувати можливі **SQL-ін'єкції** та **перетворення шляхів**, оскільки вони можуть бути вразливими. +[**Прочитайте це, якщо хочете освіжити знання про Content Provider.**](android-applications-basics.md#content-provider)\ +Content providers в основному використовуються для **обміну даними**. Якщо у програми є доступні content providers, ви можете **витягти чутливі** дані з них. Також цікаво протестувати можливі **SQL-ін'єкції** та **Path Traversals**, оскільки вони можуть бути вразливими. -[**Дізнайтеся, як експлуатувати постачальників контенту за допомогою Drozer.**](drozer-tutorial/index.html#content-providers) +[**Дізнайтеся, як експлуатувати Content Providers за допомогою Drozer.**](drozer-tutorial/index.html#content-providers) -### **Експлуатація сервісів** +### **Використання Services** -[**Прочитайте це, якщо хочете освіжити знання про сервіс.**](android-applications-basics.md#services)\ -Пам'ятайте, що дії сервісу починаються в методі `onStartCommand`. +[**Прочитайте це, якщо хочете освіжити знання про Service.**](android-applications-basics.md#services)\ +Пам'ятайте, що дії Service починаються в методі `onStartCommand`. Сервіс в основному є чимось, що **може отримувати дані**, **обробляти** їх і **повертати** (або не повертати) відповідь. Тоді, якщо програма експортує деякі сервіси, вам слід **перевірити** **код**, щоб зрозуміти, що він робить, і **тестувати** його **динамічно** для витягування конфіденційної інформації, обходу заходів аутентифікації...\ -[**Дізнайтеся, як експлуатувати сервіси за допомогою Drozer.**](drozer-tutorial/index.html#services) +[**Дізнайтеся, як експлуатувати Services за допомогою Drozer.**](drozer-tutorial/index.html#services) -### **Експлуатація приймачів трансляцій** +### **Використання Broadcast Receivers** -[**Прочитайте це, якщо хочете освіжити знання про приймач трансляцій.**](android-applications-basics.md#broadcast-receivers)\ -Пам'ятайте, що дії приймача трансляцій починаються в методі `onReceive`. +[**Прочитайте це, якщо хочете освіжити знання про Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\ +Пам'ятайте, що дії Broadcast Receiver починаються в методі `onReceive`. -Приймач трансляцій буде чекати на певний тип повідомлення. В залежності від того, як приймач обробляє повідомлення, він може бути вразливим.\ -[**Дізнайтеся, як експлуатувати приймачі трансляцій за допомогою Drozer.**](#exploiting-broadcast-receivers) +Broadcast receiver буде чекати на певний тип повідомлення. В залежності від того, як приймач обробляє повідомлення, він може бути вразливим.\ +[**Дізнайтеся, як експлуатувати Broadcast Receivers за допомогою Drozer.**](#exploiting-broadcast-receivers) -### **Експлуатація схем / глибоких посилань** +### **Використання Schemes / Deep links** Ви можете шукати глибокі посилання вручну, використовуючи інструменти, такі як MobSF, або скрипти, як [цей](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\ Ви можете **відкрити** оголошену **схему** за допомогою **adb** або **браузера**: @@ -381,26 +381,26 @@ _Зверніть увагу, що ви можете **пропустити ім with alternative ``` -**Код, що виконується** +**Виконаний код** -Щоб знайти **код, який буде виконуватись в додатку**, перейдіть до активності, викликаної глибоким посиланням, і знайдіть функцію **`onNewIntent`**. +Щоб знайти **код, який буде виконаний в додатку**, перейдіть до активності, викликаної глибоким посиланням, і знайдіть функцію **`onNewIntent`**. ![](<../../images/image (436) (1) (1) (1).png>) **Чутлива інформація** -Кожного разу, коли ви знаходите глибоке посилання, перевірте, що **воно не отримує чутливі дані (як-от паролі) через параметри URL**, оскільки будь-який інший додаток може **видавати себе за глибоке посилання і вкрасти ці дані!** +Кожного разу, коли ви знаходите глибоке посилання, перевірте, що **воно не отримує чутливі дані (наприклад, паролі) через параметри URL**, оскільки будь-який інший додаток може **видавати себе за глибоке посилання і вкрасти ці дані!** **Параметри в шляху** -Ви **також повинні перевірити, чи використовує будь-яке глибоке посилання параметр всередині шляху** URL, наприклад: `https://api.example.com/v1/users/{username}`, у такому випадку ви можете примусити перехід по шляху, отримуючи доступ до чогось на кшталт: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\ -Зверніть увагу, що якщо ви знайдете правильні кінцеві точки всередині додатку, ви можете викликати **Open Redirect** (якщо частина шляху використовується як доменне ім'я), **захоплення облікового запису** (якщо ви можете змінити деталі користувачів без CSRF токена, а вразлива кінцева точка використовує правильний метод) та будь-яку іншу вразливість. Більше [інформації про це тут](http://dphoeniixx.com/2020/12/13-2/). +Ви **також повинні перевірити, чи використовує будь-яке глибоке посилання параметр всередині шляху** URL, наприклад: `https://api.example.com/v1/users/{username}`, у цьому випадку ви можете примусити перехід по шляху, отримуючи доступ до чогось на кшталт: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\ +Зверніть увагу, що якщо ви знайдете правильні кінцеві точки всередині додатку, ви можете викликати **Open Redirect** (якщо частина шляху використовується як ім'я домену), **захоплення облікового запису** (якщо ви можете змінити деталі користувачів без CSRF токена, а вразлива кінцева точка використовувала правильний метод) та будь-яку іншу вразливість. Більше [інформації про це тут](http://dphoeniixx.com/2020/12/13-2/). **Більше прикладів** -Цей [цікавий звіт про баг-баунті](https://hackerone.com/reports/855618) про посилання (_/.well-known/assetlinks.json_). +Цікава [відповідь на баг-баунті](https://hackerone.com/reports/855618) про посилання (_/.well-known/assetlinks.json_). -### Перевірка та верифікація транспортного рівня +### Перевірка та верифікація транспортного шару - **Сертифікати не завжди належним чином перевіряються** Android-додатками. Це звичайна практика для цих додатків ігнорувати попередження та приймати самопідписані сертифікати або, в деяких випадках, повертатися до використання HTTP-з'єднань. - **Переговори під час SSL/TLS рукопожаття іноді є слабкими**, використовуючи небезпечні шифри. Ця вразливість робить з'єднання вразливим до атак типу man-in-the-middle (MITM), що дозволяє зловмисникам розшифровувати дані. @@ -412,21 +412,21 @@ _Зверніть увагу, що ви можете **пропустити ім #### SSL Pinning -SSL Pinning - це захід безпеки, при якому додаток перевіряє сертифікат сервера проти відомої копії, збереженої в самому додатку. Цей метод є важливим для запобігання атакам MITM. Рекомендується впроваджувати SSL Pinning для додатків, що обробляють чутливу інформацію. +SSL Pinning - це захід безпеки, при якому додаток перевіряє сертифікат сервера на відповідність відомій копії, збереженій у самому додатку. Цей метод є важливим для запобігання атакам MITM. Рекомендується впроваджувати SSL Pinning для додатків, які обробляють чутливу інформацію. #### Інспекція трафіку Щоб перевірити HTTP-трафік, необхідно **встановити сертифікат проксі-інструменту** (наприклад, Burp). Без встановлення цього сертифіката зашифрований трафік може бути невидимим через проксі. Для посібника з установки власного сертифіката CA, [**натисніть тут**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). -Додатки, що націлені на **API Level 24 і вище**, потребують модифікацій конфігурації безпеки мережі, щоб приймати сертифікат CA проксі. Цей крок є критично важливим для перевірки зашифрованого трафіку. Для інструкцій щодо модифікації конфігурації безпеки мережі, [**зверніться до цього посібника**](make-apk-accept-ca-certificate.md). +Додатки, які націлені на **API Level 24 і вище**, вимагають модифікацій конфігурації безпеки мережі, щоб приймати сертифікат CA проксі. Цей крок є критично важливим для перевірки зашифрованого трафіку. Для інструкцій щодо модифікації конфігурації безпеки мережі, [**зверніться до цього посібника**](make-apk-accept-ca-certificate.md). -Якщо використовується **Flutter**, вам потрібно дотримуватись інструкцій на [**цій сторінці**](flutter.md). Це пов'язано з тим, що просто додавання сертифіката в сховище не спрацює, оскільки Flutter має свій власний список дійсних CA. +Якщо використовується **Flutter**, вам потрібно дотримуватися інструкцій на [**цій сторінці**](flutter.md). Це пов'язано з тим, що просто додавання сертифіката в сховище не спрацює, оскільки Flutter має свій власний список дійсних CA. #### Обхід SSL Pinning Коли впроваджено SSL Pinning, обхід його стає необхідним для перевірки HTTPS-трафіку. Для цього доступні різні методи: -- Автоматично **модифікуйте** **apk**, щоб **обійти** SSLPinning за допомогою [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Найкраща перевага цього варіанту полягає в тому, що вам не потрібно мати root для обходу SSL Pinning, але вам потрібно буде видалити додаток і перевстановити новий, і це не завжди спрацює. +- Автоматично **модифікуйте** **apk**, щоб **обійти** SSLPinning за допомогою [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Найбільша перевага цього варіанту полягає в тому, що вам не потрібно мати root для обходу SSL Pinning, але вам потрібно буде видалити додаток і перевстановити новий, і це не завжди спрацює. - Ви можете використовувати **Frida** (обговорюється нижче), щоб обійти цю захист. Ось посібник з використання Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) - Ви також можете спробувати **автоматично обійти SSL Pinning** за допомогою [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` - Ви також можете спробувати **автоматично обійти SSL Pinning** за допомогою **MobSF динамічного аналізу** (пояснено нижче) @@ -434,13 +434,13 @@ SSL Pinning - це захід безпеки, при якому додаток #### Пошук загальних веб-вразливостей -Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але широко висвітлюється в інших джерелах. +Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але вона широко висвітлюється в інших джерелах. ### Frida -[Frida](https://www.frida.re) - це набір інструментів для динамічної інструментації для розробників, реверс-інженерів та дослідників безпеки.\ +[Frida](https://www.frida.re) - це набір інструментів динамічної інструментації для розробників, реверс-інженерів та дослідників безпеки.\ **Ви можете отримати доступ до працюючого додатку та підключати методи в реальному часі, щоб змінити поведінку, змінити значення, витягти значення, виконати різний код...**\ -Якщо ви хочете проводити тестування безпеки Android-додатків, вам потрібно знати, як використовувати Frida. +Якщо ви хочете провести тестування безпеки Android-додатків, вам потрібно знати, як використовувати Frida. - Дізнайтеся, як використовувати Frida: [**Посібник з Frida**](frida-tutorial/index.html) - Деякі "GUI" для дій з Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) @@ -448,6 +448,12 @@ SSL Pinning - це захід безпеки, при якому додаток - Ви можете знайти деякі чудові скрипти Frida тут: [**https://codeshare.frida.re/**](https://codeshare.frida.re) - Спробуйте обійти механізми анти-дебагінгу / анти-Frida, завантажуючи Frida, як вказано в [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (інструмент [linjector](https://github.com/erfur/linjector-rs)) +#### Робочий процес обходу анти-інструментації та SSL pinning + +{{#ref}} +android-anti-instrumentation-and-ssl-pinning-bypass.md +{{#endref}} + ### **Скидання пам'яті - Fridump** Перевірте, чи зберігає додаток чутливу інформацію в пам'яті, яку не повинен зберігати, наприклад, паролі або мнемоніки. @@ -461,13 +467,13 @@ python3 fridump3.py -u frida-ps -Uai python3 fridump3.py -u "" ``` -Це скине пам'ять у папку ./dump, і там ви зможете використовувати grep з чимось на кшталт: +Це скине пам'ять у папку ./dump, і там ви можете використовувати grep з чимось на кшталт: ```bash 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 є найкращим місцем для зберігання чутливих даних, однак, з достатніми привілеями все ще **можливо отримати доступ** до нього. Оскільки додатки, як правило, зберігають тут **чутливі дані у відкритому тексті**, пентести повинні перевіряти це як користувач root або хтось з фізичним доступом до пристрою може бути здатний вкрасти ці дані. +У Android Keystore є найкращим місцем для зберігання чутливих даних, однак, з достатніми привілеями все ще **можливо отримати доступ** до нього. Оскільки програми, як правило, зберігають тут **чутливі дані у відкритому тексті**, пентести повинні перевіряти це як користувач root або хтось з фізичним доступом до пристрою може бути здатний вкрасти ці дані. Навіть якщо додаток зберігав дані в keystore, дані повинні бути зашифровані. @@ -483,13 +489,13 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f ` `VT_UPLOAD = TRUE`). Ви також можете встановити `VT_UPLOAD` на `False`, тоді **хеш** буде **завантажений** замість файлу. +MobSF також дозволяє вам **diff/Compare** аналіз і інтегрувати **VirusTotal** (вам потрібно буде встановити свій API ключ у _MobSF/settings.py_ і активувати його: `VT_ENABLED = TRUE` `VT_API_KEY = <Ваш API ключ>` `VT_UPLOAD = TRUE`). Ви також можете встановити `VT_UPLOAD` на `False`, тоді **hash** буде **завантажений** замість файлу. ### Допоміжний динамічний аналіз з MobSF -**MobSF** також може бути дуже корисним для **динамічного аналізу** в **Android**, але в цьому випадку вам потрібно буде встановити MobSF і **genymotion** на вашому хості (VM або Docker не працюватимуть). _Примітка: Спочатку потрібно **запустити VM в genymotion**, а **потім MobSF.**_\ +**MobSF** також може бути дуже корисним для **динамічного аналізу** в **Android**, але в цьому випадку вам потрібно буде встановити MobSF і **genymotion** на вашому хості (VM або Docker не працюватимуть). _Примітка: Вам потрібно **спочатку запустити VM в genymotion** і **потім MobSF.**_\ **Динамічний аналізатор MobSF** може: -- **Вивантажити дані програми** (URL-адреси, журнали, буфер обміну, скріншоти, зроблені вами, скріншоти, зроблені "**Exported Activity Tester**", електронні листи, бази даних SQLite, XML файли та інші створені файли). Усе це виконується автоматично, за винятком скріншотів, вам потрібно натиснути, коли ви хочете зробити скріншот, або натиснути "**Exported Activity Tester**", щоб отримати скріншоти всіх експортованих активностей. +- **Витягувати дані програми** (URL-адреси, журнали, буфер обміну, скріншоти, зроблені вами, скріншоти, зроблені "**Exported Activity Tester**", електронні листи, бази даних SQLite, XML файли та інші створені файли). Усе це виконується автоматично, за винятком скріншотів, вам потрібно натиснути, коли ви хочете зробити скріншот, або вам потрібно натиснути "**Exported Activity Tester**", щоб отримати скріншоти всіх експортованих активностей. - Захоплювати **HTTPS трафік** - Використовувати **Frida** для отримання **інформації під час виконання** @@ -553,7 +559,7 @@ MobSF також дозволяє вам **diff/Compare** аналіз і інт **Frida** -За замовчуванням, він також використовуватиме деякі скрипти Frida для **обходу SSL пінінгу**, **виявлення root** і **виявлення дебагера**, а також для **моніторингу цікавих API**.\ +За замовчуванням, він також використовуватиме деякі скрипти Frida для **обходу SSL pinning**, **виявлення root** і **виявлення налагоджувача** та для **моніторингу цікавих API**.\ MobSF також може **викликати експортовані активності**, захоплювати **скріншоти** з них і **зберігати** їх для звіту. Щоб **почати** динамічне тестування, натисніть зелену кнопку: "**Start Instrumentation**". Натисніть "**Frida Live Logs**", щоб побачити журнали, згенеровані скриптами Frida, і "**Live API Monitor**", щоб побачити всі виклики до підключених методів, передані аргументи та повернені значення (це з'явиться після натискання "Start Instrumentation").\ @@ -565,12 +571,12 @@ MobSF також дозволяє вам завантажувати власні - **Перерахувати завантажені класи**: Він виведе всі завантажені класи - **Захопити рядки**: Він виведе всі захоплені рядки під час використання програми (дуже шумно) -- **Захопити порівняння рядків**: Може бути дуже корисно. Він **показуватиме 2 рядки, що порівнюються** і чи був результат True чи False. +- **Захопити порівняння рядків**: Може бути дуже корисно. Він **показуватиме 2 рядки, які порівнюються** і чи був результат True чи False. - **Перерахувати методи класу**: Введіть ім'я класу (наприклад, "java.io.File") і він виведе всі методи класу. - **Шукати шаблон класу**: Шукати класи за шаблоном -- **Трасувати методи класу**: **Трасувати** **весь клас** (дивитися вхідні та вихідні дані всіх методів класу). Пам'ятайте, що за замовчуванням MobSF трасує кілька цікавих методів Android API. +- **Відстежувати методи класу**: **Відстежити** **весь клас** (дивитися вхідні та вихідні дані всіх методів класу). Пам'ятайте, що за замовчуванням MobSF відстежує кілька цікавих методів Android API. -Коли ви виберете допоміжний модуль, який хочете використовувати, вам потрібно натиснути "**Start Instrumentation**", і ви побачите всі виходи в "**Frida Live Logs**". +Якщо ви вибрали допоміжний модуль, який хочете використовувати, вам потрібно натиснути "**Start Intrumentation**" і ви побачите всі виходи в "**Frida Live Logs**". **Shell** @@ -585,8 +591,8 @@ receivers ``` **HTTP інструменти** -Коли http трафік захоплений, ви можете побачити непривабливий вигляд захопленого трафіку на "**HTTP(S) Traffic**" внизу або більш привабливий вигляд на зеленій кнопці "**Start HTTPTools**". З другого варіанту ви можете **відправити** **захоплені запити** до **проксі** таких як Burp або Owasp ZAP.\ -Для цього, _включіть Burp -->_ _вимкніть Intercept --> в MobSB HTTPTools виберіть запит_ --> натисніть "**Send to Fuzzer**" --> _виберіть адресу проксі_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)). +Коли http трафік захоплений, ви можете побачити непривабливий вигляд захопленого трафіку на "**HTTP(S) Traffic**" внизу або більш привабливий вигляд у "**Start HTTPTools**" зеленій кнопці. З другого варіанту ви можете **надіслати** **захоплені запити** до **проксі** таких як Burp або Owasp ZAP.\ +Для цього, _включіть Burp -->_ _вимкніть Intercept --> у MobSB HTTPTools виберіть запит_ --> натисніть "**Send to Fuzzer**" --> _виберіть адресу проксі_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)). Коли ви закінчите динамічний аналіз з MobSF, ви можете натиснути на "**Start Web API Fuzzer**", щоб **фузити http запити** та шукати вразливості. @@ -610,7 +616,7 @@ receivers ### [Qark](https://github.com/linkedin/qark) -Цей інструмент призначений для пошуку кількох **вразливостей Android додатків, пов'язаних із безпекою**, як у **джерельному коді**, так і в **упакованих APK**. Інструмент також **може створювати "Proof-of-Concept" розгортаємий APK** та **команди ADB**, щоб експлуатувати деякі з виявлених вразливостей (викриті активності, наміри, tapjacking...). Як і з Drozer, немає необхідності рутувати тестовий пристрій. +Цей інструмент призначений для пошуку кількох **вразливостей Android додатків, пов'язаних з безпекою**, як у **джерельному коді**, так і в **упакованих APK**. Інструмент також **може створювати "Proof-of-Concept" розгортаємий APK** та **команди ADB**, щоб експлуатувати деякі з виявлених вразливостей (викриті активності, наміри, tapjacking...). Як і з Drozer, немає необхідності рутувати тестовий пристрій. ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -704,14 +710,14 @@ ProGuard розповсюджується як частина Android SDK і з (З тієї інструкції) Останній раз, коли ми перевіряли, режим роботи Dexguard був: - завантажити ресурс як InputStream; -- передати результат класу, що наслідує від FilterInputStream, для його розшифрування; +- передати результат класу, що успадковує FilterInputStream, для його розшифрування; - виконати деяку безглузду обфускацію, щоб витратити кілька хвилин часу реверсера; -- передати розшифрований результат в ZipInputStream, щоб отримати DEX файл; -- нарешті, завантажити отриманий DEX як ресурс, використовуючи метод `loadDex`. +- передати розшифрований результат ZipInputStream, щоб отримати DEX файл; +- нарешті завантажити отриманий DEX як ресурс, використовуючи метод `loadDex`. ### [DeGuard](http://apk-deguard.com) -**DeGuard скасовує процес обфускації, виконуваний інструментами обфускації Android. Це дозволяє проводити численні аналізи безпеки, включаючи інспекцію коду та прогнозування бібліотек.** +**DeGuard скасовує процес обфускації, виконуваний інструментами обфускації Android. Це дозволяє проводити численні аналізи безпеки, включаючи перевірку коду та прогнозування бібліотек.** Ви можете завантажити обфускований APK на їх платформу. diff --git a/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md b/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md new file mode 100644 index 000000000..a35d7626b --- /dev/null +++ b/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md @@ -0,0 +1,203 @@ +# Android Anti-Instrumentation & SSL Pinning Bypass (Frida/Objection) + +{{#include ../../banners/hacktricks-training.md}} + +Ця сторінка надає практичний робочий процес для відновлення динамічного аналізу проти Android додатків, які виявляють/блокують інструментацію або забезпечують TLS пінning. Вона зосереджена на швидкій тріажі, загальних виявленнях та копіювальних хуках/тактиках для їх обходу без повторної упаковки, коли це можливо. + +## Detection Surface (що перевіряють додатки) + +- Перевірки root: su binary, шляхи Magisk, значення getprop, загальні пакети root +- Перевірки Frida/debugger (Java): Debug.isDebuggerConnected(), ActivityManager.getRunningAppProcesses(), getRunningServices(), сканування /proc, classpath, завантажені бібліотеки +- Нативний anti-debug: ptrace(), syscalls, anti-attach, breakpoints, inline hooks +- Перевірки раннього ініціалізації: Application.onCreate() або хуки запуску процесу, які викликають збій, якщо присутня інструментація +- TLS пінning: кастомний TrustManager/HostnameVerifier, OkHttp CertificatePinner, Conscrypt pinning, нативні пінни + +## Step 1 — Quick win: hide root with Magisk DenyList + +- Увімкніть Zygisk в Magisk +- Увімкніть DenyList, додайте цільовий пакет +- Перезавантажте та повторно протестуйте + +Багато додатків лише шукають очевидні індикатори (su/Magisk paths/getprop). DenyList часто нейтралізує наївні перевірки. + +References: +- Magisk (Zygisk & DenyList): https://github.com/topjohnwu/Magisk + +## Step 2 — 30‑second Frida Codeshare tests + +Спробуйте загальні скрипти перед глибоким зануренням: + +- anti-root-bypass.js +- anti-frida-detection.js +- hide_frida_gum.js + +Example: +```bash +frida -U -f com.example.app -l anti-frida-detection.js +``` +Це зазвичай зупиняє перевірки Java root/debug, сканування процесів/сервісів та native ptrace(). Корисно для слабо захищених додатків; для посилених цілей можуть знадобитися спеціалізовані хуки. + +- Codeshare: https://codeshare.frida.re/ + +## Крок 3 — Обійти детектори під час ініціалізації, приєднуючись пізніше + +Багато детекцій запускаються лише під час створення процесу/onCreate(). Ін'єкції під час створення (-f) або гаджети потрапляють у пастку; приєднання після завантаження UI може пройти повз. +```bash +# Launch the app normally (launcher/adb), wait for UI, then attach +frida -U -n com.example.app +# Or with Objection to attach to running process +aobjection --gadget com.example.app explore # if using gadget +``` +Якщо це працює, підтримуйте сесію стабільною та продовжуйте перевірки картування та стубів. + +## Крок 4 — Картування логіки виявлення за допомогою Jadx та пошуку рядків + +Статичні ключові слова для триажу в Jadx: +- "frida", "gum", "root", "magisk", "ptrace", "su", "getprop", "debugger" + +Типові шаблони Java: +```java +public boolean isFridaDetected() { +return getRunningServices().contains("frida"); +} +``` +Загальні API для перегляду/перехоплення: +- android.os.Debug.isDebuggerConnected +- android.app.ActivityManager.getRunningAppProcesses / getRunningServices +- java.lang.System.loadLibrary / System.load (native bridge) +- java.lang.Runtime.exec / ProcessBuilder (probing commands) +- android.os.SystemProperties.get (root/emulator heuristics) + +## Крок 5 — Статичне підміщення з Frida (Java) + +Перезапишіть користувацькі охоронці, щоб повернути безпечні значення без повторної упаковки: +```js +Java.perform(() => { +const Checks = Java.use('com.example.security.Checks'); +Checks.isFridaDetected.implementation = function () { return false; }; + +// Neutralize debugger checks +const Debug = Java.use('android.os.Debug'); +Debug.isDebuggerConnected.implementation = function () { return false; }; + +// Example: kill ActivityManager scans +const AM = Java.use('android.app.ActivityManager'); +AM.getRunningAppProcesses.implementation = function () { return java.util.Collections.emptyList(); }; +}); +``` +Тріаж ранніх збоїв? Вивантажте класи безпосередньо перед тим, як він помре, щоб виявити ймовірні простори імен для виявлення: +```js +Java.perform(() => { +Java.enumerateLoadedClasses({ +onMatch: n => console.log(n), +onComplete: () => console.log('Done') +}); +}); +``` +Логування та нейтралізація підозрілих методів для підтвердження виконання потоку: +```js +Java.perform(() => { +const Det = Java.use('com.example.security.DetectionManager'); +Det.checkFrida.implementation = function () { +console.log('checkFrida() called'); +return false; +}; +}); +``` +## Крок 6 — Слідуйте за шляхом JNI/нативним, коли Java хуки не працюють + +Відстежте точки входу JNI, щоб знайти нативні завантажувачі та ініціалізацію виявлення: +```bash +frida-trace -n com.example.app -i "JNI_OnLoad" +``` +Швидка нативна тріажування упакованих .so файлів: +```bash +# List exported symbols & JNI +nm -D libfoo.so | head +objdump -T libfoo.so | grep Java_ +strings -n 6 libfoo.so | egrep -i 'frida|ptrace|gum|magisk|su|root' +``` +Інтерактивне/нативне реверсування: +- Ghidra: https://ghidra-sre.org/ +- r2frida: https://github.com/nowsecure/r2frida + +Приклад: нейтралізувати ptrace, щоб подолати простий анти‑дебаг у libc: +```js +const ptrace = Module.findExportByName(null, 'ptrace'); +if (ptrace) { +Interceptor.replace(ptrace, new NativeCallback(function () { +return -1; // pretend failure +}, 'int', ['int', 'int', 'pointer', 'pointer'])); +} +``` +Дивіться також: {{#ref}} +reversing-native-libraries.md +{{#endref}} + +## Крок 7 — Патчинг Objection (вбудовування гаджета / основи видалення) + +Коли ви віддаєте перевагу перепакуванню до хуків часу виконання, спробуйте: +```bash +objection patchapk --source app.apk +``` +Примітки: +- Потрібен apktool; переконайтеся, що у вас актуальна версія з офіційного посібника, щоб уникнути проблем зі збіркою: https://apktool.org/docs/install +- Впровадження гаджетів дозволяє інструментацію без root, але все ще може бути виявлено більш потужними перевірками під час ініціалізації. + +Посилання: +- Objection: https://github.com/sensepost/objection + +## Крок 8 — Резервний варіант: Патч TLS пінінгу для видимості мережі + +Якщо інструментацію заблоковано, ви все ще можете перевірити трафік, видаливши пінінг статично: +```bash +apk-mitm app.apk +# Then install the patched APK and proxy via Burp/mitmproxy +``` +- Інструмент: https://github.com/shroudedcode/apk-mitm +- Для трюків з CA‑довереністю в конфігурації мережі (та довірою CA користувача Android 7+), дивіться: +{{#ref}} +make-apk-accept-ca-certificate.md +{{#endref}} +{{#ref}} +install-burp-certificate.md +{{#endref}} + +## Зручний командний шпаргалка +```bash +# List processes and attach +frida-ps -Uai +frida -U -n com.example.app + +# Spawn with a script (may trigger detectors) +frida -U -f com.example.app -l anti-frida-detection.js + +# Trace native init +frida-trace -n com.example.app -i "JNI_OnLoad" + +# Objection runtime +objection --gadget com.example.app explore + +# Static TLS pinning removal +apk-mitm app.apk +``` +## Поради та застереження + +- Віддавайте перевагу пізньому приєднанню замість створення нових процесів, коли програми аварійно завершують роботу під час запуску +- Деякі виявлення повторно запускаються в критичних потоках (наприклад, оплата, автентифікація) — тримайте хуки активними під час навігації +- Поєднуйте статичний та динамічний аналіз: шукайте рядки в Jadx, щоб скоротити список класів; потім підключайте методи для перевірки під час виконання +- Посилені програми можуть використовувати пакувальники та нативне TLS-пінning — очікуйте реверсування нативного коду + +## Посилання + +- [Reversing Android Apps: Bypassing Detection Like a Pro](https://www.kayssel.com/newsletter/issue-12/) +- [Frida Codeshare](https://codeshare.frida.re/) +- [Objection](https://github.com/sensepost/objection) +- [apk-mitm](https://github.com/shroudedcode/apk-mitm) +- [Jadx](https://github.com/skylot/jadx) +- [Ghidra](https://ghidra-sre.org/) +- [r2frida](https://github.com/nowsecure/r2frida) +- [Apktool install guide](https://apktool.org/docs/install) +- [Magisk](https://github.com/topjohnwu/Magisk) + +{{#include ../../banners/hacktricks-training.md}}