mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/mobile-pentesting/android-app-pentesting/README.md', 's
This commit is contained in:
		
							parent
							
								
									a5a3990c3c
								
							
						
					
					
						commit
						4a531c07db
					
				@ -337,6 +337,7 @@
 | 
			
		||||
  - [Manual DeObfuscation](mobile-pentesting/android-app-pentesting/manual-deobfuscation.md)
 | 
			
		||||
  - [React Native Application](mobile-pentesting/android-app-pentesting/react-native-application.md)
 | 
			
		||||
  - [Reversing Native Libraries](mobile-pentesting/android-app-pentesting/reversing-native-libraries.md)
 | 
			
		||||
  - [Shizuku Privileged Api](mobile-pentesting/android-app-pentesting/shizuku-privileged-api.md)
 | 
			
		||||
  - [Smali - Decompiling, Modifying, Compiling](mobile-pentesting/android-app-pentesting/smali-changes.md)
 | 
			
		||||
  - [Spoofing your location in Play Store](mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md)
 | 
			
		||||
  - [Tapjacking](mobile-pentesting/android-app-pentesting/tapjacking.md)
 | 
			
		||||
 | 
			
		||||
@ -20,12 +20,13 @@ android-applications-basics.md
 | 
			
		||||
## Smali
 | 
			
		||||
 | 
			
		||||
Іноді цікаво **модифікувати код додатку**, щоб отримати доступ до **прихованої інформації** (можливо, добре обфусцировані паролі або прапори). Тоді може бути цікаво декомпілювати apk, змінити код і знову скомпілювати його.\
 | 
			
		||||
[**У цьому посібнику** ви можете **дізнатися, як декомпілювати APK, модифікувати код Smali та знову скомпілювати APK** з новою функціональністю](smali-changes.md). Це може бути дуже корисно як **альтернатива для кількох тестів під час динамічного аналізу**, які будуть представлені. Тому **завжди тримайте цю можливість у пам'яті**.
 | 
			
		||||
[**У цьому посібнику** ви можете **дізнатися, як декомпілювати APK, модифікувати код Smali та знову скомпілювати APK** з новою функціональністю](smali-changes.md). Це може бути дуже корисно як **альтернатива для кількох тестів під час динамічного аналізу**, які будуть представлені. Тому **завжди майте на увазі цю можливість**.
 | 
			
		||||
 | 
			
		||||
## Інші цікаві трюки
 | 
			
		||||
 | 
			
		||||
- [Спуфінг вашого місцезнаходження в Play Store](spoofing-your-location-in-play-store.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)
 | 
			
		||||
- [Shizuku Privileged API (привілейований доступ без root на основі ADB)](shizuku-privileged-api.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)
 | 
			
		||||
- Витягти APK з пристрою:
 | 
			
		||||
```bash
 | 
			
		||||
adb shell pm list packages
 | 
			
		||||
@ -36,7 +37,7 @@ 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
 | 
			
		||||
```
 | 
			
		||||
- Об'єднайте всі спліти та базові apk за допомогою [APKEditor](https://github.com/REAndroid/APKEditor):
 | 
			
		||||
- Об'єднайте всі спліти та базові APK за допомогою [APKEditor](https://github.com/REAndroid/APKEditor):
 | 
			
		||||
```bash
 | 
			
		||||
mkdir splits
 | 
			
		||||
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
 | 
			
		||||
@ -52,15 +53,15 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
 | 
			
		||||
 | 
			
		||||
### Пошук цікавої інформації
 | 
			
		||||
 | 
			
		||||
Просто переглядаючи **рядки** APK, ви можете шукати **паролі**, **URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** ключі, **шифрування**, **bluetooth uuids**, **токени** та будь-яку цікаву інформацію... шукайте навіть код виконання **бекдорів** або бекдори аутентифікації (жорстко закодовані облікові дані адміністратора для програми).
 | 
			
		||||
Просто ознайомившись з **рядками** APK, ви можете шукати **паролі**, **URL-адреси** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** ключі, **шифрування**, **bluetooth uuids**, **токени** та будь-яку цікаву інформацію... шукайте навіть код виконання **бекдорів** або бекдори аутентифікації (жорстко закодовані облікові дані адміністратора для програми).
 | 
			
		||||
 | 
			
		||||
**Firebase**
 | 
			
		||||
 | 
			
		||||
Зверніть особливу увагу на **firebase URL** та перевірте, чи він неправильно налаштований. [Більше інформації про те, що таке Firebase і як його експлуатувати тут.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
 | 
			
		||||
Зверніть особливу увагу на **firebase URL-адреси** та перевірте, чи вони неправильно налаштовані. [Більше інформації про те, що таке Firebase і як його експлуатувати тут.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
 | 
			
		||||
 | 
			
		||||
### Основи розуміння програми - Manifest.xml, strings.xml
 | 
			
		||||
 | 
			
		||||
**Вивчення файлів _Manifest.xml_ та **_strings.xml_** програми може виявити потенційні вразливості безпеки**. Ці файли можна отримати за допомогою декомпілерів або перейменувавши розширення файлу APK на .zip, а потім розпакувавши його.
 | 
			
		||||
**Дослідження файлів _Manifest.xml_ та **_strings.xml_** програми може виявити потенційні вразливості безпеки**. Ці файли можна отримати за допомогою декомпілерів або перейменувавши розширення файлу APK на .zip, а потім розпакувавши його.
 | 
			
		||||
 | 
			
		||||
**Вразливості**, виявлені з **Manifest.xml**, включають:
 | 
			
		||||
 | 
			
		||||
@ -76,7 +77,7 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
 | 
			
		||||
 | 
			
		||||
### Tapjacking
 | 
			
		||||
 | 
			
		||||
**Tapjacking** - це атака, коли **зловмисна** **програма** запускається і **розташовується поверх програми жертви**. Як тільки вона видимо закриває програму жертви, її інтерфейс користувача спроектований так, щоб обманути користувача взаємодіяти з нею, в той час як вона передає взаємодію до програми жертви.\
 | 
			
		||||
**Tapjacking** - це атака, коли **зловмисна** **програма** запускається і **розташовується поверх програми жертви**. Як тільки вона видимо закриває програму жертви, її інтерфейс користувача спроектований таким чином, щоб обманути користувача взаємодіяти з нею, в той час як вона передає взаємодію до програми жертви.\
 | 
			
		||||
Фактично, це **осліплює користувача, не даючи йому знати, що він насправді виконує дії в програмі жертви**.
 | 
			
		||||
 | 
			
		||||
Знайдіть більше інформації в:
 | 
			
		||||
@ -85,9 +86,9 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
 | 
			
		||||
tapjacking.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
### Викрадення завдань
 | 
			
		||||
### Захоплення завдань
 | 
			
		||||
 | 
			
		||||
**Активність** з **`launchMode`**, встановленим на **`singleTask` без жодного `taskAffinity`** визначеного, вразлива до викрадення завдань. Це означає, що **програма** може бути встановлена, і якщо вона запуститься до реальної програми, вона може **викрасти завдання реальної програми** (так що користувач буде взаємодіяти з **зловмисною програмою, вважаючи, що використовує реальну**).
 | 
			
		||||
**Активність** з **`launchMode`**, встановленим на **`singleTask` без визначеного `taskAffinity`**, вразлива до захоплення завдань. Це означає, що **програму** можна встановити, і якщо вона запуститься до реальної програми, вона може **захопити завдання реальної програми** (так що користувач буде взаємодіяти з **зловмисною програмою, вважаючи, що використовує реальну**).
 | 
			
		||||
 | 
			
		||||
Більше інформації в:
 | 
			
		||||
 | 
			
		||||
@ -116,14 +117,14 @@ android-task-hijacking.md
 | 
			
		||||
- З огляду на легкість доступу, рекомендується **не зберігати чутливу інформацію** на зовнішньому зберіганні.
 | 
			
		||||
- Зовнішнє зберігання може бути видалено або доступно будь-якою програмою, що робить його менш безпечним.
 | 
			
		||||
3. **Обробка даних з зовнішнього зберігання**:
 | 
			
		||||
- Завжди **виконуйте валідацію введення** на даних, отриманих з зовнішнього зберігання. Це важливо, оскільки дані надходять з ненадійного джерела.
 | 
			
		||||
- Завжди **виконуйте перевірку введення** даних, отриманих з зовнішнього зберігання. Це важливо, оскільки дані надходять з ненадійного джерела.
 | 
			
		||||
- Зберігання виконуваних файлів або класів на зовнішньому зберіганні для динамічного завантаження категорично не рекомендується.
 | 
			
		||||
- Якщо ваша програма повинна отримувати виконувані файли з зовнішнього зберігання, переконайтеся, що ці файли **підписані та криптографічно перевірені** перед їх динамічним завантаженням. Цей крок є важливим для підтримки цілісності безпеки вашої програми.
 | 
			
		||||
 | 
			
		||||
Зовнішнє зберігання може бути **доступним** у `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Починаючи з Android 4.4 (**API 17**), SD-карта має структуру каталогів, яка **обмежує доступ програми до каталогу, який спеціально призначений для цієї програми**. Це запобігає зловмисним програмам отримувати доступ для читання або запису файлів іншої програми.
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Починаючи з Android 4.4 (**API 17**), SD-карта має структуру каталогів, яка **обмежує доступ програми до каталогу, який спеціально призначений для цієї програми**. Це запобігає зловмисним програмам отримувати доступ для читання або запису до файлів іншої програми.
 | 
			
		||||
 | 
			
		||||
