关于Pyxamstore
Pyxamstore是一款针对Xamarin AssemblyStore文件(assemblies.blob)的强大解析工具,该工具基于纯Python 2.7开发,支持从一个APK文件中解包并重封装assemblies.blob和assemblies.manifest Xamarin文件。
什么是assemblies.manifest和assemblies.blob?
assemblies.manifest文件是一个ASCII文件,它列出了Xamarin DLL文件的名称、ID和其他元数据。该文件中唯一有用的真正数据是Name字段,因为assemblies.blob文件中并没有DLL名称数据,而这个名称值,本质上是存储在assemblies.blob中的DLL的原始文件名。
而assemblies.blob则更为重要,也需要我们进行更多的分析。因为它是一个二进制结构,且引用了很多其他的类,我们将这个结构称为AssemblyStore。AssemblyStore的Header为20个字节,包括magic XABA、版本(当前为1)和包含的程序集文件数,紧跟在Header后面的是一个名为AssemblyStoreAssembly的。类对于每个包含的程序集文件,都有一个一个24字节的数据结构。它们没有ID,但似乎是按正确的顺序序列化的(例如,第一个结构是索引0,然后是索引1,以此类推)。DataOffset和DataSize很重要,因为它可以告诉我们DLL在assembly.blob文件中的位置,以及要提取的字节数。
assemblies.blob其余的数据就是DLL的实际内容了,结合assemblies.manifest的数据,我们就可以提取和命名相关联的DLL文件了。
工具要求
1、Python 3
2、future v0.18.3
3、lz4 v4.3.1
4、xxhash 3.2.0
工具安装
由于该工具基于Python 2.7开发,因此我们首先需要在本地设备上安装并配置好Python 2.7环境。接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:
git clone https://github.com/jakev/pyxamstore.git
然后切换到项目目录中,使用pip3工具和项目提供的requirements.txt文件安装该工具所需的其他依赖组件:
cd pyxamstorepip install -r requirements.txt
配置完成后,执行工具安装脚本即可:
python setup.py install
此时,我们就可以直接通过调用“pyxamstore”命令来使用该工具了。
工具使用
解包
我们建议广大研究人员将该工具与apktool工具一起结合使用,效果更佳。
下列命令可以用于解包一个APK文件,并解包其中的Xamarin DLL文件:
apktool d yourapp.apkpyxamstore unpack -d yourapp/unknown/assemblies/
需要注意的是,被检测为使用LZ4压缩的程序集将在提取过程中自动解压缩。
重封装
如果你想要在AssemblyStore中直接修改DLL内容的话,你可以将Pyxamstore与解包过程中生成的assemblies.json一起使用,并创建一个新的assemblies.blob文件。只需在assemblies.json文件所在目录内执行下列命令即可:
pyxamstore pack
此时,你将需要自行拷贝新的manifest文件、blob文件和重封装/签名的APK文件。
项目地址
Pyxamstore:【GitHub传送门】
参考资料
Unpacking Xamarin AssemblyStore Blobs (Updated 12/10/22) | The Cobra Den