Xamarin Uygulamaları

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Temel Bilgiler

Xamarin, geliştiricilerin .NET ve C# framework’lerini kullanarak iOS, Android ve Windows için uygulama build etmelerini sağlayan open-source platformdur. Bu platform, modern uygulamalar oluşturmayı kolaylaştıran çok sayıda araç ve uzantıya erişim sunar.

Xamarin’ın Mimarisi

  • Android için, Xamarin .NET binding’leri aracılığıyla Android ve Java namespace’leri ile bütünleşir; Mono yürütme ortamı içinde Android Runtime (ART) ile birlikte çalışır. Managed Callable Wrappers (MCW) ve Android Callable Wrappers (ACW), Mono ile ART arasındaki iletişimi sağlar; her ikisi de Linux kernel üzerinde çalışır.
  • iOS için, uygulamalar Mono runtime altında çalışır ve C# .NET kodunu ARM assembly diline dönüştürmek için tam Ahead of Time (AOT) derleme kullanılır. Bu süreç Objective-C Runtime ile birlikte UNIX-benzeri bir kernel üzerinde çalışır.

.NET Runtime ve Mono Framework

.NET framework, uygulama geliştirme için assemblies, class’lar ve namespace’ler içerir; .NET Runtime ise kod yürütmesini yönetir. Platform bağımsızlığı ve geriye dönük uyumluluk sağlar. Mono Framework, .NET framework’ün 2005’te başlatılmış open-source bir versiyonudur; .NET’i Linux’a taşımak amacıyla geliştirilmiş olup şu anda Microsoft tarafından desteklenmekte ve Xamarin tarafından yönetilmektedir.

Reverse Engineering Xamarin Apps

Decompilation of Xamarin Assemblies

Decompilation, derlenmiş kodu tekrar kaynak koda dönüştürür. Windows’ta Visual Studio içindeki Modules window, decompilation için modülleri tanımlayabilir; bu sayede üçüncü taraf koda doğrudan erişim ve analiz için kaynak kod çıkarımı mümkün olur.

JIT vs AOT Compilation

  • Android, Just-In-Time (JIT) ve Ahead-Of-Time (AOT) derlemeyi destekler; optimal yürütme hızı için Hybrid AOT modu mevcuttur. Full AOT yalnızca Enterprise lisanslarında sunulur.
  • iOS, Apple’ın dinamik kod yürütme kısıtlamaları nedeniyle yalnızca AOT derleme kullanır.

Extracting dll Files from APK/IPA

APK/IPA içindeki assemblies’lere erişmek için dosyayı unzip edip assemblies dizinini inceleyin. Android için XamAsmUnZ ve xamarin-decompress gibi araçlar dll dosyalarını açabilir.

python3 xamarin-decompress.py -o /path/to/decompressed/apk

APK’yi decompile ettikten sonra unknown/assemblies/ klasörünü içinde .dll dosyalarını görebiliyorsanız, dnSpy’ı doğrudan bu .dlller üzerinde kullanarak analiz yapmak mümkündür. Ancak bazen unknown/assemblies/ klasörünün içinde assemblies.blob ve assemblies.manifest dosyaları bulunur. pyxamstore aracı, Xamarin uygulamalarında assemblies.blob dosyasını açarak daha ileri analiz için .NET assemblies’e erişim sağlar:

pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
# After patching DLLs, rebuild the store
pyxamstore pack

Bazı yeni Xamarin/MAUI build’leri, sıkıştırılmış assembly’leri XALZ formatında /assemblies.blob veya /resources/assemblies içinde depoluyor. Bunları xamarout kütüphanesiyle hızlıca açabilirsiniz:

from xamarout import xalz
import os
for root, _, files in os.walk("."):
for f in files:
if open(os.path.join(root, f), 'rb').read(4) == b"XALZ":
xa = xalz.XamarinCompressedAssembly(os.path.join(root, f))
xa.write("decompressed/" + f)

iOS .dll files are readily accessible for decompilation, revealing significant portions of the application code, which often shares a common base across different platforms.

AOT on iOS: managed IL is compiled into native *.aotdata.* files. Patching the DLL alone will not change logic; you need to hook native stubs (e.g., with Frida) because the IL bodies are empty placeholders.

Static Analysis

Once the .dlls are obtained it’s possible to analyze the .Net code statically using tools such as dnSpy or ILSpy that will allow modifying the code of the app. This can be super useful to tamper the application to bypass protections for example.
Note that after modifying the app you will need to pack it back again and sign it again.

dnSpy is archived; maintained forks like dnSpyEx keep working with .NET 8/MAUI assemblies and preserve debug symbols when re-saving.

Dynamic Analysis

Dynamic analysis involves checking for SSL pinning and using tools like Fridax for runtime modifications of the .NET binary in Xamarin apps. Frida scripts are available to bypass root detection or SSL pinning, enhancing analysis capabilities.

Other interesting Frida scripts:

Updated Frida-xamarin-unpin (Mono >=6) hooks System.Net.Http.HttpClient.SendAsync and swaps the handler to a permissive one, so it still works even when pinning is implemented in custom handlers. Run it after the app starts:

frida -U -l dist/xamarin-unpin.js com.target.app --no-pause

Paketlenmiş frida-mono-api ile managed methods’ları hooklamak için hızlı şablon:

const mono = require('frida-mono-api');
Mono.ensureInitialized();
Mono.enumerateLoadedImages().forEach(i => console.log(i.name));
const klass = Mono.classFromName("Namespace", "Class");
const m = Mono.methodFromName(klass, "Method", 2);
Mono.intercept(m, { onEnter(args){ console.log(args[1].toInt32()); } });

Yeniden İmzalama

Araç Uber APK Signer aynı anahtarla birden fazla APK’nin imzalanmasını basitleştirir ve bir uygulamaya değişiklik yapıldıktan sonra uygulamayı yeniden imzalamak için kullanılabilir.

Referanslar

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin