如何使用androgurad(或任何其他python工具)从dex文件反编译字节序列?

如何使用androgurad(或任何其他python工具)从dex文件反编译字节序列?,python,android,dex,androguard,Python,Android,Dex,Androguard,我从dex文件中提取了一系列字节,我想使用androguard或任何其他python包对其进行反编译 我的序列看起来像: b'\x17\x8a\\\x05{\x00p\x00\x00\x00xV4\x12\x00\x00\x00\x00\x00\x00\x00\x00\x80\x04' 在没有关于dex文件的其他上下文或信息的情况下,不可能从dex文件反编译或反汇编一组随机字节 首先,该工具不知道字节来自dex文件的哪个部分。Dex文件中有许多不同的数据结构,如果不知道字节来自哪个数据结构部分

我从dex文件中提取了一系列字节,我想使用androguard或任何其他python包对其进行反编译

我的序列看起来像:

b'\x17\x8a\\\x05{\x00p\x00\x00\x00xV4\x12\x00\x00\x00\x00\x00\x00\x00\x00\x80\x04'

在没有关于dex文件的其他上下文或信息的情况下,不可能从dex文件反编译或反汇编一组随机字节

首先,该工具不知道字节来自dex文件的哪个部分。Dex文件中有许多不同的数据结构,如果不知道字节来自哪个数据结构部分,工具就不知道如何解释它

此外,关于给定类甚至方法的信息分布在dex文件中的多个位置。作为一个基本示例,让我们看一下常量字符串指令的编码。看一看我在我的


在这种情况下,
1a
是“const string”的操作码,
01
是存储值的寄存器(例如
v1
),而
00 00
是整数值
0
的小端编码,这被解释为dex文件的全局字符串池的索引。如果该工具没有访问该全局字符串池的权限,那么它就无法知道
字符串索引0
指的是什么。

该工具可以访问(并反编译)dex文件,但我只需要解释一些特定的字节序列。你的回答很有帮助,但是因为我的程序是python的,我发现androguard也可以反编译dex文件,但是在文档中找不到什么可以解决我的问题。我建议使用baksmali的转储功能,正如我在回答你的另一个问题时提到的。例如,您可以使用python的子流程模块执行baksmali命令并获取其输出,然后在输出中查找相关的字节范围。太棒了!偏移量呢?我可以用它来找到字节序列在输出中的位置,对吗?如果是的话,它总是6位长吗?(我有很多dex文件,需要知道迭代所有文件的正确方法)只需从行的开头读到冒号?:)
0001d8: 1a01 0000          |    const-string v1, "Hello World!"