2023-08-03 19:12:22 +00:00
# Xamarin 应用程序
2023-07-31 15:59:11 +00:00
< details >
2024-01-05 11:51:55 +00:00
< summary > < strong > 从零开始学习 AWS 黑客攻击直到成为英雄< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE (HackTricks AWS 红队专家)< / strong > < / a > < strong > ! < / strong > < / summary >
2023-07-31 15:59:11 +00:00
2024-01-05 11:51:55 +00:00
支持 HackTricks 的其他方式:
* 如果您想在 **HackTricks 中看到您的公司广告** 或 **下载 HackTricks 的 PDF** ,请查看 [**订阅计划** ](https://github.com/sponsors/carlospolop )!
2024-01-10 06:29:36 +00:00
* 获取 [**官方 PEASS & HackTricks 商品** ](https://peass.creator-spring.com )
2024-01-05 11:51:55 +00:00
* 发现 [**PEASS 家族** ](https://opensea.io/collection/the-peass-family ),我们独家的 [**NFTs 集合** ](https://opensea.io/collection/the-peass-family )
* **加入** 💬 [**Discord 群组** ](https://discord.gg/hRep4RUj7f ) 或 [**telegram 群组** ](https://t.me/peass ) 或在 **Twitter** 🐦 上 **关注** 我 [**@carlospolopm** ](https://twitter.com/carlospolopm )**。**
* **通过向** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) 和 [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) github 仓库提交 PR 来分享您的黑客技巧。
2023-07-31 15:59:11 +00:00
< / details >
2023-08-03 19:12:22 +00:00
## **基本信息**
2023-07-31 15:59:11 +00:00
2024-01-10 06:29:36 +00:00
Xamarin 是一个开源平台,为开发者提供了一系列工具和附加组件,允许他们使用 .NET 和 C# 框架**创建现代的 iOS、Android 和 Windows 应用程序**。
2023-07-31 15:59:11 +00:00
2023-09-24 14:35:53 +00:00
### Xamarin Android 架构
2023-07-31 15:59:11 +00:00
2024-01-10 06:29:36 +00:00
< figure > < img src = "../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt = "" > < figcaption > < / figcaption > < / figure >
2023-07-31 15:59:11 +00:00
2024-01-05 11:51:55 +00:00
Xamarin 提供了对 Android.\* 和 Java.\* 命名空间的 .NET 绑定。Xamarin。
2023-12-26 02:11:12 +00:00
2024-01-05 11:51:55 +00:00
Android 应用程序在 Mono 执行环境下运行,与 Android 运行时 (ART) 虚拟机并行运行。
2023-07-31 15:59:11 +00:00
2024-01-05 11:51:55 +00:00
Mono 执行环境通过托管可调用包装器 (MCW) 调用这些命名空间,并为 ART 提供 Android 可调用包装器 (ACW)。
2023-07-31 15:59:11 +00:00
2023-12-26 02:11:12 +00:00
这两个环境都在 Linux 内核之上运行,并调用各种 API 到用户代码。这种安排允许开发者访问底层系统。
2023-07-31 15:59:11 +00:00
2023-08-03 19:12:22 +00:00
### Xamarin iOS 项目
2023-07-31 15:59:11 +00:00
2024-01-05 11:51:55 +00:00
Xamarin.iOS 应用程序在 Mono 运行时环境下运行,并使用完整的提前编译 (AOT) 将 C# .NET 代码编译为 ARM 汇编语言。
2023-07-31 15:59:11 +00:00
2024-01-05 11:51:55 +00:00
它与 Objective-C 运行时一起运行。运行时环境在类 UNIX 内核之上运行,并调用多个 API 到用户代码,这使得开发者可以访问底层的托管或本地系统。
2023-07-31 15:59:11 +00:00
2023-12-26 02:11:12 +00:00
下面给出的图表描述了这种架构:
2023-07-31 15:59:11 +00:00
2024-01-10 06:29:36 +00:00
< figure > < img src = "../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt = "" > < figcaption > < / figcaption > < / figure >
2023-07-31 15:59:11 +00:00
2023-12-26 02:11:12 +00:00
### 什么是 .Net 运行时和 Mono 框架?
2023-07-31 15:59:11 +00:00
2024-01-10 06:29:36 +00:00
**.Net 框架是一组程序集、类和命名空间**,开发者可以使用它们来创建应用程序;.Net 运行时运行编译后的代码,这个过程称为托管代码执行。.NET 运行时提供了多个特性,确保平台独立性并与旧版框架版本兼容。
2023-07-31 15:59:11 +00:00
2024-01-10 06:29:36 +00:00
**Mono 框架** 于 2005 年开始作为 .NET 框架在 Linux( Ximian/SuSe/Novell) 上的实现。在 Microsoft 的赞助和 Xamarin 的领导下, Mono 是基于 ECMA 标准的通用语言运行时和 C# 的 .NET 框架的开源实现。
2023-07-31 15:59:11 +00:00
2023-12-26 02:11:12 +00:00
## Xamarin 应用程序的逆向工程技术
2023-07-31 15:59:11 +00:00
2023-12-26 02:11:12 +00:00
### Xamarin 程序集的反编译
2023-07-31 15:59:11 +00:00
2024-01-05 11:51:55 +00:00
反编译是从编译代码生成源代码的过程。要获取有关当前在内存中的程序集和可执行文件的信息, Windows 是一个绝佳的地方。
2023-07-31 15:59:11 +00:00
2024-01-10 06:29:36 +00:00
要打开模块窗口,请选择调试 > 窗口 > 模块。一旦您检测到需要反编译的模块,请右键单击并选择“反编译源代码到符号文件”。这个操作**创建了一个包含反编译源的符号文件**,反过来,让您可以直接从您的源代码进入第三方代码。
2023-07-31 15:59:11 +00:00
2024-01-10 06:29:36 +00:00
**Visual Studio** 即使在没有符号的情况下也可以反编译托管代码,允许您查看代码,检查变量并设置断点。要将源代码提取到磁盘,请右键单击嵌入源的模块并单击“提取嵌入源。”这将导出源文件到杂项文件夹以供进一步分析。
2023-07-31 15:59:11 +00:00
2023-12-26 02:11:12 +00:00
### Xamarin 应用程序的 JIT 与 AOT 编译
2023-07-31 15:59:11 +00:00
2024-01-10 06:29:36 +00:00
这两个选项用于将基于 C# 的 Xamarin 代码编译成应用程序,即**即时编译和提前编译**。编译方式影响应用程序代码在 apk 或 ipa 文件中的打包方式。让我们快速看一下它:
2023-07-31 15:59:11 +00:00
2024-01-10 06:29:36 +00:00
\- **Android** : Xamarin 允许您使用 **JIT 和 AOT 标志为 android 编译** 。还有一种方法可以在两者之间取得平衡,使用混合 AOT 模式获得最快的执行速度。请注意,完整的 AOT 模式仅适用于企业许可证。
2023-07-31 15:59:11 +00:00
2024-01-10 06:29:36 +00:00
\- **iOS** :在 iOS 的情况下只有一种选择,**提前编译**。这是由于苹果的政策禁止在设备上执行动态生成的代码。
2023-07-31 15:59:11 +00:00
{% hint style="info" %}
2024-01-05 11:51:55 +00:00
如果您遇到一个完整的 AOT 编译应用程序,并且开发者为了减少构建大小而移除了 IL 程序集文件,那么逆向过程需要一个额外的步骤,从 lib 文件夹或 `libmonodroid_bundle_app.so` 文件中提取 dll 文件。如果它是一个混合 AOT 编译的应用程序,并且 IL 文件仍然保留在应用程序包中,我们可以使用它来逆向工程应用程序。
2023-07-31 15:59:11 +00:00
{% endhint %}
2023-12-26 02:11:12 +00:00
## 从 APK/IPA 获取 dll 文件
2024-01-10 06:29:36 +00:00
只需**解压 apk/ipa** 文件并复制程序集目录下的所有文件:
2023-07-31 15:59:11 +00:00
2024-01-10 06:29:36 +00:00
< figure > < img src = "../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt = "" > < figcaption > < / figcaption > < / figure >
2023-07-31 15:59:11 +00:00
2024-01-05 11:51:55 +00:00
在 Android **APKs 的情况下,这些 dll 文件是压缩的** ,不能直接用于反编译。幸运的是,有一些工具可以帮助我们**解压这些 dll 文件**,如 [XamAsmUnZ ](https://github.com/cihansol/XamAsmUnZ ) 和 [xamarin-decompress ](https://github.com/NickstaDB/xamarin-decompress )。
2023-07-31 15:59:11 +00:00
```
python3 xamarin-decompress.py -o /path/to/decompressed/apk
```
2024-01-05 11:51:55 +00:00
在assemblies目录中, 您可能会看到`assemblies.blob`和`assemblies.manifest`文件, 而不是dll文件。这是一个Xamarin AssemblyStore, 是目前推荐用于在Android应用程序中打包dlls的方式。`assemblies.manifest`是一个文本文件,描述了二进制文件`assemblies.blob`的内容。要解包这些文件,您需要使用[pyxamstore](https://github.com/jakev/pyxamstore)。
2023-09-03 15:33:32 +00:00
```
pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
```
2023-12-26 02:11:12 +00:00
在iOS的情况下, **IPA文件中的dll文件可以直接加载**到反编译器中(无需解压任何内容)。
2023-07-31 15:59:11 +00:00
2023-12-26 02:11:12 +00:00
**当我们反编译dll文件时, 可以找到大部分应用程序代码。** 同时请注意, 基于Xamarin框架的应用程序在所有平台( 如iOS和Android等) 的构建中包含90%的通用代码。
2023-07-31 15:59:11 +00:00
2024-01-10 06:29:36 +00:00
< figure > < img src = "../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1).png" alt = "" > < figcaption > < / figcaption > < / figure >
2023-07-31 15:59:11 +00:00
2024-01-10 06:29:36 +00:00
从上面的截图中, 我们可以看到apk中存在的dll文件列表, 我们可以确认这是一个Xamarin应用程序。它包含了应用程序特定的dll文件以及运行应用程序所需的库文件, 例如`Xamarin.Essentails.dll`或`Mono.Security.dll`。
2023-07-31 15:59:11 +00:00
{% hint style="success" %}
2023-12-26 02:11:12 +00:00
最后,您可以使用[**这些推荐工具**](../reversing/reversing-tools-basic-methods/#net-decompiler)来访问DLL中的**C#代码**。
2023-07-31 15:59:11 +00:00
{% endhint %}
2023-08-03 19:12:22 +00:00
## 动态分析
2023-07-31 15:59:11 +00:00
2024-01-10 06:29:36 +00:00
尝试检查应用程序是否有任何形式的SSL pinning。如果没有, 使用Burp作为系统CA应该可以用于拦截请求。**Frida与Java或ObjC运行时在这里不起作用**,但幸运的是,有一个工具可以用于钩入方法。
2023-07-31 15:59:11 +00:00
2024-01-10 06:29:36 +00:00
[**Fridax** ](https://github.com/NorthwaveSecurity/fridax )允许您轻松**修改运行时Xamarin应用程序内的.NET二进制文件**。静态分析将帮助您识别应用程序中存在的不同方法, 这些方法可以在使用Fridax进行动态分析时被钩入。以下是一些Frida脚本, 可以帮助我们绕过root检测或SSL-pinning:
2023-07-31 15:59:11 +00:00
* [**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 )
2023-08-03 19:12:22 +00:00
## 参考资料
2023-07-31 15:59:11 +00:00
* [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 )
2023-09-24 14:35:53 +00:00
* [https://thecobraden.com/posts/unpacking\_xamarin\_assembly\_stores/ ](https://thecobraden.com/posts/unpacking\_xamarin\_assembly\_stores/ )
2023-07-31 15:59:11 +00:00
< details >
2024-01-05 11:51:55 +00:00
< summary > < strong > 从零开始学习AWS黑客攻击直到成为专家, 通过< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE (HackTricks AWS Red Team Expert)< / strong > < / a > < strong > ! < / strong > < / summary >
支持HackTricks的其他方式:
2023-07-31 15:59:11 +00:00
2024-01-10 06:29:36 +00:00
* 如果您希望在HackTricks中看到您的**公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
2024-01-05 11:51:55 +00:00
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
2024-01-10 06:29:36 +00:00
* **加入** 💬 [**Discord群组** ](https://discord.gg/hRep4RUj7f ) 或 [**telegram群组** ](https://t.me/peass ) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm** ](https://twitter.com/carlospolopm )**。**
2024-01-05 11:51:55 +00:00
* **通过向** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) 和 [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) github仓库提交PR来分享您的黑客技巧。
2023-07-31 15:59:11 +00:00
< / details >