Додатки Xamarin

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Основна інформація

Xamarin — це платформа з відкритим кодом, призначена для розробників, щоб створювати додатки для iOS, Android та Windows з використанням .NET і C#. Ця платформа надає доступ до численних інструментів та розширень для ефективної розробки сучасних застосунків.

Архітектура Xamarin

  • Для Android Xamarin інтегрується з просторами імен Android та Java через .NET bindings, працюючи в середовищі виконання Mono разом з Android Runtime (ART). Managed Callable Wrappers (MCW) та Android Callable Wrappers (ACW) забезпечують комунікацію між Mono і ART, які обидва працюють на базі ядра Linux.
  • Для iOS додатки виконуються під Mono runtime, використовуючи повну Ahead of Time (AOT) компіляцію для перетворення C# .NET коду в ARM assembly. Цей процес працює поряд з Objective-C Runtime на UNIX-подібному ядрі.

.NET Runtime та Mono Framework

Фреймворк .NET включає assemblies, класи та простори імен для розробки додатків, а .NET Runtime керує виконанням коду. Він забезпечує незалежність від платформи та зворотну сумісність. Mono Framework — це версія .NET з відкритим кодом, започаткована у 2005 році для перенесення .NET на Linux, зараз підтримується Microsoft і очолюється Xamarin.

Реверс-інженерія додатків Xamarin

Декомпіляція Xamarin-збірок

Декомпіляція перетворює скомпільований код назад у вихідний код. В Windows вікно Modules у Visual Studio може ідентифікувати модулі для декомпіляції, що дозволяє отримати прямий доступ до стороннього коду та витягти вихідний код для аналізу.

JIT vs AOT компіляція

  • Для Android підтримуються Just-In-Time (JIT) та Ahead-Of-Time (AOT) компіляції, з Hybrid AOT режимом для оптимальної швидкості виконання. Повна AOT доступна лише для Enterprise ліцензій.
  • Для iOS використовується виключно AOT компіляція через обмеження Apple щодо динамічного виконання коду.

Витягнення dll файлів з APK/IPA

Щоб отримати доступ до збірок у APK/IPA, розпакуйте файл та перегляньте каталог assemblies. Для Android інструменти на кшталт XamAsmUnZ та xamarin-decompress можуть розпакувати dll файли.

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

У випадках, коли після декомпіляції APK можна побачити папку unknown/assemblies/ з файлами .dll всередині, можна використовувати dnSpy безпосередньо для аналізу .dlls. Однак іноді у папці unknown/assemblies/ знаходяться файли assemblies.blob і assemblies.manifest. Інструмент pyxamstore може розпакувати файл assemblies.blob у Xamarin apps, що дозволяє отримати доступ до .NET assemblies для подальшого аналізу:

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

Деякі нещодавні збірки Xamarin/MAUI зберігають стиснуті збірки у форматі XALZ всередині /assemblies.blob або /resources/assemblies. Ви можете швидко їх розпакувати за допомогою бібліотеки xamarout:

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

Після отримання .dll можливо статично проаналізувати .Net код за допомогою інструментів, таких як dnSpy або ILSpy, які дозволяють змінювати код додатка. Це дуже корисно для маніпуляцій з додатком, наприклад, щоб обійти захисти.\
Зауважте, що після зміни додатка його потрібно знову запакувати та підписати.

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

Dynamic Analysis

Динамічний аналіз включає перевірку SSL pinning та використання інструментів на кшталт Fridax для модифікацій .NET бінарника під час виконання в Xamarin додатках. Існують Frida скрипти для обходу root detection або SSL pinning, що розширює можливості аналізу.

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

Швидкий шаблон для hook керованих методів із вбудованим frida-mono-api:

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()); } });

Перепідписання

Інструмент Uber APK Signer спрощує підписування кількох APK одним і тим же ключем і може бути використаний для перепідписання додатка після внесених у нього змін.

Посилання

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks