# Xamarin Apps {{#include ../banners/hacktricks-training.md}} ## **Podstawowe informacje** Xamarin to **platforma open-source** zaprojektowana dla deweloperów do **tworzenia aplikacji na iOS, Android i Windows** przy użyciu frameworków .NET i C#. Ta platforma oferuje dostęp do licznych narzędzi i rozszerzeń, aby efektywnie tworzyć nowoczesne aplikacje. ### Architektura Xamarin - Dla **Androida** Xamarin integruje się z przestrzeniami nazw Android i Java poprzez powiązania .NET, działając w środowisku wykonawczym Mono obok Android Runtime (ART). Managed Callable Wrappers (MCW) i Android Callable Wrappers (ACW) ułatwiają komunikację między Mono a ART, które są zbudowane na jądrze Linux. - Dla **iOS** aplikacje działają pod runtime Mono, wykorzystując pełną kompilację Ahead of Time (AOT) do konwersji kodu C# .NET na język asemblera ARM. Proces ten działa obok Objective-C Runtime na jądrze podobnym do UNIX. ### Runtime .NET i framework Mono **Framework .NET** obejmuje zestawy, klasy i przestrzenie nazw do rozwoju aplikacji, a Runtime .NET zarządza wykonaniem kodu. Oferuje niezależność platformy i zgodność wsteczną. **Framework Mono** to wersja open-source frameworka .NET, rozpoczęta w 2005 roku, aby rozszerzyć .NET na Linux, obecnie wspierana przez Microsoft i kierowana przez Xamarin. ### Inżynieria odwrotna aplikacji Xamarin #### Dekompilacja zestawów Xamarin Dekompilacja przekształca skompilowany kod z powrotem w kod źródłowy. W systemie Windows okno Moduły w Visual Studio może identyfikować moduły do dekompilacji, umożliwiając bezpośredni dostęp do kodu stron trzecich i ekstrakcję kodu źródłowego do analizy. #### Kompilacja JIT vs AOT - **Android** wspiera kompilację Just-In-Time (JIT) oraz Ahead-Of-Time (AOT), z hybrydowym trybem AOT dla optymalnej prędkości wykonania. Pełna AOT jest zarezerwowana dla licencji Enterprise. - **iOS** stosuje wyłącznie kompilację AOT z powodu ograniczeń Apple dotyczących dynamicznego wykonywania kodu. ### Ekstrakcja plików dll z APK/IPA Aby uzyskać dostęp do zestawów w pliku APK/IPA, rozpakuj plik i przeszukaj katalog zestawów. Dla Androida narzędzia takie jak [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) i [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress) mogą rozpakować pliki dll. ```bash python3 xamarin-decompress.py -o /path/to/decompressed/apk ``` W przypadkach, gdy po dekompilacji APK możliwe jest zobaczenie folderu unknown/assemblies/ z plikami `.dll` w środku, można bezpośrednio użyć [**dnSpy**](https://github.com/dnSpy/dnSpy) do ich analizy.\ Jednak czasami w folderze unknown/assemblies/ znajdują się pliki `assemblies.blob` i `assemblies.manifest`. Narzędzie [pyxamstore](https://github.com/jakev/pyxamstore) może być użyte do rozpakowania pliku `assemblies.blob` w aplikacjach Xamarin, co umożliwia dostęp do zestawów .NET w celu dalszej analizy: ```bash pyxamstore unpack -d /path/to/decompressed/apk/assemblies/ ``` Pliki .dll dla iOS są łatwo dostępne do dekompilacji, ujawniając znaczną część kodu aplikacji, który często dzieli wspólną bazę na różnych platformach. ### Analiza statyczna Po uzyskaniu plików `.dll` możliwe jest statyczne analizowanie kodu .Net za pomocą narzędzi takich jak [**dnSpy**](https://github.com/dnSpy/dnSpy) **lub** [**ILSpy**](https://github.com/icsharpcode/ILSpy), które pozwolą na modyfikację kodu aplikacji. Może to być bardzo przydatne do manipulacji aplikacją w celu ominięcia zabezpieczeń, na przykład.\ Należy pamiętać, że po modyfikacji aplikacji będziesz musiał ponownie ją spakować i podpisać. ### Analiza dynamiczna Analiza dynamiczna polega na sprawdzaniu SSL pinning i używaniu narzędzi takich jak [Fridax](https://github.com/NorthwaveSecurity/fridax) do modyfikacji binarnej .NET w aplikacjach Xamarin w czasie rzeczywistym. Skrypty Frida są dostępne do omijania wykrywania roota lub SSL pinning, co zwiększa możliwości analizy. Inne interesujące skrypty Frida: - [**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) ### Ponowne podpisywanie Narzędzie [Uber APK Signer](https://github.com/patrickfav/uber-apk-signer) upraszcza podpisywanie wielu APK z tym samym kluczem i może być używane do ponownego podpisywania aplikacji po wprowadzeniu w niej zmian. ## Dalsze informacje - [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) {{#include ../banners/hacktricks-training.md}}