hacktricks/mobile-pentesting/xamarin-apps.md

93 lines
7.1 KiB
Markdown

# Xamarin Apps
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## **Osnovne Informacije**
Xamarin je **platforma otvorenog koda** dizajnirana za programere da **prave aplikacije za iOS, Android i Windows** koristeći .NET i C# okvire. Ova platforma nudi pristup brojnim alatima i ekstenzijama za efikasno kreiranje modernih aplikacija.
### Arhitektura Xamarina
* Za **Android**, Xamarin se integriše sa Android i Java imenskim prostorima putem .NET veza, radeći unutar Mono izvršnog okruženja zajedno sa Android Runtime (ART). Managed Callable Wrappers (MCW) i Android Callable Wrappers (ACW) olakšavaju komunikaciju između Mono i ART, koji su oba izgrađena na Linux kernelu.
* Za **iOS**, aplikacije se izvršavaju pod Mono runtime-om, koristeći potpunu Ahead of Time (AOT) kompilaciju za konverziju C# .NET koda u ARM asembler jezik. Ovaj proces se odvija zajedno sa Objective-C Runtime na UNIX-sličnom kernelu.
### .NET Runtime i Mono Okvir
**.NET okvir** uključuje asambleje, klase i imenske prostore za razvoj aplikacija, pri čemu .NET Runtime upravlja izvršavanjem koda. Nudi nezavisnost od platforme i unazad kompatibilnost. **Mono Okvir** je verzija .NET okvira otvorenog koda, pokrenuta 2005. godine kako bi se proširio .NET na Linux, sada podržana od strane Microsoft-a i vođena od strane Xamarina.
### Reverzno Inženjerstvo Xamarinskih Aplikacija
#### Dekompilacija Xamarinskih Asambleja
Dekompilacija transformiše kompajlirani kod nazad u izvorni kod. U Windows-u, prozor Moduli u Visual Studio-u može identifikovati module za dekompilaciju, omogućavajući direktan pristup kodu trećih strana i ekstrakciju izvornog koda za analizu.
#### JIT vs AOT Kompilacija
* **Android** podržava Just-In-Time (JIT) i Ahead-Of-Time (AOT) kompilaciju, sa hibridnim AOT režimom za optimalnu brzinu izvršavanja. Potpuna AOT je ekskluzivna za Enterprise licence.
* **iOS** koristi isključivo AOT kompilaciju zbog Apple-ovih ograničenja na dinamičko izvršavanje koda.
### Ekstrakcija dll Fajlova iz APK/IPA
Da biste pristupili asamblejama u APK/IPA, raspakujte fajl i istražite direktorijum asambleja. Za Android, alati poput [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) i [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress) mogu dekompresovati dll fajlove.
```bash
python3 xamarin-decompress.py -o /path/to/decompressed/apk
```
U slučajevima kada nakon dekompilacije APK-a može da se vidi folder unknown/assemblies/ sa `.dll` datotekama unutar njega, moguće je koristiti [**dnSpy**](https://github.com/dnSpy/dnSpy) direktno na `.dll` datotekama za analizu.\
Međutim, ponekad se unutar foldera unknown/assemblies/ nalaze datoteke `assemblies.blob` i `assemblies.manifest`. Alat [pyxamstore](https://github.com/jakev/pyxamstore) može se koristiti za raspakivanje datoteke `assemblies.blob` u Xamarin aplikacijama, omogućavajući pristup .NET skupovima za dalju analizu:
```bash
pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
```
iOS dll datoteke su lako dostupne za dekompilaciju, otkrivajući značajne delove koda aplikacije, koji često dele zajedničku osnovu na različitim platformama.
### Staticka analiza
Kada se dobiju `.dll` datoteke, moguće je statički analizirati .Net kod koristeći alate kao što su [**dnSpy**](https://github.com/dnSpy/dnSpy) **ili** [**ILSpy**](https://github.com/icsharpcode/ILSpy) **koji** omogućavaju modifikaciju koda aplikacije. Ovo može biti veoma korisno za manipulaciju aplikacijom kako bi se zaobišle zaštite, na primer.\
Imajte na umu da nakon modifikacije aplikacije, biće potrebno ponovo je spakovati i ponovo potpisati.
### Dinamička analiza
Dinamička analiza uključuje proveru SSL pinovanja i korišćenje alata kao što je [Fridax](https://github.com/NorthwaveSecurity/fridax) za runtime modifikacije .NET binarnih datoteka u Xamarin aplikacijama. Frida skripte su dostupne za zaobilaženje detekcije root-a ili SSL pinovanja, poboljšavajući mogućnosti analize.
Druge zanimljive Frida skripte:
* [**xamarin-antiroot**](https://codeshare.frida.re/@Gand3lf/xamarin-antiroot/)
* [**xamarin-root-detect-bypass**](https://codeshare.frida.re/@nuschpl/xamarin-root-detect-bypass/)
* [**Frida-xamarin-unpin**](https://github.com/GoSecure/frida-xamarin-unpin)
### Ponovno potpisivanje
Alat [Uber APK Signer](https://github.com/patrickfav/uber-apk-signer) pojednostavljuje potpisivanje više APK-ova sa istim ključem, i može se koristiti za ponovno potpisivanje aplikacije nakon što su izvršene izmene.
## Dodatne informacije
* [https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers](https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers)
* [https://thecobraden.com/posts/unpacking\_xamarin\_assembly\_stores/](https://thecobraden.com/posts/unpacking\_xamarin\_assembly\_stores/)
* [https://medium.com/@justmobilesec/introduction-to-the-exploitation-of-xamarin-apps-fde4619a51bf](https://medium.com/@justmobilesec/introduction-to-the-exploitation-of-xamarin-apps-fde4619a51bf)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}