反编译混淆的Java字节码

8
我在一个运行Java应用程序的平台上工作。这些应用程序经常被混淆,其中大部分使用ProGuard,这使得我们的平台调试问题非常困难。
目前我正在使用JD(http://java.decompiler.free.fr/)来反编译这些应用程序。JD做得不错,但有时生成的代码太难理解了。
这似乎主要是因为混淆工具利用JVM字节码规范不太受限制的特性来生成有效的字节码,而这些字节码无法映射回有效的Java代码(例如:过度重载)。
所以,我的问题是:是否有一种专门处理混淆字节码的反编译器?

你试过http://members.fortunecity.com/neshkov/dj.html吗? - Anirudh Ramanathan
@anirudh4444 它只能在Windows上运行。我需要一些可以在Ubuntu上运行的东西。 - JoaoHornburg
你可以使用wine/mono在Ubuntu上运行它。 - Anirudh Ramanathan
反向工程混淆的字节码真的很难。比起一开始混淆它来说,要困难得多。准备好花费大量金钱或者手动学习和翻译JVM字节码所需的时间。 - aramadia
4
我已经制作了一款专门处理混淆字节码的反编译器。生成的代码可能并不美观,但至少能够生成有效的代码,在那些其他反编译器容易失败的情况下也不会崩溃。你可以在这里获取它。https://github.com/Storyyeller/Krakatau - Antimony
2个回答

5

Fernflower已经不再官方提供,而且仍然可以通过相对简单的控制流转换来克服。 - Antimony
@Antimony 能解释一下什么是变形吗?据我所知,它甚至可以处理 ZKM 的不透明谓词插入,这是游戏中最好的流程混淆技术。 - obataku
Fernflower 回来了,孩子们! - thomas

5

我怀疑没有任何反编译器可以做到这一点。但是,您可以实现自定义字节码转换,并使用类似于ASM的东西来重命名重载的方法和变量名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接