Xamarin启用Enable Optimisations时如何将.blob转换为独立dll文件
Xamarin Android 启用优化后 assemblies.blob 还原独立DLL方案
不需要自行解析哈希字段、手动计算偏移切片,直接用以下成熟方案即可完成还原,验证混淆效果:
方案1:使用官方工具链一键拆解(最稳定,推荐)
Xamarin Android 构建流程本身自带程序集存储格式的读写工具,不需要第三方工具:
- 先从APK压缩包中解压出
assemblies.blob和assemblies.manifest两个文件,放在同一目录下 - 找到本地Xamarin Android SDK安装路径下的
assembly-store-reader命令行工具,执行以下命令:
assembly-store-reader -x assemblies.blob assemblies.manifest ./dll_output
- 执行完成后,
dll_output目录下会生成所有和manifest列表一一对应的标准.NET DLL文件,和打包前的程序集内容完全一致,直接拖入ILSpy、dnSpy即可反编译检查混淆效果。
方案2:手动快速提取业务DLL(仅用于快速验证混淆)
如果只需要验证自己的业务程序集是否完成混淆,不需要提取全量DLL,可以直接按文件特征切片:
assemblies.blob的固定文件头为ASMB(对应十六进制0x41 0x53 0x4D 0x42),跳过文件头后,每个独立DLL都是标准PE格式,以MZ(十六进制0x4D 0x5A)为起始标识- 按MZ头的位置依次切片,对照manifest里的程序集名称,找到你自己的业务DLL(即示例中
test_optimize对应的条目)即可,不需要处理全量文件。
关于manifest中Hash字段的说明
你观察到的两个哈希字段仅用于Xamarin运行时加载程序集时的完整性校验,拆解文件不需要计算或匹配这两个值:
- Hash 32是对应程序集的32位MurmurHash3值
- Hash 64是对应程序集的64位MurmurHash3值
如果要自己写脚本批量拆解,注意blob内的每个程序集块都是4字节对齐存储,不要直接按固定长度切片,避免拿到损坏的文件。
内容的提问来源于stack exchange,提问作者Shubham Agarwal
相关产品推荐
相关产品推荐

