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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/307380.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring高手之路-@Autowired和@Resource注解异同点

目录 相同点 不同点 1.来源不同。 2.包含的属性不同 3.匹配方式(装配顺序)不同。 ​编辑 4.支持的注入对象类型不同 5.应用地方不同 相同点 都可以实现依赖注入,通过注解将需要的Bean自动注入到目标类中。都可以用于注入任意类型的Bean…

Linux开发工具——gdb篇

Linux下调试工具——gdb 文章目录 makefile自动化构建工具 gdb背景 gdb的使用 常用命令 总结 前言: 编写代码我们使用vim,编译代码我们使用gcc/g,但是我们,不能保证代码没问题,所以调试是必不可少的。与gcc/vim一样&…

【连接池】-从源码到适配(下),使用dynamic-datasource导致连接池没生效(升级版本)

写在前面 书接上文,连接池没生效,启用了一个什么默认的连接池。具体是什么,一起来看看源码吧。 目录 写在前面一、问题描述二、本地调试三、升级dynamic-datasource四、新的问题(一)数据源初始化问题(二&am…

ubuntu20部署Bringing-Old-Photos-Back-to-Life

环境准备: ubuntu20.04 Python 3.8.10 首先将微软的「Bringing-Old-Photos-Back-to-Life」库 clone 到本地: git clone https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life.git cd Face_Enhancement/models/networks/ git clone https:/…

在Ant Design Vue(v1.7.8)a-table组件中实现余额自动计算

一、目标 在Ant Design Vue <a-table>表格中实现余额自动计算&#xff0c;公式为&#xff1a;剩余量 库存量 - 消耗量 二、二次开发基础 现有一个使用Ant Design Vue <a-table>表格的开源项目&#xff0c;原始表格有“消耗量”列&#xff0c;且带输入框&#xf…

【Maven】<scope>provided</scope>

在Maven中&#xff0c;“provided”是一个常用的依赖范围&#xff0c;它表示某个依赖项在编译和测试阶段是必需的&#xff0c;但在运行时则由外部环境提供&#xff0c;不需要包含在最终的项目包中。下面是对Maven scope “provided”的详细解释&#xff1a; 编译和测试阶段可用…

自定义docker镜像,ubuntu安装命令并导出

文章目录 问题现象解决步骤相关命令详细介绍docker save 与 docker loaddocker import 与 docker exportdocker commit 问题现象 我们的通讯服务&#xff0c;需要监测前端设备的在线情况&#xff08;是否在线、丢包率、延迟等&#xff09;&#xff0c;使用ping命令去实现此功能…

GBASE南大通用-Base 8a集群同步工具超详细指南 手把手带您玩转灾备

1工具介绍 GBase 8a集群间同步工具是基于集群的底层二进制数据同步的工具&#xff0c;其同步的对象是库内的数据&#xff0c;通过解析、对比智能索引中摘要信息的变化&#xff0c;来实现同构集群的同构表的数据复制功能&#xff0c;目前已经支持图形化操作&#xff0c;主要功能…

电脑报错“kernelbase.dll”文件缺失,软件游戏无法启动的解决方法

很多小伙伴留言说&#xff0c;每次自己要游戏或软件的时候&#xff0c;电脑就会弹出报错框&#xff0c;不知道应该怎么办&#xff1f; 其实&#xff0c;Windows报错提示已经说明了&#xff0c;程序找不到名为“kernelbase.dll”的文件&#xff0c;需要重新安装修复这个问题。 …

熊猫目标检测数据集VOC格式1200张

熊猫是中国的国宝&#xff0c;也是世界上最受人喜爱的动物之一。熊猫以其独特的外貌和与生俱来的文化象征意义而闻名于世。它们是一种大型的食草动物&#xff0c;主要分布在中国中部地区的竹林和高山地带。 熊猫的身形圆润笨拙&#xff0c;黑白分明&#xff0c;拥有圆润的脸庞…

Apipost一键压测参数化功能详解

最近更新中Apipost对UI页面进行了一些调整&#xff0c;另外一键压测功能支持参数化&#xff01;本篇文章将详细介绍这些改动&#xff01; API调试页面的细节改动 在请求区填入请求参数或脚本时会有相应的标识 如在Query中填入多个参数时上方会展示数量 在预、后执行脚本中写…

分享一个qml开发的Dialog

一、效果预览 二、源码分享 PopwindowWidget.qml import QtQuick import QtQuick.Controls import QtQuick.LayoutsApplicationWindow {id:selfwidth: 470height: 250visible: falsecolor: "#00000000"flags: Qt.Tool | Qt.FramelessWindowHint|Qt.MSWindowsFixedSiz…