如何使用Pyxamstore快速解析Xamarin AssemblyStore文件

如何使用Pyxamstore快速解析Xamarin AssemblyStore文件_第1张图片

关于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 pyxamstore

pip install -r requirements.txt

配置完成后,执行工具安装脚本即可:

python setup.py install

此时,我们就可以直接通过调用“pyxamstore”命令来使用该工具了。

工具使用

解包

我们建议广大研究人员将该工具与apktool工具一起结合使用,效果更佳。

下列命令可以用于解包一个APK文件,并解包其中的Xamarin DLL文件:

apktool d yourapp.apk

pyxamstore 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

你可能感兴趣的:(xamarin)