wisamidris77/xamarin-unpacker
GitHub: wisamidris77/xamarin-unpacker
从 Xamarin Android 应用的 blob 文件中批量提取并验证 .NET DLL 程序集的命令行工具。
Stars: 1 | Forks: 0
# 🔓 Xamarin Assembly Unpacker
[](https://github.com/wisamidris77/xamarin-unpacker)
[](https://dotnet.microsoft.com/)
[](LICENSE)
轻松地从 Xamarin Android APK 文件中提取 DLL 程序集,用于逆向工程、分析和教育目的。
## ✨ 功能
🚀 **广泛兼容** - 支持所有 Xamarin 应用架构(ARM64、ARMv7、x86、x86_64)
⚡ **高级提取** - 具备自动格式检测的多种提取方法
🗜️ **LZ4 解压缩** - 内置支持压缩的 Xamarin 程序集
📁 **智能整理** - 自动按架构对提取的 DLL 进行分类整理
✅ **程序集验证** - 验证提取的 DLL 并修复常见问题
📝 **详细日志** - 提供全面的日志以供故障排除
🔧 **自动检测** - 自动检测 XABA AssemblyStore 格式
## 🛠️ 环境要求
- **.NET 9.0** 或更高版本
- **Windows、Linux 或 macOS**
## 🚀 快速开始
### 1. 克隆仓库
```
git clone https://github.com/wisamidris77/xamarin-unpacker.git
cd xamarin-unpacker
```
### 2. 构建应用程序
```
dotnet build --configuration Release
```
### 3. 运行提取器
```
# 基本用法
./XamarinBlobConverter.exe [input_folder] [output_folder]
# 示例
./XamarinBlobConverter.exe "C:\path\to\assemblies" "C:\path\to\output"
```
## 📖 使用指南
### 命令行使用
```
XamarinBlobConverter.exe
```
**参数:**
- `input_assemblies_folder` - 包含 Xamarin blob 文件的文件夹路径
- `output_folder` - 提取的 DLL 文件的保存位置
### 交互模式
不带参数运行以进行引导式设置:
```
XamarinBlobConverter.exe
```
应用程序将提示您输入:
1. 输入文件夹路径
2. 输出文件夹路径
## 📂 输入文件
将以下文件放置在您的输入目录中:
| 文件 | 描述 | 是否必需 |
|------|-------------|----------|
| `assemblies.blob` | 主程序集 blob | ✅ **必需** |
| `assemblies.manifest` | 程序集清单 | ⭐ **推荐** |
| `assemblies.arm64_v8a.blob` | ARM64 程序集 | ⚪ 可选 |
| `assemblies.armeabi_v7a.blob` | ARMv7 程序集 | ⚪ 可选 |
| `assemblies.x86.blob` | x86 程序集 | ⚪ 可选 |
| `assemblies.x86_64.blob` | x86_64 程序集 | ⚪ 可选 |
## 📁 输出结构
```
output_folder/
├── assemblies/
│ ├── MyApp.dll
│ ├── Xamarin.Forms.dll
│ └── Microsoft.Maui.Controls.dll
├── assemblies.arm64_v8a/
│ └── [ARM64 specific DLLs]
├── assemblies.x86/
│ └── [x86 specific DLLs]
├── invalid/
│ └── [Corrupted or invalid files]
└── conversion_log_[timestamp].txt
```
## 🔍 如何获取 Xamarin Blob 文件
### 从 Android APK 中获取
1. 使用任何 ZIP 工具或 `apktool` **解压 APK**
2. **导航**至 `/unknown/assemblies/` 文件夹
3. **复制**所有 `.blob` 和 `.manifest` 文件
### 典型的 APK 结构
```
your_app.apk
└── unknown/
└── assemblies/
├── assemblies.blob
├── assemblies.manifest
├── assemblies.arm64_v8a.blob
└── assemblies.armeabi_v7a.blob
```
## 🎯 示例
### 基础提取
```
# 从解包的 APK 中提取
XamarinBlobConverter.exe "C:\MyApp\unknown\assemblies" "C:\ExtractedDLLs"
```
### 批处理
```
# 处理多个应用
for /d %i in ("C:\UnpackedApps\*") do (
XamarinBlobConverter.exe "%i\unknown\assemblies" "C:\AllExtracted\%~ni"
)
```
### PowerShell 单行命令
```
# 提取并打开输出文件夹
$input = "C:\path\to\assemblies"; $output = "C:\extracted";
.\bin\Release\net9.0\XamarinBlobConverter.exe $input $output; explorer $output
```
## 🔧 故障排除
### ❌ 未提取到 DLL
- ✅ 确认 blob 文件存在
- ✅ 检查输入文件夹路径是否正确
- ✅ 确保文件来自 Xamarin 应用
- ✅ 查看日志文件以排查错误
### ❌ 无效的 DLL 文件
- ✅ 文件会自动移动到 `invalid/` 文件夹
- ✅ 检查日志以获取验证详细信息
- ✅ 某些资源 DLL 可能显示为无效,但实际是正确的
### ❌ 权限错误
- ✅ 以管理员身份运行(Windows)
- ✅ 检查文件夹写入权限
- ✅ 确保防病毒软件没有拦截
## 📊 提取成功指标
✅ **绿色的 "SUCCESS" 消息** - DLL 已提取并验证通过
⚠️ **黄色的 "WARNING" 消息** - 存在轻微问题,请检查日志
❌ **红色的 "ERROR" 消息** - 提取失败,请参阅故障排除
### 成功输出示例
```
✓ VALID: MyApp.dll
✓ VALID: Xamarin.Forms.dll
✓ VALID: Microsoft.Maui.Controls.dll
Validation Summary:
Valid assemblies: 45
Invalid assemblies: 2
Total processed: 47
SUCCESS: Successfully extracted 45 valid .NET assemblies!
```
## 🛡️ 安全与法律
### ⚖️ 法律声明
- 仅供**教育与研究**目的使用
- **尊重软件许可证**和服务条款
- **拥有或已获得授权**才能分析相关应用程序
- **遵守当地有关**逆向工程的法律
### 🔒 隐私
- **不收集数据** - 完全在本地运行
- **无网络连接** - 完全离线操作
- **无遥测** - 您的文件将保持私密
## 📞 支持
- 🐛 **问题反馈**:[GitHub Issues](https://github.com/wisamidris77/xamarin-unpacker/issues)
- 💬 **讨论交流**:[GitHub Discussions](https://github.com/wisamidris77/xamarin-unpacker/discussions)
- 📧 **联系方式**:提交 issue 以获取支持
标签:APK分析, Hakrawler, Xamarin, 云资产清单, 目录枚举, 移动安全, 端点检测与响应, 脱壳工具, 逆向工程