Android java代码被编译为Dalvik字节代码,这是很容易理解的。我想知道,在理论上和实践上是否有可能为Dalvik字节码编写反编译软件?

#1 楼

这不仅可能,而且已经完成,而不仅仅是一次。这是我所知道的三个,而且可能还有更多。


Dost by Zost(Androguard项目):
http://code.google.com/p/androguard/wiki/Decompiler


JEB作者:Nicolas Falliere(商业)
http://www.android-decompiler.com/


然后,所有使用dex2jar或Dare的Java反编译器都可以使用在Dalvik二进制文件上。

评论


理论上,所有Java反编译器都可以工作,并且Dalvik类文件可以转换(返回)为Java类文件。除了上面的链接之外,您可能还需要查看最近添加了Dalvik支持的Soot。

–user209
13年3月20日在17:20



#2 楼

我认为,即使是当前的Java反编译器,也可以通过修补其代码来实现。它们至少有一个很大的不同-JVM是基于堆栈的,而Dalvik是基于寄存器的。不用太多代码就可以处理这种差异。第二个区别-字节码格式。因此,您需要使用能够反汇编Dalvik字节码格式的代码。

#3 楼

不要忘记http://dexter.dexlabs.org/-Dexter是一个静态android应用程序分析工具。

#4 楼

jadx具有CLI和GUI,并且是开源的。

#5 楼

另一个工具是字节码查看器:

https://github.com/Konloch/bytecode-viewer


字节码查看器是一种先进的轻量级Java字节码查看器,GUI
Java Decompiler,GUI字节码编辑器,GUI Smali,GUI Baksmali,GUI APK
编辑器,GUI Dex编辑器,GUI APK反编译器,GUI DEX Decompiler,GUI
Procyon Java Decompiler,GUI Krakatau,GUI CFR Java反编译器,GUI
FernFlower Java反编译器,GUI DEX2Jar,GUI Jar2DEX,GUI Jar-Jar,Hex
查看器,代码搜索器,调试器等。它完全用Java编写,并且是开源的。 Konloch目前正在维护和开发它。


评论


一个用法的例子将是不受欢迎的! :-)

–恐怖
15年2月23日在10:05

#6 楼

除了Igor列出的软件外,还有诸如apktool之类的工具可用于反编译代码:它将dalvik字节码转换为smali,这是dalvik虚拟机专用的语言(例如,请参见此处的指令/操作码)。 />
您还可以编辑应用程序中的资源,然后重新构建应用程序(但是由于您必须使用自己的密钥重新签名,因此它会破坏原始签名)。

评论


抱歉,您要描述的是反汇编,而不是反汇编。 Smali只是表示Dalvik字节码的一种方式,它不是像Java这样的高级语言。

–伊戈尔·斯科钦斯基♦
13年4月10日在2:03