**Чутливі дані, збережені у відкритому тексті**
 | 
			
		||||
 | 
			
		||||
@ -145,7 +146,7 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
 | 
			
		||||
 | 
			
		||||
**Слабкі процеси управління ключами**
 | 
			
		||||
 | 
			
		||||
Деякі розробники зберігають чутливі дані у локальному сховищі та шифрують їх за допомогою ключа, закодованого в коді. Це не слід робити, оскільки деяке реверсування може дозволити зловмисникам витягти конфіденційну інформацію.
 | 
			
		||||
Деякі розробники зберігають чутливі дані у локальному сховищі та шифрують їх за допомогою ключа, закодованого в коді або передбачуваного. Це не слід робити, оскільки деяке реверсування може дозволити зловмисникам витягти конфіденційну інформацію.
 | 
			
		||||
 | 
			
		||||
**Використання ненадійних та/або застарілих алгоритмів**
 | 
			
		||||
 | 
			
		||||
@ -157,11 +158,11 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
 | 
			
		||||
- Якщо додаток є чутливим (наприклад, банківські додатки), він повинен виконувати **власні перевірки, щоб дізнатися, чи пристрій є рутованим**, і діяти відповідно.
 | 
			
		||||
- Якщо додаток є чутливим (наприклад, банківські додатки), він повинен перевіряти, чи використовується **емулятор**.
 | 
			
		||||
- Якщо додаток є чутливим (наприклад, банківські додатки), він повинен **перевіряти свою цілісність перед виконанням**, щоб перевірити, чи був він змінений.
 | 
			
		||||
- Використовуйте [**APKiD**](https://github.com/rednaga/APKiD), щоб перевірити, який компілятор/упаковщик/обфускатор був використаний для створення APK.
 | 
			
		||||
- Використовуйте [**APKiD**](https://github.com/rednaga/APKiD), щоб перевірити, який компілятор/упаковщик/обфускатор був використаний для створення APK
 | 
			
		||||
 | 
			
		||||
### React Native Application
 | 
			
		||||
 | 
			
		||||
Прочитайте наступну сторінку, щоб дізнатися, як легко отримати доступ до коду javascript React додатків:
 | 
			
		||||
Прочитайте наступну сторінку, щоб дізнатися, як легко отримати доступ до коду javascript додатків React:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
react-native-application.md
 | 
			
		||||
@ -181,13 +182,13 @@ react-native-application.md
 | 
			
		||||
 | 
			
		||||
### Автоматизований статичний аналіз коду
 | 
			
		||||
 | 
			
		||||
Інструмент [**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)
 | 
			
		||||
 | 
			
		||||
### Обхід біометричної аутентифікації
 | 
			
		||||
 | 
			
		||||
@ -230,7 +231,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}}
 | 
			
		||||
@ -240,7 +241,7 @@ avd-android-virtual-device.md
 | 
			
		||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Безкоштовна версія:** Особисте видання, вам потрібно створити обліковий запис. _Рекомендується **завантажити** версію **З** _**VirtualBox**, щоб уникнути потенційних помилок._)
 | 
			
		||||
