# Pentesting des applications Android
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? Ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes !
**Perspectives de piratage**\
Engagez-vous avec du contenu qui explore les sensations et les défis du piratage
**Actualités de piratage en temps réel**\
Restez à jour avec le monde du piratage rapide grâce aux actualités et aux informations en temps réel
**Dernières annonces**\
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !
## Bases des applications Android
Il est fortement recommandé de commencer par lire cette page pour connaître les **parties les plus importantes liées à la sécurité Android et les composants les plus dangereux d'une application Android** :
{% content-ref url="android-applications-basics.md" %}
[android-applications-basics.md](android-applications-basics.md)
{% endcontent-ref %}
## ADB (Android Debug Bridge)
C'est l'outil principal dont vous avez besoin pour vous connecter à un appareil Android (émulé ou physique).\
Il vous permet de contrôler votre appareil via **USB** ou **Réseau** depuis un ordinateur, de **copier** des fichiers aller-retour, d'**installer** et de désinstaller des applications, d'exécuter des commandes **shell**, d'effectuer des **sauvegardes**, de lire des **logs** et plus encore.
Jetez un coup d'œil à la liste suivante des [**commandes ADB**](adb-commands.md) pour apprendre comment utiliser adb.
## Smali
Parfois, il est intéressant de **modifier le code de l'application** pour accéder à des **informations cachées** (peut-être des mots de passe bien obfusqués ou des indicateurs). Ensuite, il peut être intéressant de décompiler l'APK, de modifier le code et de le recompiler.\
[**Dans ce tutoriel** vous pouvez **apprendre comment décompiler un APK, modifier le code Smali et recompiler l'APK** avec la nouvelle fonctionnalité](smali-changes.md). Cela peut être très utile comme **alternative pour plusieurs tests pendant l'analyse dynamique** qui vont être présentés. Alors, **gardez toujours à l'esprit cette possibilité**.
## Autres astuces intéressantes
* [Fausser votre emplacement dans le Play Store](spoofing-your-location-in-play-store.md)
* **Télécharger des 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/)
* Extraire l'APK de l'appareil :
```bash
adb shell pm list packages
com.android.insecurebankv2
adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
adb pull /data/app/com.android.insecurebankv2- Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
```
## Analyse statique
Tout d'abord, pour analyser un APK, vous devriez **jeter un coup d'œil au code Java** en utilisant un décompilateur.\
Veuillez [**lire ici pour trouver des informations sur les différents décompilateurs disponibles**](apk-decompilers.md).
### Recherche d'informations intéressantes
En jetant simplement un coup d'œil aux **chaînes de caractères** de l'APK, vous pouvez rechercher des **mots de passe**, des **URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), des clés **API**, du **chiffrement**, des **UUID Bluetooth**, des **jetons** et tout ce qui est intéressant... recherchez même des **backdoors** d'exécution de code ou des backdoors d'authentification (identifiants administrateur codés en dur dans l'application).
**Firebase**
Portez une attention particulière aux **URL Firebase** et vérifiez si elles sont mal configurées. [Plus d'informations sur ce qu'est Firebase et comment l'exploiter ici.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
### Compréhension de base de l'application - Manifest.xml, strings.xml
En utilisant l'un des **décompilateurs** mentionnés [**ici**](apk-decompilers.md), vous pourrez lire le fichier _Manifest.xml_. Vous pouvez également **renommer** le fichier APK avec l'extension **.zip** et le **décompresser**.\
En lisant le **manifeste**, vous pouvez trouver des **vulnérabilités** :
* Tout d'abord, vérifiez si **l'application peut être déboguée**. Un APK de production ne devrait pas l'être (sinon d'autres pourront s'y connecter). Vous pouvez vérifier si une application peut être déboguée en recherchant dans le manifeste l'attribut `debuggable="true"` à l'intérieur de la balise _\formation-software.co.uk `
* **Activités exportées** : Vérifiez les activités exportées dans le manifeste car cela peut être dangereux. Plus tard dans l'analyse dynamique, il sera expliqué comment [vous pouvez exploiter ce comportement](./#exploiting-exported-activities-authorisation-bypass).
* **Fournisseurs de contenu** : Si un fournisseur exporté est exposé, vous pourriez avoir accès/modifier des informations intéressantes. Dans l'analyse dynamique, [vous apprendrez comment les exploiter](./#exploiting-content-providers-accessing-and-manipulating-sensitive-information).
* Vérifiez les configurations des **FileProviders** dans l'attribut `android:name="android.support.FILE_PROVIDER_PATHS"`. [Lisez ici pour en savoir plus sur les FileProviders](./#fileprovider).
* **Services exposés** : Selon ce que le service fait en interne, des vulnérabilités pourraient être exploitées. Dans l'analyse dynamique, [vous apprendrez comment les exploiter](./#exploiting-services).
* **Receveurs de diffusion** : [Vous apprendrez comment les exploiter éventuellement](./#exploiting-broadcast-receivers) lors de l'analyse dynamique.
* **Schéma d'URL** : Lisez le code de l'activité gérant le schéma et recherchez des vulnérabilités dans la gestion de l'entrée de l'utilisateur. Plus d'informations sur [ce qu'est un schéma d'URL ici](./#url-schemes).
* **minSdkVersion**, **targetSDKVersion**, **maxSdkVersion** : Ils indiquent les versions d'Android sur lesquelles l'application fonctionnera. Il est important de les garder à l'esprit car du point de vue de la sécurité, le fait de prendre en charge d'anciennes versions permettra à des versions vulnérables d'Android connues de l'exécuter.
En lisant **resources.arsc/strings.xml**, vous pouvez trouver des informations intéressantes :
* Clés API
* Schémas personnalisés
* Autres informations intéressantes que les développeurs enregistrent dans ce fichier
### Tapjacking
Le **Tapjacking** est une attaque où une **application malveillante** est lancée et **se positionne au-dessus d'une application victime**. Une fois qu'elle obscurcit visiblement l'application victime, son interface utilisateur est conçue de manière à tromper l'utilisateur pour qu'il interagisse avec elle, tout en transmettant l'interaction à l'application victime.\
En effet, cela **empêche l'utilisateur de savoir qu'il effectue réellement des actions sur l'application victime**.
Trouvez plus d'informations ici :
{% content-ref url="tapjacking.md" %}
[tapjacking.md](tapjacking.md)
{% endcontent-ref %}
### Détournement de tâche
Une **activité** avec le **`launchMode`** défini sur **`singleTask` sans aucune `taskAffinity`** définie est vulnérable au détournement de tâche. Cela signifie qu'une **application** peut être installée et si elle est lancée avant l'application réelle, elle peut **détourner la tâche de l'application réelle** (ainsi l'utilisateur interagira avec l'**application malveillante en pensant qu'il utilise la vraie**).
Plus d'informations ici :
{% content-ref url="android-task-hijacking.md" %}
[android-task-hijacking.md](android-task-hijacking.md)
{% endcontent-ref %}
### Stockage de données non sécurisé
**Stockage interne**
Les fichiers **créés** sur le **stockage interne** sont **accessibles** uniquement par l'**application**. Cette protection est mise en œuvre par Android et est suffisante pour la plupart des applications. Mais les développeurs utilisent souvent `MODE_WORLD_READBALE` & `MODE_WORLD_WRITABLE` pour donner accès à ces fichiers à une autre application, mais cela n'empêche pas les autres applications (malveillantes) d'y accéder.\
Lors de l'**analyse statique**, vérifiez l'utilisation de ces **modes**, lors de l'**analyse dynamique**, vérifiez les **autorisations** des fichiers créés (certains d'entre eux peuvent être lisibles/inscriptibles dans le monde entier).\
[Plus d'informations sur cette vulnérabilité et comment la corriger ici.](https://manifestsecurity.com/android-application-security-part-8/)
**Stockage externe**
Les fichiers créés sur le **stockage externe**, tels que les cartes SD, sont **lisibles et inscriptibles à l'échelle mondiale**. Étant donné que le stockage externe peut être supprimé par l'utilisateur et également modifié par n'importe quelle application, vous ne devriez **pas stocker d'informations sensibles en utilisant le stockage externe**.\
Comme pour les données provenant de toute source non fiable, vous devriez **valider les entrées** lors de la manipulation de **données provenant du stockage externe**. Nous vous recommandons vivement de ne pas stocker d'exécutables ou de fichiers de classe sur le stockage externe avant le chargement dynamique. Si votre application récupère des fichiers exécutables à partir du stockage externe, les fichiers doivent être signés et vérifiés cryptographiquement avant le chargement dynamique.\
Informations tirées [d'ici](https://manifestsecurity.com/android-application-security-part-8/).
Le stockage externe peut être **accédé** dans `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
{% hint style="info" %}
### TLS cassé
**Accepter tous les certificats**
Pour une raison quelconque, parfois les développeurs acceptent tous les certificats, même si, par exemple, le nom d'hôte ne correspond pas aux lignes de code suivantes :
```java
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
```
Une bonne façon de tester cela est d'essayer de capturer le trafic en utilisant un proxy comme Burp sans autoriser Burp CA à l'intérieur de l'appareil. Vous pouvez également générer avec Burp un certificat pour un nom d'hôte différent et l'utiliser.
### Cryptographie défaillante
**Mauvais processus de gestion des clés**
Certains développeurs enregistrent des données sensibles dans le stockage local et les chiffrent avec une clé codée en dur/prévisible dans le code. Cela ne devrait pas être fait car une rétro-ingénierie pourrait permettre aux attaquants d'extraire les informations confidentielles.
**Utilisation d'algorithmes non sécurisés et/ou obsolètes**
Les développeurs ne devraient pas utiliser d'algorithmes obsolètes pour effectuer des vérifications d'autorisation, stocker ou envoyer des données. Certains de ces algorithmes sont : RC4, MD4, MD5, SHA1... Si des hachages sont utilisés pour stocker des mots de passe par exemple, des hachages résistants à la force brute devraient être utilisés avec un sel.
### Autres vérifications
* Il est recommandé d'**obfusquer l'APK** pour rendre plus difficile le travail de rétro-ingénierie des attaquants.
* Si l'application est sensible (comme les applications bancaires), elle devrait effectuer ses propres vérifications pour voir si le mobile est rooté et agir en conséquence.
* Si l'application est sensible (comme les applications bancaires), elle devrait vérifier si un émulateur est utilisé.
* Si l'application est sensible (comme les applications bancaires), elle devrait vérifier son intégrité avant de l'exécuter pour vérifier si elle a été modifiée.
* Utilisez [**APKiD**](https://github.com/rednaga/APKiD) pour vérifier quel compilateur/packer/obfuscateur a été utilisé pour construire l'APK.
### Application React Native
Lisez la page suivante pour apprendre comment accéder facilement au code JavaScript des applications React :
{% content-ref url="react-native-application.md" %}
[react-native-application.md](react-native-application.md)
{% endcontent-ref %}
### Applications Xamarin
Lisez la page suivante pour apprendre comment accéder facilement au code C# des applications Xamarin :
{% content-ref url="../xamarin-apps.md" %}
[xamarin-apps.md](../xamarin-apps.md)
{% endcontent-ref %}
### Applications Superpacked
Selon ce [**billet de blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), Superpacked est un méta-algorithme qui compresse le contenu d'une application dans un seul fichier. Le blog parle de la possibilité de créer une application qui décompresse ce type d'applications... et d'une façon plus rapide qui consiste à **exécuter l'application et à récupérer les fichiers décompressés du système de fichiers**.
### Analyse statique automatisée du code
L'outil [**mariana-trench**](https://github.com/facebook/mariana-trench) est capable de trouver des vulnérabilités en analysant le code de l'application. Cet outil contient une série de **sources connues** (qui indiquent à l'outil les endroits où l'entrée est contrôlée par l'utilisateur), des **sinks** (qui indiquent à l'outil les endroits dangereux où une entrée utilisateur malveillante pourrait causer des dommages) et des **règles**. Ces règles indiquent la **combinaison de sources-sinks** qui indique une vulnérabilité.
Avec cette connaissance, **mariana-trench examinera le code et trouvera d'éventuelles vulnérabilités**.
### Fuites de secrets
Une application peut contenir des secrets (clés API, mots de passe, URL cachées, sous-domaines...) à l'intérieur que vous pourriez être en mesure de découvrir. Vous pouvez utiliser un outil tel que [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
### Contourner l'authentification biométrique
{% content-ref url="bypass-biometric-authentication-android.md" %}
[bypass-biometric-authentication-android.md](bypass-biometric-authentication-android.md)
{% endcontent-ref %}
### Autres fonctions intéressantes
* **Exécution de code** : `Runtime.exec(), ProcessBuilder(), code natif:system()`
* **Envoi de SMS** : `sendTextMessage, sendMultipartTestMessage`
* **Fonctions natives** déclarées comme `native` : `public native, System.loadLibrary, System.load`
* [Lisez ceci pour apprendre **comment inverser les fonctions natives**](reversing-native-libraries.md)
### **Autres astuces**
{% content-ref url="content-protocol.md" %}
[content-protocol.md](content-protocol.md)
{% endcontent-ref %}
***
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes !
**Hacking Insights**\
Engagez-vous avec du contenu qui explore les sensations et les défis du piratage
**Actualités de piratage en temps réel**\
Restez à jour avec le monde du piratage rapide grâce aux actualités et aux informations en temps réel
**Dernières annonces**\
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !
***
## Analyse dynamique
> Tout d'abord, vous avez besoin d'un environnement où vous pouvez installer l'application et tout l'environnement (certificat Burp CA, Drozer et Frida principalement). Par conséquent, un appareil rooté (émulé ou non) est extrêmement recommandé.
### Analyse dynamique en ligne
Vous pouvez créer un **compte gratuit** sur : [https://appetize.io/](https://appetize.io). Cette plateforme vous permet de **télécharger** et **exécuter** des APK, il est donc utile de voir comment un APK se comporte.
Vous pouvez même **voir les journaux de votre application** sur le web et vous connecter via **adb**.
![](<../../.gitbook/assets/image (60).png>)
Grâce à la connexion ADB, vous pouvez utiliser **Drozer** et **Frida** à l'intérieur des émulateurs.
### Analyse dynamique locale
#### Utilisation d'un émulateur
* [**Android Studio**](https://developer.android.com/studio) (Vous pouvez créer des appareils **x86** et **arm**, et selon [**ceci** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**les dernières versions x86** **supportent les bibliothèques ARM** sans avoir besoin d'un émulateur ARM lent).
* Apprenez à le configurer sur cette page :
{% content-ref url="avd-android-virtual-device.md" %}
[avd-android-virtual-device.md](avd-android-virtual-device.md)
{% endcontent-ref %}
* [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Version gratuite :** Personal Edition, vous devez créer un compte. _Il est recommandé de **télécharger** la version **AVEC**_ _**VirtualBox** pour éviter les erreurs potentielles._)
* [**Nox**](https://es.bignox.com) (Gratuit, mais ne prend pas en charge Frida ou Drozer).
{% hint style="info" %}
Lors de la création d'un nouvel émulateur sur n'importe quelle plateforme, rappelez-vous que plus l'écran est grand, plus l'émulateur sera lent. Choisissez donc de petits écrans si possible.
{% endhint %}
Pour **installer les services Google** (comme AppStore) dans Genymotion, vous devez cliquer sur le bouton marqué en rouge sur l'image suivante :
![](<../../.gitbook/assets/image (200) (1).png>)
De plus, notez que dans la **configuration de la machine virtuelle Android dans Genymotion**, vous pouvez sélectionner le mode **Bridge Network** (ceci sera utile si vous devez vous connecter à la machine virtuelle Android à partir d'une autre machine virtuelle avec les outils).
#### Utiliser un appareil physique
Vous devez activer les options de **débogage** et il serait bien si vous pouvez le **rooter** :
1. **Paramètres**.
2. (À partir d'Android 8.0) Sélectionnez **Système**.
3. Sélectionnez **À propos du téléphone**.
4. Appuyez 7 fois sur **Numéro de build**.
5. Revenez en arrière et vous trouverez les **Options pour les développeurs**.
> Une fois que vous avez installé l'application, la première chose à faire est de l'essayer et d'enquêter sur ce qu'elle fait, comment elle fonctionne et de vous familiariser avec elle.\
> Je vous suggère de **réaliser cette analyse dynamique initiale en utilisant l'analyse dynamique MobSF + pidcat**, afin que nous puissions **apprendre comment l'application fonctionne** tandis que MobSF **capture** de nombreuses **données intéressantes** que vous pourrez examiner ultérieurement.
### Fuite de données involontaire
**Journalisation**
Souvent, les développeurs laissent des informations de débogage accessibles au public. Ainsi, toute application disposant de l'autorisation `READ_LOGS` peut **accéder à ces journaux** et obtenir des informations sensibles.\
Lors de la navigation dans l'application, utilisez [**pidcat**](https://github.com/JakeWharton/pidcat)_(Recommandé, il est plus facile à utiliser et à lire)_ ou [adb logcat](adb-commands.md#logcat) pour lire les journaux créés et **rechercher des informations sensibles**.
{% hint style="warning" %}
Notez que, à partir de la version **Android 4.0**, **les applications ne peuvent accéder qu'à leurs propres journaux**. Les applications ne peuvent donc pas accéder aux journaux d'autres applications.\
Quoi qu'il en soit, il est toujours recommandé de **ne pas enregistrer d'informations sensibles**.
{% endhint %}
**Mise en cache du presse-papiers**
Android fournit un framework basé sur le presse-papiers pour fournir la fonction de copier-coller dans les applications Android. Mais cela crée un problème sérieux lorsque certaines **autres applications** peuvent **accéder** au **presse-papiers** qui contient des données sensibles. La fonction de **copier-coller** devrait être **désactivée** pour les parties **sensibles** de l'application. Par exemple, désactivez la copie des détails de la carte de crédit.
**Journaux de plantage**
Si une application **plante** pendant son exécution et qu'elle **enregistre des journaux** quelque part, ces journaux peuvent être utiles à un attaquant, surtout dans les cas où l'application Android ne peut pas être rétro-ingénierée. Dans ce cas, évitez de créer des journaux lorsque l'application plante et si les journaux sont envoyés via le réseau, assurez-vous qu'ils sont envoyés via un canal SSL.\
En tant que pentester, **essayez de jeter un coup d'œil à ces journaux**.
**Données d'analyse envoyées à des tiers**
La plupart des applications utilisent d'autres services dans leur application, comme Google Adsense, mais parfois elles **laissent fuir des données sensibles** ou des données qui ne sont pas nécessaires à envoyer à ce service. Cela peut se produire parce que le développeur n'a pas implémenté correctement la fonctionnalité. Vous pouvez **vérifier en interceptant le trafic** de l'application et voir si des données sensibles sont envoyées à des tiers ou non.
### Bases de données SQLite
La plupart des applications utiliseront des **bases de données SQLite internes** pour enregistrer des informations. Lors du pentest, jetez un **coup d'œil** aux **bases de données** créées, aux noms des **tables** et des **colonnes** et à toutes les **données** enregistrées, car vous pourriez trouver des **informations sensibles** (ce qui constituerait une vulnérabilité).\
Les bases de données doivent être situées dans `/data/data/nom.du.package/databases` comme `/data/data/com.mwr.example.sieve/databases`
Si la base de données enregistre des informations confidentielles et est **chiffrée**, mais que vous pouvez **trouver** le **mot de passe** à l'intérieur de l'application, c'est toujours une **vulnérabilité**.
Énumérez les tables en utilisant `.tables` et énumérez les colonnes des tables en utilisant `.schema `
### Drozer (Exploiter les activités, les fournisseurs de contenu et les services exportés)
**Drozer** vous permet de **prendre le rôle d'une application Android** et d'interagir avec d'autres applications. Il peut faire **tout ce qu'une application installée peut faire**, comme utiliser le mécanisme de communication inter-processus (IPC) d'Android et interagir avec le système d'exploitation sous-jacent. À partir du [Guide Drozer](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf).\
Drozer est un outil utile pour **exploiter les activités exportées, les services exportés et les fournisseurs de contenu**, comme vous le verrez dans les sections suivantes.
### Exploiter les activités exportées
[**Lisez ceci si vous voulez vous rappeler ce qu'est une activité Android.**](android-applications-basics.md#launcher-activity-and-other-activities)\
Rappelez-vous également que le code d'une activité commence par la méthode `onCreate`.
**Contournement de l'autorisation**
Lorsqu'une activité est exportée, vous pouvez invoquer son écran à partir d'une application externe. Par conséquent, si une activité contenant des **informations sensibles** est **exportée**, vous pourriez **contourner** les **mécanismes d'authentification** pour y accéder.\
[**Apprenez comment exploiter les activités exportées avec Drozer.**](drozer-tutorial/#activities)
Vous pouvez également démarrer une activité exportée depuis adb :
* Le nom du package est com.example.demo
* Le nom de l'activité exportée est com.example.test.MainActivity
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
**REMARQUE**: MobSF détectera comme malveillante l'utilisation de _**singleTask/singleInstance**_ en tant que `android:launchMode` dans une activité, mais en raison de [ceci](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), cela semble être dangereux uniquement sur les anciennes versions (versions d'API < 21).
{% hint style="info" %}
Notez qu'une contournement d'autorisation n'est pas toujours une vulnérabilité, cela dépend de la façon dont le contournement fonctionne et des informations exposées.
{% endhint %}
**Fuite d'informations sensibles**
**Les activités peuvent également renvoyer des résultats**. Si vous parvenez à trouver une activité exportée et non protégée appelant la méthode **`setResult`** et **renvoyant des informations sensibles**, il y a une fuite d'informations sensibles.
#### Tapjacking
Si le tapjacking n'est pas empêché, vous pouvez abuser de l'activité exportée pour faire en sorte que l'**utilisateur effectue des actions inattendues**. Pour plus d'informations sur [**ce qu'est le Tapjacking, suivez le lien**](./#tapjacking).
### Exploitation des fournisseurs de contenu - Accès et manipulation d'informations sensibles
[**Lisez ceci si vous voulez vous rappeler ce qu'est un fournisseur de contenu.**](android-applications-basics.md#content-provider)\
Les fournisseurs de contenu sont essentiellement utilisés pour **partager des données**. Si une application dispose de fournisseurs de contenu disponibles, vous pourrez peut-être **extraire des données sensibles** à partir d'eux. Il est également intéressant de tester les **injections SQL** et les **traversées de chemin** possibles, car elles pourraient être vulnérables.\
[**Apprenez comment exploiter les fournisseurs de contenu avec Drozer.**](drozer-tutorial/#content-providers)
### **Exploitation des services**
[**Lisez ceci si vous voulez vous rappeler ce qu'est un service.**](android-applications-basics.md#services)\
Rappelez-vous que les actions d'un service commencent dans la méthode `onStartCommand`.
Un service est essentiellement quelque chose qui **peut recevoir des données**, les **traiter** et **renvoyer** (ou non) une réponse. Par conséquent, si une application exporte certains services, vous devriez **vérifier** le **code** pour comprendre ce qu'il fait et le **tester** **dynamiquement** pour extraire des informations confidentielles, contourner les mesures d'authentification...\
[**Apprenez comment exploiter les services avec Drozer.**](drozer-tutorial/#services)
### **Exploitation des récepteurs de diffusion**
[**Lisez ceci si vous voulez vous rappeler ce qu'est un récepteur de diffusion.**](android-applications-basics.md#broadcast-receivers)\
Rappelez-vous que les actions d'un récepteur de diffusion commencent dans la méthode `onReceive`.
Un récepteur de diffusion attendra un type de message. Selon la façon dont le récepteur gère le message, il pourrait être vulnérable.\
[**Apprenez comment exploiter les récepteurs de diffusion avec Drozer.**](./#exploiting-broadcast-receivers)
### **Exploitation des schémas / liens profonds**
Vous pouvez rechercher des liens profonds manuellement, en utilisant des outils comme MobSF ou des scripts comme [celui-ci](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
Vous pouvez **ouvrir** un **schéma** déclaré en utilisant **adb** ou un **navigateur**:
{% code overflow="wrap" %}
```bash
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
```
{% endcode %}
_Notez que vous pouvez **omettre le nom du package** et le mobile appellera automatiquement l'application qui devrait ouvrir ce lien._
{% code overflow="wrap" %}
```markup
Click mewith alternative
```
{% endcode %}
**Code exécuté**
Pour trouver le **code qui sera exécuté dans l'application**, allez dans l'activité appelée par le lien profond et recherchez la fonction **`onNewIntent`**.
![](<../../.gitbook/assets/image (436) (1) (1) (1).png>)
**Informations sensibles**
Chaque fois que vous trouvez un lien profond, vérifiez qu'il ne reçoit pas de données sensibles (comme des mots de passe) via les paramètres d'URL, car toute autre application pourrait **usurper le lien profond et voler ces données !**
**Paramètres dans le chemin**
Vous devez également vérifier si un lien profond utilise un paramètre dans le chemin de l'URL, par exemple : `https://api.example.com/v1/users/{username}`, dans ce cas, vous pouvez forcer une traversée de chemin en accédant à quelque chose comme : `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
Notez que si vous trouvez les bons points de terminaison à l'intérieur de l'application, vous pourriez être en mesure de provoquer une **redirection ouverte** (si une partie du chemin est utilisée comme nom de domaine), une **prise de contrôle de compte** (si vous pouvez modifier les détails des utilisateurs sans jeton CSRF et que le point de terminaison vulnérable utilise la méthode correcte) et toute autre vulnérabilité. Plus d'informations à ce sujet [ici](http://dphoeniixx.com/2020/12/13-2/).
**Plus d'exemples**
Un [rapport intéressant de bug bounty](https://hackerone.com/reports/855618) sur les liens (_/.well-known/assetlinks.json_).
### Protection insuffisante de la couche de transport
* **Absence d'inspection de certificat :** L'application Android ne parvient pas à vérifier l'identité du certificat qui lui est présenté. La plupart des applications ignorent les avertissements et acceptent n'importe quel certificat auto-signé présenté. Certaines applications passent plutôt le trafic par une connexion HTTP.
* **Négociation de poignée de main faible :** L'application et le serveur effectuent une poignée de main SSL/TLS, mais utilisent une suite de chiffrement non sécurisée qui est vulnérable aux attaques de l'homme du milieu (MITM). Ainsi, tout attaquant peut facilement décrypter cette connexion.
* **Fuite d'informations de confidentialité :** La plupart du temps, il arrive que les applications effectuent une authentification via un canal sécurisé, mais toutes les autres connexions se font via un canal non sécurisé. Cela n'ajoute pas de sécurité à l'application car les données sensibles restantes, telles que les cookies de session ou les données utilisateur, peuvent être interceptées par un utilisateur malveillant.
Parmi les 3 scénarios présentés, nous allons discuter de **comment vérifier l'identité du certificat**. Les 2 autres scénarios dépendent de la **configuration TLS** du serveur et de l'envoi ou non de données non chiffrées par l'application. Le testeur de pénétration doit vérifier par lui-même la configuration TLS du serveur ([ici](../../network-services-pentesting/pentesting-web/#ssl-tls-vulnerabilites)) et détecter si des **informations confidentielles sont envoyées par un canal non chiffré/vulnérable**.\
Plus d'informations sur la découverte et la correction de ce type de vulnérabilités [**ici**](https://manifestsecurity.com/android-application-security-part-10/).
**Épinglage SSL**
Par défaut, lors de l'établissement d'une connexion SSL, le client (application Android) vérifie que le certificat du serveur a une chaîne de confiance vérifiable remontant à un certificat de confiance (racine) et correspond au nom d'hôte demandé. Cela pose un problème d'**attaques de l'homme du milieu (MITM)**.\
Dans l'épinglage de certificat, une application Android contient elle-même le certificat du serveur et ne transmet les données que si le même certificat est présenté.\
Il est recommandé d'**appliquer l'épinglage SSL** pour les sites où des informations sensibles vont être envoyées.
### Inspection du trafic HTTP
Tout d'abord, vous devez (devez) **installer le certificat** de l'**outil proxy** que vous allez utiliser, probablement Burp. Si vous n'installez pas le certificat CA de l'outil proxy, vous ne verrez probablement pas le trafic chiffré dans le proxy.\
**Veuillez,** [**lire ce guide pour apprendre comment installer un certificat CA personnalisé**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)**.**
Pour les applications ciblant **API Level 24+**, il ne suffit pas d'installer le certificat CA de Burp sur l'appareil. Pour contourner cette nouvelle protection, vous devez modifier le fichier de configuration de la sécurité réseau. Ainsi, vous pouvez modifier ce fichier pour autoriser votre certificat CA ou vous pouvez [**lire cette page pour un tutoriel sur la façon de forcer l'application à accepter à nouveau tous les certificats installés sur l'appareil**](make-apk-accept-ca-certificate.md).
**Épinglage SSL**
Nous avons déjà discuté de ce qu'est l'épinglage SSL juste 2 paragraphes plus haut. Lorsqu'il est implémenté dans une application, vous devrez le contourner pour inspecter le trafic HTTPS ou vous ne le verrez pas.\
Voici quelques options que j'ai utilisées pour contourner cette protection :
* Modifier automatiquement l'**apk** pour contourner l'épinglage SSL avec [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Le meilleur avantage de cette option est que vous n'avez pas besoin de root pour contourner l'épinglage SSL, mais vous devrez supprimer l'application et réinstaller la nouvelle, et cela ne fonctionnera pas toujours.
* Vous pouvez utiliser **Frida** (discuté ci-dessous) pour contourner cette protection. Voici un guide pour utiliser 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/)
* Vous pouvez également essayer de contourner automatiquement l'épinglage SSL en utilisant [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
* Vous pouvez également essayer de contourner automatiquement l'épinglage SSL en utilisant l'analyse dynamique de **MobSF** (expliquée ci-dessous)
* Si vous pensez toujours qu'il y a du trafic que vous ne capturez pas, vous pouvez essayer de **rediriger le trafic vers Burp en utilisant iptables**. Lisez ce blog : [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
**Vulnérabilités Web courantes**
Notez qu'à cette étape, vous devez rechercher des vulnérabilités Web courantes. Beaucoup d'informations sur les vulnérabilités Web peuvent être trouvées dans ce livre, donc je ne vais pas les mentionner ici.
### Frida
Boîte à outils d'instrumentation dynamique pour les développeurs, les reverse-engineers et les chercheurs en sécurité. En savoir plus sur [www.frida.re](https://www.frida.re).\
**C'est incroyable, vous pouvez accéder à une application en cours d'exécution et accrocher des méthodes en temps réel pour changer le comportement, changer les valeurs, extraire des valeurs, exécuter un code différent...**\
**Si vous voulez tester les applications Android, vous devez savoir comment utiliser Frida.**
**Apprenez à utiliser Frida :** [**Tutoriel Frida**](frida-tutorial/)\
**Quelques "GUI" pour les actions avec Frida :** [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)\
**Quelques autres abstractions basées sur Frida :** [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)\
**Vous pouvez trouver quelques scripts Frida impressionnants ici :** [**https://codeshare.frida.re/**](https://codeshare.frida.re)
### **Dump de mémoire - Fridump**
Vérifiez si l'application stocke des informations sensibles dans la mémoire qu'elle ne devrait pas stocker, comme des mots de passe ou des mnémoniques.
En utilisant [**Fridump3**](https://github.com/rootbsd/fridump3), vous pouvez effectuer un dump de la mémoire de l'application avec :
```bash
# With PID
python3 fridump3.py -u
# With name
frida-ps -Uai
python3 fridump3.py -u ""
```
Cela va vider la mémoire dans le dossier ./dump, et là vous pouvez utiliser grep avec quelque chose comme :
{% code overflow="wrap" %}
```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]+$"
```
{% endcode %}
### **Données sensibles dans le Keystore**
Dans Android, le Keystore est le meilleur endroit pour stocker des données sensibles, cependant, avec suffisamment de privilèges, il est toujours **possible d'y accéder**. Comme les applications ont tendance à stocker ici des **données sensibles en texte clair**, les tests de pénétration doivent les vérifier, car un utilisateur root ou une personne ayant un accès physique à l'appareil pourrait voler ces données.
Même si une application stocke des données dans le keystore, les données doivent être chiffrées.
Pour accéder aux données à l'intérieur du keystore, vous pouvez utiliser ce script Frida : [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
```bash
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
```
### **Contournement des empreintes digitales/biométriques**
En utilisant le script Frida suivant, il est possible de **contourner l'authentification par empreinte digitale** que les applications Android peuvent effectuer afin de **protéger certaines zones sensibles :**
{% code overflow="wrap" %}
```bash
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f
```
{% endcode %}
### **Images d'arrière-plan**
Lorsque vous mettez une application en arrière-plan, Android stocke une **capture d'écran de l'application** afin que lorsqu'elle revient à l'avant-plan, elle commence à charger l'image avant l'application, donnant l'impression que l'application a été chargée plus rapidement.
Cependant, si cette capture d'écran contient des **informations sensibles**, une personne ayant accès à la capture d'écran pourrait **voler ces informations** (notez que vous avez besoin des droits root pour y accéder).
Les captures d'écran sont généralement stockées dans le répertoire : **`/data/system_ce/0/snapshots`**
Android propose un moyen de **prévenir la capture d'écran en définissant le paramètre de mise en page FLAG\_SECURE**. En utilisant ce drapeau, le contenu de la fenêtre est considéré comme sécurisé, ce qui empêche son apparition dans les captures d'écran ou sa visualisation sur des écrans non sécurisés.
```bash
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
```
### **Analyseur d'application Android**
Cet outil peut vous aider à gérer différents outils lors de l'analyse dynamique : [https://github.com/NotSoSecure/android\_application\_analyzer](https://github.com/NotSoSecure/android\_application\_analyzer)
### Injection d'intent
Cette vulnérabilité ressemble à **Open Redirect dans la sécurité web**. Étant donné que la classe `Intent` est `Parcelable`, **les objets appartenant à cette classe** peuvent être **transmis** en tant que **données supplémentaires** dans un autre objet `Intent`.\
De nombreux développeurs utilisent cette **fonctionnalité** et créent des **composants proxy** (activités, récepteurs de diffusion et services) qui **prennent un Intent intégré et le transmettent à des méthodes dangereuses** telles que `startActivity(...)`, `sendBroadcast(...)`, etc.\
C'est dangereux car **un attaquant peut forcer l'application à lancer un composant non exporté qui ne peut pas être lancé directement depuis une autre application**, ou à accorder à l'attaquant l'accès à ses fournisseurs de contenu. **`WebView`** change parfois également une **URL d'une chaîne en un objet `Intent`**, en utilisant la méthode `Intent.parseUri(...)`, et le transmet à `startActivity(...)`.
### Injections côté client Android et autres
Vous connaissez probablement ce type de vulnérabilités sur le Web. Vous devez être particulièrement prudent avec ces vulnérabilités dans une application Android :
* **Injection SQL :** Lorsque vous travaillez avec des requêtes dynamiques ou des Content-Providers, assurez-vous d'utiliser des requêtes paramétrées.
* **Injection JavaScript (XSS) :** Vérifiez que la prise en charge de JavaScript et des plugins est désactivée pour tous les WebViews (désactivée par défaut). [Plus d'informations ici](webview-attacks.md#javascript-enabled).
* **Inclusion de fichiers locaux :** Vérifiez que l'accès au système de fichiers est désactivé pour tous les WebViews (activé par défaut) `(webview.getSettings().setAllowFileAccess(false);)`. [Plus d'informations ici](webview-attacks.md#javascript-enabled).
* **Cookies persistants** : Dans plusieurs cas, lorsque l'application Android termine la session, le cookie n'est pas révoqué ou il peut même être enregistré sur le disque.
* [**Drapeau de sécurité** dans les cookies](../../pentesting-web/hacking-with-cookies/#cookies-flags)
***
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes !
**Perspectives de piratage**\
Engagez-vous avec du contenu qui explore les sensations et les défis du piratage.
**Actualités de piratage en temps réel**\
Restez à jour avec le monde du piratage rapide grâce aux actualités et aux informations en temps réel.
**Dernières annonces**\
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme.
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !
## Analyse automatique
### [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)
**Analyse statique**
![](<../../.gitbook/assets/image (61).png>)
**Évaluation des vulnérabilités de l'application** à l'aide d'une interface web conviviale. Vous pouvez également effectuer une analyse dynamique (mais vous devez préparer l'environnement).
```bash
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
```
Notez que MobSF peut analyser les applications **Android** (apk), **IOS** (ipa) et **Windows** (apx) (_les applications Windows doivent être analysées à partir d'un MobSF installé sur un hôte Windows_).\
De plus, si vous créez un fichier **ZIP** avec le code source d'une application **Android** ou **IOS** (allez dans le dossier racine de l'application, sélectionnez tout et créez un fichier ZIP), il pourra également l'analyser.
MobSF vous permet également de **comparer/différer** les analyses et d'intégrer **VirusTotal** (vous devrez définir votre clé API dans _MobSF/settings.py_ et l'activer : `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). Vous pouvez également définir `VT_UPLOAD` sur `False`, alors le **hash** sera **téléchargé** au lieu du fichier.
### Analyse dynamique assistée avec MobSF
MobSF peut également être très utile pour l'**analyse dynamique** sur Android, mais dans ce cas, vous devrez installer MobSF et **genymotion** sur votre hôte (une machine virtuelle ou Docker ne fonctionnera pas). _Remarque : Vous devez **d'abord démarrer une machine virtuelle dans genymotion** et **ensuite MobSF**._\
L'analyseur dynamique de MobSF peut :
* **Extraire les données de l'application** (URL, journaux, presse-papiers, captures d'écran réalisées par vous, captures d'écran réalisées par "**Exported Activity Tester**", e-mails, bases de données SQLite, fichiers XML et autres fichiers créés). Tout cela est fait automatiquement, sauf pour les captures d'écran, vous devez appuyer lorsque vous souhaitez une capture d'écran ou vous devez appuyer sur "**Exported Activity Tester**" pour obtenir des captures d'écran de toutes les activités exportées.
* Capturer le **trafic HTTPS**
* Utiliser **Frida** pour obtenir des **informations en temps réel**
À partir des versions d'Android supérieures à 5, il démarrera automatiquement Frida et définira les paramètres **proxy** globaux pour capturer le trafic. Il ne capturera le trafic que de l'application testée.
**Frida**
Par défaut, il utilisera également certains scripts Frida pour **contourner la vérification de l'authenticité SSL**, la **détection de root** et la **détection de débogueur**, ainsi que pour **surveiller les API intéressantes**.\
MobSF peut également **appeler des activités exportées**, capturer des **captures d'écran** et les **enregistrer** pour le rapport.
Pour **démarrer** les tests dynamiques, appuyez sur le bouton vert : "**Start Instrumentation**". Appuyez sur "**Frida Live Logs**" pour voir les journaux générés par les scripts Frida et sur "**Live API Monitor**" pour voir toutes les invocations des méthodes accrochées, les arguments passés et les valeurs retournées (cela apparaîtra après avoir appuyé sur "Start Instrumentation").\
MobSF vous permet également de charger vos propres **scripts Frida** (pour envoyer les résultats de vos scripts Frida à MobSF, utilisez la fonction `send()`). Il dispose également de **plusieurs scripts pré-écrits** que vous pouvez charger (vous pouvez en ajouter d'autres dans `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), il vous suffit de les **sélectionner**, d'appuyer sur "**Load**" et d'appuyer sur "**Start Instrumentation**" (vous pourrez voir les journaux de ces scripts dans "**Frida Live Logs**").
![](<../../.gitbook/assets/image (215).png>)
De plus, vous disposez de certaines fonctionnalités auxiliaires de Frida :
* **Énumérer les classes chargées** : cela affichera toutes les classes chargées
* **Capturer les chaînes de caractères** : cela affichera toutes les chaînes de caractères capturées lors de l'utilisation de l'application (très bruyant)
* **Capturer les comparaisons de chaînes de caractères** : cela pourrait être très utile. Cela affichera les 2 chaînes de caractères comparées et si le résultat était vrai ou faux.
* **Énumérer les méthodes de classe** : indiquez le nom de la classe (comme "java.io.File") et cela affichera toutes les méthodes de la classe.
* **Rechercher un modèle de classe** : recherche de classes par motif
* **Tracer les méthodes de classe** : **tracer** une **classe entière** (voir les entrées et sorties de toutes les méthodes de la classe). N'oubliez pas que par défaut, MobSF trace plusieurs méthodes intéressantes de l'API Android.
Une fois que vous avez sélectionné le module auxiliaire que vous souhaitez utiliser, vous devez appuyer sur "**Start Intrumentation**" et vous verrez toutes les sorties dans "**Frida Live Logs**".
**Shell**
Mobsf vous propose également une interface de commande avec quelques commandes **adb**, des commandes **MobSF** et des commandes **shell** courantes en bas de la page d'analyse dynamique. Quelques commandes intéressantes :
```bash
help
shell ls
activities
exported_activities
services
receivers
```
**Outils HTTP**
Lorsque le trafic http est capturé, vous pouvez voir une vue peu attrayante du trafic capturé sur le bouton "**HTTP(S) Traffic**" en bas ou une vue plus agréable sur le bouton vert "**Start HTTPTools**". À partir de la deuxième option, vous pouvez **envoyer** les **requêtes capturées** vers des **proxies** tels que Burp ou Owasp ZAP.\
Pour ce faire, _allumez Burp -->_ _désactivez Intercept --> dans MobSB HTTPTools, sélectionnez la requête_ --> appuyez sur "**Send to Fuzzer**" --> _sélectionnez l'adresse du proxy_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
Une fois que vous avez terminé l'analyse dynamique avec MobSF, vous pouvez appuyer sur "**Start Web API Fuzzer**" pour **fuzzer les requêtes http** et rechercher des vulnérabilités.
{% hint style="info" %}
Après avoir effectué une analyse dynamique avec MobSF, les paramètres du proxy peuvent être mal configurés et vous ne pourrez pas les corriger depuis l'interface graphique. Vous pouvez corriger les paramètres du proxy en effectuant les étapes suivantes :
```
adb shell settings put global http_proxy :0
```
{% endhint %}
### Analyse dynamique assistée avec Inspeckage
Vous pouvez obtenir l'outil depuis [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\
Cet outil utilise des **Hooks** pour vous informer de **ce qui se passe dans l'application** pendant que vous effectuez une **analyse dynamique**.
{% content-ref url="inspeckage-tutorial.md" %}
[inspeckage-tutorial.md](inspeckage-tutorial.md)
{% endcontent-ref %}
### [Yaazhini](https://www.vegabird.com/yaazhini/)
C'est un **excellent outil pour effectuer une analyse statique avec une interface graphique**
![](<../../.gitbook/assets/image (527).png>)
### [Qark](https://github.com/linkedin/qark)
Cet outil est conçu pour rechercher plusieurs **vulnérabilités de sécurité liées aux applications Android**, que ce soit dans le **code source** ou dans les **APK empaquetés**. L'outil est également **capable de créer un APK déployable "Proof-of-Concept"** et des **commandes ADB** pour exploiter certaines des vulnérabilités trouvées (activités exposées, intents, tapjacking...). Comme avec Drozer, il n'est pas nécessaire de rooter l'appareil de test.
```bash
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java
```
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
* Affiche tous les fichiers extraits pour une référence facile
* Décompile automatiquement les fichiers APK au format Java et Smali
* Analyse AndroidManifest.xml pour les vulnérabilités et comportements courants
* Analyse statique du code source pour les vulnérabilités et comportements courants
* Informations sur l'appareil
* Intents
* Exécution de commandes
* Références SQLite
* Références de journalisation
* Fournisseurs de contenu
* Récepteurs de diffusion
* Références de service
* Références de fichiers
* Références de cryptographie
* Secrets codés en dur
* URL
* Connexions réseau
* Références SSL
* Références WebView
```
reverse-apk relative/path/to/APP.apk
```
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
SUPER est une application en ligne de commande qui peut être utilisée sous Windows, MacOS X et Linux pour analyser les fichiers _.apk_ à la recherche de vulnérabilités. Elle le fait en décompressant les APK et en appliquant une série de règles pour détecter ces vulnérabilités.
Toutes les règles sont regroupées dans un fichier `rules.json`, et chaque entreprise ou testeur peut créer ses propres règles pour analyser ce dont il a besoin.
Téléchargez les derniers binaires depuis la [page de téléchargement](https://superanalyzer.rocks/download.html)
```
super-analyzer {apk_file}
```
### [StaCoAn](https://github.com/vincentcox/StaCoAn)
![](<../../.gitbook/assets/image (62).png>)
StaCoAn est un outil **multiplateforme** qui aide les développeurs, les chasseurs de primes et les hackers éthiques à effectuer une [analyse statique du code](https://en.wikipedia.org/wiki/Static\_program\_analysis) sur les applications mobiles\*.
Le concept est que vous faites glisser et déposez votre fichier d'application mobile (un fichier .apk ou .ipa) sur l'application StaCoAn et elle générera un rapport visuel et portable pour vous. Vous pouvez ajuster les paramètres et les listes de mots pour obtenir une expérience personnalisée.
Téléchargez la [dernière version](https://github.com/vincentcox/StaCoAn/releases) :
```
./stacoan
```
### [AndroBugs](https://github.com/AndroBugs/AndroBugs\_Framework)
AndroBugs Framework est un système d'analyse de vulnérabilités Android qui aide les développeurs ou les hackers à trouver des vulnérabilités de sécurité potentielles dans les applications Android.\
[Versions Windows](https://github.com/AndroBugs/AndroBugs\_Framework/releases)
```
python androbugs.py -f [APK file]
androbugs.exe -f [APK file]
```
### [Androwarn](https://github.com/maaaaz/androwarn)
**Androwarn** est un outil dont le principal objectif est de détecter et avertir l'utilisateur des comportements potentiellement malveillants développés par une application Android.
La détection est effectuée par l'analyse statique du bytecode Dalvik de l'application, représenté sous forme de **Smali**, avec la bibliothèque [`androguard`](https://github.com/androguard/androguard).
Cet outil recherche les comportements courants des applications "mauvaises" tels que : l'exfiltration des identifiants de téléphonie, l'interception des flux audio/vidéo, la modification des données PIM, l'exécution de code arbitraire...
```
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
```
### [Cadre MARA](https://github.com/xtiankisutsa/MARA_Framework)
![](<../../.gitbook/assets/image (81).png>)
**MARA** est un cadre d'analyse et de rétro-ingénierie d'applications mobiles. C'est un outil qui regroupe des outils couramment utilisés pour la rétro-ingénierie et l'analyse d'applications mobiles, afin d'aider à tester les applications mobiles contre les menaces de sécurité mobiles de l'OWASP. Son objectif est de rendre cette tâche plus facile et plus conviviale pour les développeurs d'applications mobiles et les professionnels de la sécurité.
Il est capable de :
* Extraire du code Java et Smali à l'aide de différents outils
* Analyser les APK à l'aide de : [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
* Extraire des informations privées de l'APK à l'aide d'expressions régulières.
* Analyser le Manifeste.
* Analyser les domaines trouvés à l'aide de : [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) et [whatweb](https://github.com/urbanadventurer/WhatWeb)
* Déobfusquer l'APK via [apk-deguard.com](http://www.apk-deguard.com)
### Koodous
Utile pour détecter les logiciels malveillants : [https://koodous.com/](https://koodous.com)
## Obfuscation/Déobfuscation du code
Notez que selon le service et la configuration que vous utilisez pour obfusquer le code. Les secrets peuvent être obfusqués ou non.
### [ProGuard](https://en.wikipedia.org/wiki/ProGuard\_\(software\))
**ProGuard** est un outil en ligne de commande open source qui réduit la taille, optimise et obfusque le code Java. Il est capable d'optimiser le bytecode ainsi que de détecter et supprimer les instructions inutilisées. ProGuard est un logiciel gratuit distribué sous la licence publique générale GNU, version 2.
ProGuard est distribué dans le cadre du kit de développement Android et s'exécute lors de la construction de l'application en mode de sortie.
À partir de : [https://en.wikipedia.org/wiki/ProGuard\_(software)](https://en.wikipedia.org/wiki/ProGuard\_\(software\))
### [DexGuard](https://www.guardsquare.com/dexguard)
Trouvez un guide étape par étape pour déobfusquer l'APK sur [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
(Dans ce guide) La dernière fois que nous avons vérifié, le mode de fonctionnement de Dexguard était :
* charger une ressource en tant que InputStream ;
* alimenter le résultat à une classe héritant de FilterInputStream pour le décrypter ;
* effectuer une obfuscation inutile pour perdre quelques minutes de temps d'un réverseur ;
* alimenter le résultat décrypté à un ZipInputStream pour obtenir un fichier DEX ;
* enfin, charger le DEX résultant en tant que ressource en utilisant la méthode `loadDex`.
### [DeGuard](http://apk-deguard.com)
**DeGuard inverse le processus d'obfuscation effectué par les outils d'obfuscation Android. Cela permet de réaliser de nombreuses analyses de sécurité, notamment l'inspection du code et la prédiction des bibliothèques.**
Vous pouvez télécharger un APK obfusqué sur leur plateforme.
### [Simplify](https://github.com/CalebFenton/simplify)
C'est un **déobfuscateur générique pour Android**. Simplify **exécute virtuellement une application** pour comprendre son comportement, puis **essaie d'optimiser le code** pour qu'il se comporte de manière identique mais soit plus facile à comprendre pour un humain. Chaque type d'optimisation est simple et générique, il n'importe donc pas quel type spécifique d'obfuscation est utilisé.
### [APKiD](https://github.com/rednaga/APKiD)
APKiD vous donne des informations sur **comment un APK a été créé**. Il identifie de nombreux **compilateurs**, **packers**, **obfuscateurs** et autres choses étranges. C'est [_PEiD_](https://www.aldeid.com/wiki/PEiD) pour Android.
### Manuel
[Lisez ce tutoriel pour apprendre quelques astuces sur **comment inverser une obfuscation personnalisée**](manual-deobfuscation.md)
## Laboratoires
### [Androl4b](https://github.com/sh4hin/Androl4b)
AndroL4b est une machine virtuelle de sécurité Android basée sur Ubuntu-Mate qui comprend une collection des derniers frameworks, tutoriels et laboratoires de différents experts en sécurité et chercheurs pour la rétro-ingénierie et l'analyse de logiciels malveillants.
### OWASP
{% embed url="https://github.com/OWASP/owasp-mstg%0Ahttps://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06g-testing-network-communication" %}
### Dépôts Git
[https://github.com/riddhi-shree/nullCommunity/tree/master/Android](https://github.com/riddhi-shree/nullCommunity/tree/master/Android)\
[https://www.youtube.com/watch?v=PMKnPaGWxtg\&feature=youtu.be\&ab\_channel=B3nacSec](https://www.youtube.com/watch?v=PMKnPaGWxtg\&feature=youtu.be\&ab\_channel=B3nacSec)
## Références
Pour plus d'informations, visitez :
* [https://appsecwiki.com/#/](https://appsecwiki.com/#/) C'est une excellente liste de ressources
* [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Cours rapide sur Android
* [https://manifestsecurity.com/android-application-security/](https://manifestsecurity.com/android-application-security/)
* [https://github.com/Ralireza/Android-Security-Teryaagh](https://github.com/Ralireza/Android-Security-Teryaagh)
## À tester
* [https://www.vegabird.com/yaazhini/](https://www.vegabird.com/yaazhini/)
* [https://github.com/abhi-r3v0/Adhrit](https://github.com/abhi-r3v0/Adhrit)
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes en sécurité !
**Hacking Insights**\
Engagez-vous avec du contenu qui explore les sensations et les défis du piratage informatique
**Actualités de piratage en temps réel**\
Restez à jour avec le monde du piratage informatique en temps réel grâce aux actualités et aux informations
**Dernières annonces**\
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous souhaitez voir votre **entreprise annoncée dans HackTricks** ? ou vous souhaitez avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PRs au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).