* 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).
</details>
## **Informations de base**
Xamarin est une plateforme open-source qui donne aux développeurs accès à une sélection complète d'outils et d'add-ons, leur permettant de **créer des applications modernes pour iOS, Android et Windows en utilisant les frameworks .NET et C#**.
Xamarin offre des liaisons .NET vers les espaces de noms Android.\* et Java.\*. Les applications Xamarin Android fonctionnent sous l'environnement d'exécution Mono, avec la machine virtuelle Android Runtime (ART) qui s'exécute côte à côte.
L'environnement d'exécution Mono appelle ces espaces de noms via des wrappers d'appel managés (MCW) et fournit des wrappers d'appel Android (ACW) à l'ART.
Ces deux environnements s'exécutent sur le noyau Linux et invoquent diverses API vers le code utilisateur. Cette configuration permet aux développeurs d'accéder au système sous-jacent.
### Projet Xamarin iOS
Les applications Xamarin.iOS s'exécutent sous l'environnement d'exécution Mono et utilisent une compilation complète en temps réel (AOT) pour compiler les codes C# .NET en langage d'assemblage ARM.
Il s'exécute avec le runtime Objective-C. Les environnements d'exécution s'exécutent sur un noyau de type UNIX et invoquent plusieurs API vers le code utilisateur, ce qui permet aux développeurs d'accéder au système géré ou natif sous-jacent. 
Le diagramme ci-dessous illustre cette architecture :
**Le framework .Net est un ensemble d'assemblages, de classes et d'espaces de noms** que les développeurs peuvent utiliser pour créer des applications ; le .Net Runtime exécute le code compilé, et le processus s'appelle l'exécution de code géré. Le .NET Runtime offre plusieurs fonctionnalités qui garantissent l'indépendance de la plateforme et sont compatibles avec les anciennes versions du framework.
**Le framework Mono** a été lancé en 2005 en tant qu'implémentation du framework .NET pour Linux (Ximian/SuSe/Novell). Sponsorisé par Microsoft et dirigé par Xamarin, Mono est l'implémentation open-source du framework .NET basée sur les normes ECMA pour Common Language Runtime et C#. 
## Techniques de rétro-ingénierie pour les applications Xamarin
### Décompilation des assemblages Xamarin
La décompilation est le processus utilisé pour produire du code source à partir de code compilé. Pour obtenir des informations sur les assemblages et les exécutables actuellement en mémoire, Windows est un excellent endroit.
Pour ouvrir la fenêtre Modules, sélectionnez Déboguer > Fenêtres > Modules. Une fois que vous avez détecté le module qui nécessite une décompilation, faites un clic droit et sélectionnez "Décompiler la source vers un fichier de symboles". Cette action **crée un fichier de symboles contenant une source décompilée qui**, à son tour, vous permet d'accéder directement au code tiers à partir de votre code source.
**Visual Studio** décompile le code managé, même en l'absence de symboles, ce qui vous permet de consulter le code, d'inspecter les variables et de définir des points d'arrêt. Pour extraire le code source sur le disque, faites un clic droit sur le module avec la source intégrée et cliquez sur "Extraire la source intégrée". Cela exportera les fichiers source dans un dossier de fichiers divers pour une analyse ultérieure.
### Compilation JIT vs AOT des applications Xamarin
Ces deux options permettent de compiler le code Xamarin basé sur C# en une application, c'est-à-dire **la compilation juste à temps et la compilation en avance**. La méthode de compilation affecte la façon dont le code de l'application est distribué dans le fichier apk ou ipa. Jetons-y rapidement un coup d'œil ci-dessous :
\- **Android** : Xamarin vous permet de compiler en utilisant **à la fois les indicateurs JIT et AOT pour Android**. Il existe également un moyen d'obtenir le meilleur rendement d'exécution en utilisant le mode hybride AOT. Notez que le mode AOT complet est disponible uniquement pour la licence Enterprise.
\- **iOS** : Il n'y a qu'une seule option dans le cas d'iOS, **la compilation en avance**. Cela est dû aux politiques d'Apple qui interdisent l'exécution de code généré dynamiquement sur un appareil.
Si vous rencontrez une application compilée en AOT complet, et si les fichiers d'assembly IL sont supprimés pour réduire la taille de la construction par le développeur, la rétro-ingénierie nécessite une étape supplémentaire d'extraction des fichiers dll à partir des fichiers .dll.so du dossier lib ou du fichier `libmonodroid_bundle_app.so`. S'il s'agit d'une application compilée en AOT hybride, et que les fichiers IL sont toujours conservés dans le bundle de l'application, nous pouvons les utiliser pour rétro-ingénier l'application.
Dans le cas des **APK Android, ces fichiers dll sont compressés** et ne peuvent pas être directement utilisés pour la décompilation. Heureusement, il existe des outils que nous pouvons utiliser pour **décompresser ces fichiers dll** comme [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) et [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress).
Il est possible que, au lieu de fichiers dll, vous trouviez des fichiers `assemblies.blob` et `assemblies.manifest` dans le répertoire des assemblies. Il s'agit d'un AssemblyStore Xamarin et de la méthode actuellement recommandée pour empaqueter des dll dans une application Android. Le fichier `assemblies.manifest` est un fichier texte décrivant le contenu du fichier binaire `assemblies.blob`. Pour les décompresser, vous devrez utiliser [pyxamstore](https://github.com/jakev/pyxamstore).
Dans le cas d'iOS, les fichiers DLL à l'intérieur des fichiers IPA peuvent être directement chargés dans un décompilateur (pas besoin de décompresser quoi que ce soit).
La plupart du code de l'application peut être trouvé lorsque nous décompilons les fichiers DLL. Notez également que les applications basées sur le framework Xamarin contiennent 90% de code commun dans les versions de toutes les plateformes telles que iOS et Android, etc.
À partir de la capture d'écran ci-dessus de la liste des fichiers DLL présents dans l'APK, nous pouvons confirmer qu'il s'agit d'une application Xamarin. Elle contient des fichiers DLL spécifiques à l'application ainsi que des fichiers de bibliothèque nécessaires au fonctionnement de l'application, tels que `Xamarin.Essentails.dll` ou `Mono.Security.dll`.
{% hint style="success" %}
Enfin, vous pouvez utiliser [**ces outils recommandés**](../reversing/reversing-tools-basic-methods/#net-decompiler) pour accéder au **code C#** des DLL.
Essayez de vérifier si l'application a mis en place un quelconque SSL pinning. Si ce n'est pas le cas, en utilisant Burp en tant que système, CA devrait fonctionner pour intercepter les requêtes. **Frida avec Java ou ObjC runtime ne fonctionnera pas** ici, mais heureusement, il existe un outil qui peut être utilisé pour se connecter aux méthodes.
[**Fridax**](https://github.com/NorthwaveSecurity/fridax) vous permet de **modifier facilement le binaire .NET à l'intérieur d'une application Xamarin en temps d'exécution**. L'analyse statique vous aidera à identifier les différentes méthodes présentes dans l'application, qui peuvent être accrochées ultérieurement pour une analyse dynamique à l'aide de Fridax. Voici quelques scripts Frida qui peuvent nous aider à contourner la détection de root ou le SSL pinning :
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous voulez 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 [**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 PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).