- [**Nox**](https://es.bignox.com) (Безкоштовно, але не підтримує Frida або Drozer).
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> При створенні нового емулятора на будь-якій платформі пам'ятайте, що чим більший екран, тим повільніше працюватиме емулятор. Тому вибирайте маленькі екрани, якщо це можливо.
 | 
			
		||||
 | 
			
		||||
Щоб **встановити сервіси Google** (як AppStore) в Genymotion, вам потрібно натиснути на червону кнопку, позначену на наступному зображенні:
 | 
			
		||||
@ -259,14 +260,14 @@ 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**, **додатки можуть отримувати доступ лише до своїх власних журналів**. Тому додатки не можуть отримувати доступ до журналів інших додатків.\
 | 
			
		||||
@ -274,30 +275,30 @@ avd-android-virtual-device.md
 | 
			
		||||
 | 
			
		||||
**Кешування буфера копіювання/вставки**
 | 
			
		||||
 | 
			
		||||
**Кліпборд** Android дозволяє функціональність копіювання-вставки в додатках, але це створює ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно розкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих частин програми, таких як дані кредитних карток, щоб запобігти витоку даних.
 | 
			
		||||
Фреймворк Android на основі **буфера обміну** дозволяє функціональність копіювання-вставки в додатках, але несе ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно відкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих розділів програми, таких як дані кредитних карток, щоб запобігти витоку даних.
 | 
			
		||||
 | 
			
		||||
**Журнали аварій**
 | 
			
		||||
 | 
			
		||||
Якщо додаток **виникає аварія** і **зберігає журнали**, ці журнали можуть допомогти зловмисникам, особливо коли додаток не може бути реверсовано. Щоб зменшити цей ризик, уникайте ведення журналів при аваріях, а якщо журнали повинні передаватися через мережу, переконайтеся, що вони надсилаються через SSL-канал для безпеки.
 | 
			
		||||
 | 
			
		||||
Як пентестер, **спробуйте переглянути ці журнали**.
 | 
			
		||||
Як пентестер, **слідкуйте за цими журналами**.
 | 
			
		||||
 | 
			
		||||
**Дані аналітики, надіслані третім особам**
 | 
			
		||||
 | 
			
		||||
Додатки часто інтегрують сервіси, такі як Google Adsense, які можуть ненавмисно **викривати чутливі дані** через неправильну реалізацію розробниками. Щоб виявити потенційні витоки даних, рекомендується **перехопити трафік програми** та перевірити, чи надсилається якась чутлива інформація третім особам.
 | 
			
		||||
Додатки часто інтегрують сервіси, такі як Google Adsense, які можуть ненавмисно **викривати чутливі дані** через неналежну реалізацію розробниками. Щоб виявити потенційні витоки даних, рекомендується **перехопити трафік програми** та перевірити, чи надсилається якась чутлива інформація третім особам.
 | 
			
		||||
 | 
			
		||||
### SQLite БД
 | 
			
		||||
 | 
			
		||||
Більшість додатків використовуватимуть **внутрішні SQLite бази даних** для збереження інформації. Під час пентесту зверніть увагу на **бази даних**, що створюються, назви **таблиць** та **стовпців** і всі **дані**, що зберігаються, оскільки ви можете знайти **чутливу інформацію** (що буде вразливістю).\
 | 
			
		||||
Бази даних повинні розташовуватися в `/data/data/the.package.name/databases`, як `/data/data/com.mwr.example.sieve/databases`.
 | 
			
		||||
Бази даних повинні розташовуватися в `/data/data/the.package.name/databases`, наприклад, `/data/data/com.mwr.example.sieve/databases`
 | 
			
		||||
 | 
			
		||||
Якщо база даних зберігає конфіденційну інформацію і **зашифрована**, але ви можете **знайти** **пароль** всередині програми, це все ще є **вразливістю**.
 | 
			
		||||
 | 
			
		||||
Перелічте таблиці, використовуючи `.tables`, і перелічте стовпці таблиць, виконуючи `.schema <table_name>`.
 | 
			
		||||
Перерахуйте таблиці, використовуючи `.tables`, і перераховуйте стовпці таблиць, виконуючи `.schema <table_name>`
 | 
			
		||||
 | 
			
		||||
### Drozer (Експлуатація активностей, постачальників контенту та сервісів)
 | 
			
		||||
 | 
			
		||||
З [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** дозволяє вам **приймати роль Android додатка** та взаємодіяти з іншими додатками. Він може робити **все, що може зробити встановлений додаток**, наприклад, використовувати механізм міжпроцесного спілкування (IPC) Android та взаємодіяти з основною операційною системою.\
 | 
			
		||||
З [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** дозволяє вам **приймати роль Android-додатка** та взаємодіяти з іншими додатками. Він може робити **все, що може зробити встановлений додаток**, наприклад, використовувати механізм міжпроцесного зв'язку (IPC) Android і взаємодіяти з основною операційною системою.\
 | 
			
		||||
Drozer є корисним інструментом для **експлуатації експортованих активностей, експортованих сервісів та постачальників контенту**, як ви дізнаєтеся в наступних розділах.
 | 
			
		||||
 | 
			
		||||
### Експлуатація експортованих активностей
 | 
			
		||||
@ -313,15 +314,15 @@ Drozer є корисним інструментом для **експлуата
 | 
			
		||||
 | 
			
		||||
Ви також можете запустити експортовану активність з adb:
 | 
			
		||||
 | 
			
		||||
- Ім'я пакету - com.example.demo
 | 
			
		||||
- Експортоване ім'я активності - com.example.test.MainActivity
 | 
			
		||||
- PackageName - com.example.demo
 | 
			
		||||
- Exported ActivityName - com.example.test.MainActivity
 | 
			
		||||
```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]
 | 
			
		||||
> Зверніть увагу, що обхід авторизації не завжди є вразливістю, це залежить від того, як працює обхід і яка інформація піддається розкриттю.
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Зверніть увагу, що обхід авторизації не завжди є вразливістю, це залежить від того, як працює обхід і яка інформація розкривається.
 | 
			
		||||
 | 
			
		||||
**Витік чутливої інформації**
 | 
			
		||||
 | 
			
		||||
@ -331,30 +332,30 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
 | 
			
		||||
 | 
			
		||||
Якщо tapjacking не запобігається, ви можете зловживати експортованою активністю, щоб змусити **користувача виконувати несподівані дії**. Для отримання додаткової інформації про [**що таке Tapjacking, перейдіть за посиланням**](#tapjacking).
 | 
			
		||||
 | 
			
		||||
### Використання Content Providers - Доступ до чутливої інформації та її маніпуляція
 | 
			
		||||
### Експлуатація постачальників контенту - доступ до чутливої інформації та її маніпуляція
 | 
			
		||||
 | 
			
		||||
[**Прочитайте це, якщо хочете освіжити знання про Content Provider.**](android-applications-basics.md#content-provider)\
 | 
			
		||||
Content providers в основному використовуються для **обміну даними**. Якщо у програми є доступні content providers, ви можете **витягнути чутливі** дані з них. Також цікаво протестувати можливі **SQL-ін'єкції** та **Path Traversals**, оскільки вони можуть бути вразливими.
 | 
			
		||||
[**Прочитайте це, якщо хочете освіжити знання про постачальника контенту.**](android-applications-basics.md#content-provider)\
 | 
			
		||||
Постачальники контенту в основному використовуються для **обміну даними**. Якщо у програми є доступні постачальники контенту, ви можете **витягти чутливі** дані з них. Також цікаво протестувати можливі **SQL-ін'єкції** та **перетворення шляхів**, оскільки вони можуть бути вразливими.
 | 
			
		||||
 | 
			
		||||
[**Дізнайтеся, як експлуатувати Content Providers за допомогою Drozer.**](drozer-tutorial/index.html#content-providers)
 | 
			
		||||
[**Дізнайтеся, як експлуатувати постачальників контенту за допомогою Drozer.**](drozer-tutorial/index.html#content-providers)
 | 
			
		||||
 | 
			
		||||
### **Використання Services**
 | 
			
		||||
### **Експлуатація сервісів**
 | 
			
		||||
 | 
			
		||||
[**Прочитайте це, якщо хочете освіжити знання про Service.**](android-applications-basics.md#services)\
 | 
			
		||||
Пам'ятайте, що дії Service починаються в методі `onStartCommand`.
 | 
			
		||||
[**Прочитайте це, якщо хочете освіжити знання про сервіс.**](android-applications-basics.md#services)\
 | 
			
		||||
Пам'ятайте, що дії сервісу починаються в методі `onStartCommand`.
 | 
			
		||||
 | 
			
		||||
Сервіс в основному є чимось, що **може отримувати дані**, **обробляти** їх і **повертати** (або не повертати) відповідь. Тоді, якщо програма експортує деякі сервіси, вам слід **перевірити** **код**, щоб зрозуміти, що він робить, і **тестувати** його **динамічно** для витягування конфіденційної інформації, обходу заходів аутентифікації...\
 | 
			
		||||
[**Дізнайтеся, як експлуатувати Services за допомогою Drozer.**](drozer-tutorial/index.html#services)
 | 
			
		||||
Сервіс в основному є чимось, що **може отримувати дані**, **обробляти** їх і **повертати** (або не повертати) відповідь. Тому, якщо програма експортує деякі сервіси, вам слід **перевірити** **код**, щоб зрозуміти, що він робить, і **тестувати** його **динамічно** для витягування конфіденційної інформації, обходу заходів аутентифікації...\
 | 
			
		||||
[**Дізнайтеся, як експлуатувати сервіси за допомогою Drozer.**](drozer-tutorial/index.html#services)
 | 
			
		||||
 | 
			
		||||
### **Використання Broadcast Receivers**
 | 
			
		||||
### **Експлуатація приймачів широкомовлення**
 | 
			
		||||
 | 
			
		||||
[**Прочитайте це, якщо хочете освіжити знання про Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\
 | 
			
		||||
Пам'ятайте, що дії Broadcast Receiver починаються в методі `onReceive`.
 | 
			
		||||
[**Прочитайте це, якщо хочете освіжити знання про приймач широкомовлення.**](android-applications-basics.md#broadcast-receivers)\
 | 
			
		||||
Пам'ятайте, що дії приймача широкомовлення починаються в методі `onReceive`.
 | 
			
		||||
 | 
			
		||||
Broadcast receiver буде чекати на певний тип повідомлення. В залежності від того, як приймач обробляє повідомлення, він може бути вразливим.\
 | 
			
		||||
[**Дізнайтеся, як експлуатувати Broadcast Receivers за допомогою Drozer.**](#exploiting-broadcast-receivers)
 | 
			
		||||
Приймач широкомовлення буде чекати на певний тип повідомлення. В залежності від того, як приймач обробляє повідомлення, він може бути вразливим.\
 | 
			
		||||
[**Дізнайтеся, як експлуатувати приймачі широкомовлення за допомогою Drozer.**](#exploiting-broadcast-receivers)
 | 
			
		||||
 | 
			
		||||
### **Використання Schemes / Deep links**
 | 
			
		||||
### **Експлуатація схем / глибоких посилань**
 | 
			
		||||
 | 
			
		||||
Ви можете шукати глибокі посилання вручну, використовуючи інструменти, такі як MobSF, або скрипти, як [цей](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
 | 
			
		||||
Ви можете **відкрити** оголошену **схему** за допомогою **adb** або **браузера**:
 | 
			
		||||
@ -368,9 +369,9 @@ _Зверніть увагу, що ви можете **пропустити ім
 | 
			
		||||
<!-- 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>
 | 
			
		||||
```
 | 
			
		||||
**Виконаний код**
 | 
			
		||||
**Код, що виконується**
 | 
			
		||||
 | 
			
		||||
Щоб знайти **код, який буде виконаний в додатку**, перейдіть до активності, викликаної глибоким посиланням, і знайдіть функцію **`onNewIntent`**.
 | 
			
		||||
Щоб знайти **код, який буде виконуватись в додатку**, перейдіть до активності, викликаної глибоким посиланням, і знайдіть функцію **`onNewIntent`**.
 | 
			
		||||
 | 
			
		||||
 (1) (1) (1).png>)
 | 
			
		||||
 | 
			
		||||
@ -381,21 +382,21 @@ _Зверніть увагу, що ви можете **пропустити ім
 | 
			
		||||
**Параметри в шляху**
 | 
			
		||||
 | 
			
		||||
Ви **також повинні перевірити, чи використовує будь-яке глибоке посилання параметр всередині шляху** 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/).
 | 
			
		||||
Зверніть увагу, що якщо ви знайдете правильні кінцеві точки всередині додатку, ви можете викликати **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), що дозволяє зловмисникам розшифровувати дані.
 | 
			
		||||
- **Витік приватної інформації** є ризиком, коли додатки аутентифікуються за допомогою захищених каналів, але потім спілкуються через незахищені канали для інших транзакцій. Цей підхід не захищає чутливі дані, такі як сесійні куки або дані користувачів, від перехоплення зловмисними особами.
 | 
			
		||||
- **Витік приватної інформації** є ризиком, коли додатки аутентифікуються за допомогою захищених каналів, але потім спілкуються через незахищені канали для інших транзакцій. Цей підхід не захищає чутливі дані, такі як сесійні куки або деталі користувачів, від перехоплення зловмисними особами.
 | 
			
		||||
 | 
			
		||||
#### Перевірка сертифікатів
 | 
			
		||||
 | 
			
		||||
Ми зосередимося на **перевірці сертифікатів**. Цілісність сертифіката сервера повинна бути перевірена для підвищення безпеки. Це важливо, оскільки небезпечні конфігурації TLS і передача чутливих даних через незашифровані канали можуть становити значні ризики. Для детальних кроків щодо перевірки сертифікатів сервера та усунення вразливостей, [**цей ресурс**](https://manifestsecurity.com/android-application-security-part-10/) надає всебічні рекомендації.
 | 
			
		||||
Ми зосередимося на **перевірці сертифікатів**. Цілісність сертифіката сервера повинна бути перевірена для підвищення безпеки. Це важливо, оскільки небезпечні конфігурації TLS та передача чутливих даних через незашифровані канали можуть становити значні ризики. Для детальних кроків щодо перевірки сертифікатів сервера та усунення вразливостей, [**цей ресурс**](https://manifestsecurity.com/android-application-security-part-10/) надає всебічні рекомендації.
 | 
			
		||||
 | 
			
		||||
#### SSL Pinning
 | 
			
		||||
 | 
			
		||||
@ -405,31 +406,33 @@ 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.
 | 
			
		||||
 | 
			
		||||
#### Обхід 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 динамічний аналіз** (пояснено нижче)
 | 
			
		||||
- Якщо ви все ще вважаєте, що є якийсь трафік, який ви не захоплюєте, ви можете спробувати **переслати трафік до burp, використовуючи iptables**. Прочитайте цей блог: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
 | 
			
		||||
- Ви також можете спробувати **автоматично обійти SSL Pinning** за допомогою [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
 | 
			
		||||
- Ви також можете спробувати **автоматично обійти SSL Pinning** за допомогою **MobSF динамічного аналізу** (пояснено нижче)
 | 
			
		||||
- Якщо ви все ще вважаєте, що є якийсь трафік, який ви не захоплюєте, ви можете спробувати **переслати трафік до burp за допомогою iptables**. Прочитайте цей блог: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
 | 
			
		||||
 | 
			
		||||
#### Пошук загальних веб-вразливостей
 | 
			
		||||
 | 
			
		||||
Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але вона широко висвітлюється в інших джерелах.
 | 
			
		||||
Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але широко висвітлюється в інших джерелах.
 | 
			
		||||
 | 
			
		||||
### Frida
 | 
			
		||||
 | 
			
		||||
[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)
 | 
			
		||||
- Ojection - це чудово для автоматизації використання Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
 | 
			
		||||
- Ojection - це чудовий інструмент для автоматизації використання Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
 | 
			
		||||
- Ви можете знайти деякі чудові скрипти 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))
 | 
			
		||||
 | 
			
		||||
@ -446,13 +449,13 @@ python3 fridump3.py -u <PID>
 | 
			
		||||
frida-ps -Uai
 | 
			
		||||
python3 fridump3.py -u "<Name>"
 | 
			
		||||
```
 | 
			
		||||
Це скине пам'ять у папку ./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, дані повинні бути зашифровані.
 | 
			
		||||
 | 
			
		||||
@ -470,11 +473,11 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
 | 
			
		||||
 | 
			
		||||
Коли ви ставите додаток у фоновий режим, Android зберігає **знімок додатку**, щоб, коли його відновлюють на передній план, він починає завантажувати зображення перед додатком, тому здається, що додаток завантажився швидше.
 | 
			
		||||
 | 
			
		||||
Однак, якщо цей знімок містить **чутливу інформацію**, хтось, хто має доступ до знімка, може **викрасти цю інформацію** (зверніть увагу, що для доступу до неї потрібен root).
 | 
			
		||||
Однак, якщо цей знімок містить **чутливу інформацію**, хтось, хто має доступ до знімка, може **викрасти цю інформацію** (зверніть увагу, що вам потрібен root для доступу до неї).
 | 
			
		||||
 | 
			
		||||
Знімки зазвичай зберігаються за адресою: **`/data/system_ce/0/snapshots`**
 | 
			
		||||
 | 
			
		||||
Android надає спосіб **запобігти захопленню скріншотів, встановивши параметр макета FLAG_SECURE**. Використовуючи цей прапор, вміст вікна обробляється як безпечний, що запобігає його появі на скріншотах або перегляду на небезпечних дисплеях.
 | 
			
		||||
Android надає спосіб **запобігти захопленню скріншотів, встановивши параметр макета FLAG_SECURE**. Використовуючи цей прапор, вміст вікна вважається безпечним, що запобігає його появі на скріншотах або перегляду на небезпечних дисплеях.
 | 
			
		||||
```bash
 | 
			
		||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
 | 
			
		||||
```
 | 
			
		||||
@ -486,7 +489,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
 | 
			
		||||
 | 
			
		||||
Розробники часто створюють проксі-компоненти, такі як активності, сервіси та приймачі трансляцій, які обробляють ці Намір і передають їх методам, таким як `startActivity(...)` або `sendBroadcast(...)`, що може бути ризиковано.
 | 
			
		||||
 | 
			
		||||
Небезпека полягає в тому, що зловмисники можуть спонукати до активації неекспортованих компонентів додатка або отримати доступ до чутливих постачальників контенту, неправильно перенаправляючи ці Намір. Яскравим прикладом є компонент `WebView`, який перетворює URL-адреси на об'єкти `Intent` за допомогою `Intent.parseUri(...)` і потім виконує їх, що може призвести до шкідливих ін'єкцій Намір.
 | 
			
		||||
Небезпека полягає в тому, що зловмисники можуть спонукати до активації неекспортованих компонентів додатка або отримати доступ до чутливих постачальників контенту, неправильно перенаправляючи ці Намір. Яскравим прикладом є компонент `WebView`, який перетворює URL-адреси на об'єкти `Intent` через `Intent.parseUri(...)` і потім виконує їх, що може призвести до зловмисних ін'єкцій Намір.
 | 
			
		||||
 | 
			
		||||
### Основні висновки
 | 
			
		||||
 | 
			
		||||
@ -500,7 +503,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
 | 
			
		||||
Можливо, ви знаєте про цей вид вразливостей з вебу. Вам потрібно бути особливо обережними з цими вразливостями в Android-додатку:
 | 
			
		||||
 | 
			
		||||
- **SQL-ін'єкція:** При роботі з динамічними запитами або постачальниками контенту переконайтеся, що ви використовуєте параметризовані запити.
 | 
			
		||||
- **Ін'єкція JavaScript (XSS):** Переконайтеся, що підтримка JavaScript і плагінів вимкнена для будь-яких WebViews (вимкнено за замовчуванням). [Більше інформації тут](webview-attacks.md#javascript-enabled).
 | 
			
		||||
- **Ін'єкція JavaScript (XSS):** Переконайтеся, що підтримка JavaScript та плагінів вимкнена для будь-яких WebViews (вимкнено за замовчуванням). [Більше інформації тут](webview-attacks.md#javascript-enabled).
 | 
			
		||||
- **Включення локальних файлів:** WebViews повинні мати доступ до файлової системи вимкненим (включено за замовчуванням) - `(webview.getSettings().setAllowFileAccess(false);)`. [Більше інформації тут](webview-attacks.md#javascript-enabled).
 | 
			
		||||
- **Вічні куки**: У кількох випадках, коли Android-додаток завершує сесію, куки не відкликаються або можуть навіть зберігатися на диску.
 | 
			
		||||
- [**Безпечний прапорець** у куках](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
 | 
			
		||||
@ -538,7 +541,7 @@ MobSF також дозволяє вам **diff/Compare** аналіз і інт
 | 
			
		||||
 | 
			
		||||
**Frida**
 | 
			
		||||
 | 
			
		||||
За замовчуванням, він також використовуватиме деякі скрипти Frida для **обходу SSL pinning**, **виявлення root** і **виявлення дебагера** та для **моніторингу цікавих API**.\
 | 
			
		||||
За замовчуванням, він також використовуватиме деякі скрипти Frida для **обходу SSL пінінгу**, **виявлення root** і **виявлення дебагера** та для **моніторингу цікавих API**.\
 | 
			
		||||
MobSF також може **викликати експортовані активності**, захоплювати **скріншоти** з них і **зберігати** їх для звіту.
 | 
			
		||||
 | 
			
		||||
Щоб **почати** динамічне тестування, натисніть зелену кнопку: "**Start Instrumentation**". Натисніть "**Frida Live Logs**", щоб побачити журнали, згенеровані скриптами Frida, і "**Live API Monitor**", щоб побачити всі виклики до підключених методів, передані аргументи та повернені значення (це з'явиться після натискання "Start Instrumentation").\
 | 
			
		||||
@ -550,12 +553,12 @@ MobSF також дозволяє вам завантажувати власні
 | 
			
		||||
 | 
			
		||||
- **Перерахувати завантажені класи**: Він виведе всі завантажені класи
 | 
			
		||||
- **Захопити рядки**: Він виведе всі захоплені рядки під час використання програми (дуже шумно)
 | 
			
		||||
- **Захопити порівняння рядків**: Може бути дуже корисно. Він **показуватиме 2 рядки, що порівнюються** і чи був результат True чи False.
 | 
			
		||||
- **Захопити порівняння рядків**: Може бути дуже корисно. Він **показуватиме 2 рядки, які порівнюються** і чи був результат True чи False.
 | 
			
		||||
- **Перерахувати методи класу**: Введіть ім'я класу (наприклад, "java.io.File") і він виведе всі методи класу.
 | 
			
		||||
- **Шукати шаблон класу**: Шукати класи за шаблоном
 | 
			
		||||
- **Трасувати методи класу**: **Трасувати** **весь клас** (дивитися вхідні та вихідні дані всіх методів класу). Пам'ятайте, що за замовчуванням MobSF трасує кілька цікавих методів Android API.
 | 
			
		||||
 | 
			
		||||
Коли ви виберете допоміжний модуль, який хочете використовувати, вам потрібно натиснути "**Start Intrumentation**" і ви побачите всі виходи в "**Frida Live Logs**".
 | 
			
		||||
Якщо ви вибрали допоміжний модуль, який хочете використовувати, вам потрібно натиснути "**Start Instrumentation**" і ви побачите всі виходи в "**Frida Live Logs**".
 | 
			
		||||
 | 
			
		||||
**Shell**
 | 
			
		||||
 | 
			
		||||
@ -570,12 +573,12 @@ receivers
 | 
			
		||||
```
 | 
			
		||||
**HTTP tools**
 | 
			
		||||
 | 
			
		||||
Коли http-трафік захоплюється, ви можете побачити непривабливий вигляд захопленого трафіку на "**HTTP(S) Traffic**" внизу або більш привабливий вигляд на зеленій кнопці "**Start HTTPTools**". З другого варіанту ви можете **відправити** **захоплені запити** до **проксі** таких як Burp або Owasp ZAP.\
 | 
			
		||||
Коли 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 запити** та шукати вразливості.
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Після виконання динамічного аналізу з MobSF налаштування проксі можуть бути неправильно сконфігуровані, і ви не зможете їх виправити з GUI. Ви можете виправити налаштування проксі, виконавши:
 | 
			
		||||
>
 | 
			
		||||
> ```
 | 
			
		||||
@ -595,7 +598,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
 | 
			
		||||
@ -631,7 +634,7 @@ StaCoAn - це **кросплатформений** інструмент, яки
 | 
			
		||||
 | 
			
		||||
Концепція полягає в тому, що ви перетягуєте файл вашого мобільного додатку (файл .apk або .ipa) на додаток StaCoAn, і він створить для вас візуальний та портативний звіт. Ви можете налаштувати параметри та словники для отримання індивідуального досвіду.
 | 
			
		||||
 | 
			
		||||
Завантажити [остання версію](https://github.com/vincentcox/StaCoAn/releases):
 | 
			
		||||
Завантажити [остання версія](https://github.com/vincentcox/StaCoAn/releases):
 | 
			
		||||
```
 | 
			
		||||
./stacoan
 | 
			
		||||
```
 | 
			
		||||
@ -647,7 +650,7 @@ androbugs.exe -f [APK file]
 | 
			
		||||
 | 
			
		||||
**Androwarn** - це інструмент, основна мета якого полягає в виявленні та попередженні користувача про потенційно шкідливу поведінку, розроблену Android-додатком.
 | 
			
		||||
 | 
			
		||||
Виявлення здійснюється за допомогою **статичного аналізу** байт-коду Dalvik додатка, представленого як **Smali**, з використанням бібліотеки [`androguard`](https://github.com/androguard/androguard).
 | 
			
		||||
Виявлення здійснюється за допомогою **статичного аналізу** байт-коду Dalvik додатку, представленого як **Smali**, з використанням бібліотеки [`androguard`](https://github.com/androguard/androguard).
 | 
			
		||||
 | 
			
		||||
Цей інструмент шукає **поширену поведінку "поганих" додатків**, таких як: ексфільтрація ідентифікаторів телекомунікацій, перехоплення аудіо/відео потоків, модифікація PIM-даних, виконання довільного коду...
 | 
			
		||||
```
 | 
			
		||||
@ -657,7 +660,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
**MARA** - це **M**обільний **A**плікаційний **R**еверс-інжиніринг та **A**наліз Фреймворк. Це інструмент, який об'єднує загальновживані інструменти реверс-інжинірингу та аналізу мобільних додатків, щоб допомогти в тестуванні мобільних додатків на предмет загроз безпеці мобільних додатків OWASP. Його мета - спростити це завдання та зробити його більш зручним для розробників мобільних додатків та фахівців з безпеки.
 | 
			
		||||
**MARA** - це **M**обільний **A**плікаційний **R**еверс-інжиніринг та **A**наліз Фреймворк. Це інструмент, який об'єднує загальновживані інструменти для реверс-інжинірингу та аналізу мобільних додатків, щоб допомогти в тестуванні мобільних додатків на предмет загроз безпеці мобільних додатків OWASP. Його мета - спростити це завдання та зробити його більш зручним для розробників мобільних додатків та фахівців з безпеки.
 | 
			
		||||
 | 
			
		||||
Він здатний:
 | 
			
		||||
 | 
			
		||||
@ -678,13 +681,13 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
 | 
			
		||||
 | 
			
		||||
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
 | 
			
		||||
 | 
			
		||||
З [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** - це інструмент командного рядка з відкритим кодом, який зменшує, оптимізує та обфускує Java код. Він здатний оптимізувати байт-код, а також виявляти та видаляти невикористовувані інструкції. ProGuard є безкоштовним програмним забезпеченням і розповсюджується під ліцензією GNU General Public License, версія 2.
 | 
			
		||||
З [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** - це інструмент командного рядка з відкритим кодом, який зменшує, оптимізує та обфускує Java код. Він здатний оптимізувати байт-код, а також виявляти та видаляти невикористовувані інструкції. ProGuard - це безкоштовне програмне забезпечення, яке розповсюджується під ліцензією GNU General Public License, версія 2.
 | 
			
		||||
 | 
			
		||||
ProGuard розповсюджується як частина Android SDK і запускається під час створення програми в режимі випуску.
 | 
			
		||||
 | 
			
		||||
### [DexGuard](https://www.guardsquare.com/dexguard)
 | 
			
		||||
 | 
			
		||||
Знайдіть покрокову інструкцію для деобфускації apk в [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
 | 
			
		||||
Знайдіть покрокову інструкцію для деобфускації apk на [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
 | 
			
		||||
 | 
			
		||||
(З тієї інструкції) Останній раз, коли ми перевіряли, режим роботи Dexguard був:
 | 
			
		||||
 | 
			
		||||
@ -692,7 +695,7 @@ ProGuard розповсюджується як частина Android SDK і з
 | 
			
		||||
- передати результат класу, що наслідує від FilterInputStream, для його розшифрування;
 | 
			
		||||
- виконати деяку безглузду обфускацію, щоб витратити кілька хвилин часу реверсера;
 | 
			
		||||
- передати розшифрований результат в ZipInputStream, щоб отримати DEX файл;
 | 
			
		||||
- нарешті, завантажити отриманий DEX як ресурс, використовуючи метод `loadDex`.
 | 
			
		||||
- нарешті завантажити отриманий DEX як ресурс, використовуючи метод `loadDex`.
 | 
			
		||||
 | 
			
		||||
### [DeGuard](http://apk-deguard.com)
 | 
			
		||||
 | 
			
		||||
@ -714,7 +717,7 @@ APKiD надає вам інформацію про **те, як був ство
 | 
			
		||||
 | 
			
		||||
### Manual
 | 
			
		||||
 | 
			
		||||
[Прочитайте цей посібник, щоб дізнатися деякі хитрощі про **те, як реверсувати власну обфускацію**](manual-deobfuscation.md)
 | 
			
		||||
[Прочитайте цей посібник, щоб дізнатися кілька трюків про **те, як реверсувати власну обфускацію**](manual-deobfuscation.md)
 | 
			
		||||
 | 
			
		||||
## Labs
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,123 @@
 | 
			
		||||
# Shizuku Privileged API
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
Shizuku - це відкритий сервіс, який **створює привілейований Java процес за допомогою `app_process`** і надає вибрані **API системи Android через Binder**. Оскільки процес запускається з тими ж **UID можливостями `shell`, які використовує ADB**, будь-який додаток (або термінал), що підключається до експортованого інтерфейсу AIDL, може виконувати багато дій, які зазвичай вимагають **`WRITE_SECURE_SETTINGS`, `INSTALL_PACKAGES`, файлового вводу/виводу всередині `/data`,** тощо – **без рутування пристрою**.
 | 
			
		||||
 | 
			
		||||
Типові випадки використання:
 | 
			
		||||
* Аудит безпеки з не рутованого пристрою
 | 
			
		||||
* Видалення непотрібних програм / деблокація системних додатків
 | 
			
		||||
* Збір журналів, ключів Wi-Fi, інформації про процеси та сокети для blue-team/DFIR
 | 
			
		||||
* Автоматизація конфігурації пристрою з кастомних додатків або shell-скриптів
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
## 1. Запуск привілейованого сервісу
 | 
			
		||||
 | 
			
		||||
`moe.shizuku.privileged.api` можна запустити трьома різними способами – результуючий сервіс Binder поводиться однаково в усіх випадках.
 | 
			
		||||
 | 
			
		||||
### 1.1 Безпровідний ADB (Android 11+)
 | 
			
		||||
1. Увімкніть **Опції розробника ➜ Безпровідне налагодження** та спарте пристрій.
 | 
			
		||||
2. У додатку Shizuku виберіть **“Запустити через безпровідне налагодження”** та скопіюйте код спарювання.
 | 
			
		||||
3. Сервіс працює до наступного перезавантаження (сеанси безпровідного налагодження очищуються при завантаженні).
 | 
			
		||||
 | 
			
		||||
### 1.2 USB / локальний ADB однорядковий
 | 
			
		||||
```bash
 | 
			
		||||
adb push start.sh \
 | 
			
		||||
/storage/emulated/0/Android/data/moe.shizuku.privileged.api/
 | 
			
		||||
 | 
			
		||||
# spawn the privileged process
 | 
			
		||||
adb shell sh /storage/emulated/0/Android/data/moe.shizuku.privileged.api/start.sh
 | 
			
		||||
```
 | 
			
		||||
Той самий скрипт можна виконати через **network ADB** з'єднання (`adb connect <IP>:5555`).
 | 
			
		||||
 | 
			
		||||
### 1.3 Пристрої з рутом
 | 
			
		||||
Якщо пристрій вже має рут, виконайте:
 | 
			
		||||
```bash
 | 
			
		||||
su -c sh /data/adb/shizuku/start.sh
 | 
			
		||||
```
 | 
			
		||||
### 1.4 Перевірка, що він працює
 | 
			
		||||
```bash
 | 
			
		||||
adb shell dumpsys activity service moe.shizuku.privileged.api | head
 | 
			
		||||
```
 | 
			
		||||
Успішний старт повертає `Running services (1)` разом з PID привілейованого процесу.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
## 2. Прив'язка з додатку
 | 
			
		||||
Додатки третіх сторін потребують лише наступне в їхньому `AndroidManifest.xml`:
 | 
			
		||||
```xml
 | 
			
		||||
<uses-permission android:name="moe.shizuku.manager.permission.API"/>
 | 
			
		||||
```
 | 
			
		||||
Під час виконання вони отримують зв'язувач:
 | 
			
		||||
```java
 | 
			
		||||
IBinder binder = ShizukuProvider.getBinder();
 | 
			
		||||
IPackageManager pm  = IPackageManager.Stub.asInterface(binder);
 | 
			
		||||
```
 | 
			
		||||
Від цього моменту додаток може викликати будь-який метод, який може викликати користувач **`shell`** – наприклад :
 | 
			
		||||
```java
 | 
			
		||||
pm.installPackage(new Uri("file:///sdcard/app.apk"), null, 0, null);
 | 
			
		||||
Settings.Global.putInt(resolver, Settings.Global.ADB_ENABLED, 1);
 | 
			
		||||
```
 | 
			
		||||
Список з більш ніж **170 додатків, що підтримують Shizuku**, підтримується на [awesome-shizuku](https://github.com/timschneeb/awesome-shizuku).
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
## 3. Rish – підвищена оболонка всередині Termux
 | 
			
		||||
Екран налаштувань Shizuku відкриває **“Використовувати Shizuku в термінальних додатках”**. Увімкнення цього завантажує *rish* (`/data/local/tmp/rish`).
 | 
			
		||||
```bash
 | 
			
		||||
pkg install wget
 | 
			
		||||
wget https://rikka.app/rish/latest -O rish && chmod +x rish
 | 
			
		||||
 | 
			
		||||
# start elevated shell (inherits the binder connection)
 | 
			
		||||
./rish
 | 
			
		||||
whoami   #  ➜  shell
 | 
			
		||||
id       #  uid=2000(shell) gid=2000(shell) groups=... context=u:r:shell:s0
 | 
			
		||||
```
 | 
			
		||||
### 3.1 Корисні команди з оболонки rish
 | 
			
		||||
* Перелік запущених процесів певного пакету:
 | 
			
		||||
```bash
 | 
			
		||||
ps -A | grep com.facebook.katana
 | 
			
		||||
```
 | 
			
		||||
* Перерахунок прослуховуючих сокетів та їх прив'язка до пакетів (наприклад, **CVE-2019-6447 ES File Explorer**):
 | 
			
		||||
```bash
 | 
			
		||||
netstat -tuln
 | 
			
		||||
for pid in $(lsof -nP -iTCP -sTCP:LISTEN -t); do
 | 
			
		||||
printf "%s -> %s\n" "$pid" "$(cat /proc/$pid/cmdline)";
 | 
			
		||||
done
 | 
			
		||||
```
 | 
			
		||||
* Вивантаження журналів кожного додатку:
 | 
			
		||||
```bash
 | 
			
		||||
logcat -d | grep -iE "(error|exception)"
 | 
			
		||||
```
 | 
			
		||||
* Читання збережених облікових даних Wi-Fi (Android 11 +):
 | 
			
		||||
```bash
 | 
			
		||||
cat /data/misc/wifi/WifiConfigStore.xml | grep -i "<ConfigKey>"
 | 
			
		||||
```
 | 
			
		||||
* Масове видалення (приклад):
 | 
			
		||||
```bash
 | 
			
		||||
pm uninstall --user 0 com.miui.weather2
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
## 4. Заходи безпеки / виявлення
 | 
			
		||||
1. Shizuku потребує **привілеїв налагодження ADB**, тому _Опції розробника → USB/Бездротове налагодження_ повинні бути **увімкнені**.
 | 
			
		||||
Організації можуть заблокувати це через MDM або за допомогою `settings put global development_settings_enabled 0`.
 | 
			
		||||
2. Сервіс реєструє себе під назвою `moe.shizuku.privileged.api`.
 | 
			
		||||
Просте `adb shell service list | grep shizuku` (або правило Endpoint Security) виявляє його присутність.
 | 
			
		||||
3. Можливості обмежені тим, що користувач `shell` вже може робити – це **не root**.
 | 
			
		||||
Чутливі API, які вимагають користувача `system` або `root`, все ще недоступні.
 | 
			
		||||
4. Сесії **не переживають перезавантаження**, якщо пристрій не є рутованим, а Shizuku не налаштовано як демон запуску.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
## 5. Пом'якшення
 | 
			
		||||
* Вимкніть USB/Бездротове налагодження на виробничих пристроях.
 | 
			
		||||
* Моніторинг сервісів Binder, які відкривають `moe.shizuku.privileged.api`.
 | 
			
		||||
* Використовуйте політики SELinux (Android enterprise) для блокування інтерфейсу AIDL від неуправляємих додатків.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
## Посилання
 | 
			
		||||
 | 
			
		||||
- [Blog – Shizuku: Unlocking Advanced Android Capabilities Without Root](https://www.mobile-hacker.com/2025/07/14/shizuku-unlocking-advanced-android-capabilities-without-root/)
 | 
			
		||||
- [Shizuku Official Documentation](https://shizuku.rikka.app/)
 | 
			
		||||
- [awesome-shizuku – list of supported apps](https://github.com/timschneeb/awesome-shizuku)
 | 
			
		||||
- [rish shell (privileged reverse-adb shell)](https://github.com/RikkaApps/Shizuku/blob/master/RISH.md)
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user