hacktricks/src/mobile-pentesting/xamarin-apps.md

68 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Xamarin Apps
{{#include ../banners/hacktricks-training.md}}
## **Основна інформація**
Xamarin - це **платформа з відкритим кодом**, призначена для розробників для **створення додатків для iOS, Android та Windows** з використанням фреймворків .NET та C#. Ця платформа надає доступ до численних інструментів та розширень для ефективного створення сучасних додатків.
### Архітектура Xamarin
- Для **Android** Xamarin інтегрується з Android та Java просторами імен через прив'язки .NET, працюючи в середовищі виконання Mono разом з Android Runtime (ART). Managed Callable Wrappers (MCW) та Android Callable Wrappers (ACW) полегшують зв'язок між Mono та ART, обидва з яких побудовані на ядрі Linux.
- Для **iOS** додатки працюють під середовищем виконання Mono, використовуючи повну компіляцію Ahead of Time (AOT) для перетворення коду C# .NET в асемблерну мову ARM. Цей процес працює разом з Objective-C Runtime на ядрі, подібному до UNIX.
### .NET Runtime та Mono Framework
**.NET framework** включає збірки, класи та простори імен для розробки додатків, при цьому .NET Runtime керує виконанням коду. Він пропонує незалежність від платформи та зворотну сумісність. **Mono Framework** - це версія .NET framework з відкритим кодом, ініційована в 2005 році для розширення .NET на Linux, тепер підтримується Microsoft і очолюється Xamarin.
### Реверс-інжиніринг додатків Xamarin
#### Декомпіляція збірок Xamarin
Декомпіляція перетворює скомпільований код назад у вихідний код. У Windows вікно Модулі у Visual Studio може ідентифікувати модулі для декомпіляції, що дозволяє безпосередній доступ до коду третіх сторін та витягування вихідного коду для аналізу.
#### JIT проти AOT компіляції
- **Android** підтримує Just-In-Time (JIT) та Ahead-Of-Time (AOT) компіляцію, з гібридним режимом AOT для оптимальної швидкості виконання. Повна AOT є ексклюзивною для корпоративних ліцензій.
- **iOS** використовує лише AOT компіляцію через обмеження Apple на динамічне виконання коду.
### Витягування dll файлів з APK/IPA
Щоб отримати доступ до збірок в APK/IPA, розпакуйте файл і досліджуйте каталог збірок. Для Android інструменти, такі як [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) та [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress), можуть розпаковувати dll файли.
```bash
python3 xamarin-decompress.py -o /path/to/decompressed/apk
```
У випадках, коли після декомпіляції APK можливо побачити папку unknown/assemblies/ з файлами `.dll` всередині, можна використовувати [**dnSpy**](https://github.com/dnSpy/dnSpy) безпосередньо над `.dll` для їх аналізу.\
Однак іноді в папці unknown/assemblies/ знаходять файли `assemblies.blob` та `assemblies.manifest`. Інструмент [pyxamstore](https://github.com/jakev/pyxamstore) можна використовувати для розпакування файлу `assemblies.blob` в додатках Xamarin, що дозволяє отримати доступ до .NET збірок для подальшого аналізу:
```bash
pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
```
Файли iOS dll легко доступні для декомпіляції, що відкриває значні частини коду програми, який часто має спільну основу на різних платформах.
### Статичний аналіз
Після отримання `.dll` можна статично аналізувати .Net код, використовуючи інструменти, такі як [**dnSpy**](https://github.com/dnSpy/dnSpy) **або** [**ILSpy**](https://github.com/icsharpcode/ILSpy), **які** дозволяють модифікувати код програми. Це може бути дуже корисно для зміни програми, щоб обійти захист, наприклад.\
Зверніть увагу, що після модифікації програми вам потрібно буде знову упакувати її та підписати.
### Динамічний аналіз
Динамічний аналіз передбачає перевірку на SSL pinning і використання інструментів, таких як [Fridax](https://github.com/NorthwaveSecurity/fridax) для модифікацій .NET бінарних файлів у програмах Xamarin під час виконання. Доступні скрипти Frida для обходу виявлення root або SSL pinning, що покращує можливості аналізу.
Інші цікаві скрипти 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)
### Підписування
Інструмент [Uber APK Signer](https://github.com/patrickfav/uber-apk-signer) спрощує підписування кількох APK з одним і тим же ключем і може бути використаний для повторного підписування програми після внесення змін.
## Додаткова інформація
- [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}}