【问题标题】:Decompiling obfuscated java bytecode [closed]反编译混淆的java字节码[关闭]
【发布时间】:2011-09-20 14:49:04
【问题描述】:

我在一个运行 Java 应用程序的平台上工作。这些应用程序经常被混淆,其中大多数使用 ProGuard,这使得调试我们平台的问题变得非常困难。

目前我正在使用 JD (http://java.decompiler.free.fr/) 来反编译这些应用程序。京东做得不错,但有时生成的代码太难理解了。

这似乎主要是因为混淆工具利用 JVM 字节码的约束较少的规范来生成不会映射回有效 Java 代码的有效字节码(例如:激进的重载)。

所以,我的问题是:是否有专门用于处理混淆字节码的反编译器?

【问题讨论】:

  • @anirudh4444 它只在 Windows 上运行。我需要在 Ubuntu 上运行的东西。
  • 你可以使用 wine/mono 在 ubuntu 上运行它。
  • 逆向工程混淆字节码真的很难。比一开始混淆它要困难得多。准备好花费大量金钱或花大量时间手动学习和翻译 jvm 字节码。
  • 我制作了一个专门用于处理混淆字节码的反编译器。生成的代码不一定漂亮,但至少它会生成有效的代码而不会崩溃,因为这很容易让我尝试过的所有其他反编译器都陷入困境。你可以在这里得到它。 github.com/Storyyeller/Krakatau

标签: java jvm bytecode proguard decompiler


【解决方案1】:

我怀疑任何反编译器都会这样做。但是,您可以使用 ASM 之类的方式实现自定义字节码转换并重命名重载方法和变量名。

【讨论】:

    【解决方案2】:

    这里的成员开发了一个名为 Fernflower 的反编译器。它自称是专门为反编译代码而设计的反编译器,但是您可能希望对其声明持保留态度。 它在这里上传: https://github.com/Zidonuke/Bukkit-MinecraftServer/blob/master/tools/fernflower.jar?raw=true

    【讨论】:

    • Fernflower 不再正式可用,但仍然可以通过相当简单的控制流转换来击败它。
    • @Antimony 解释一下什么变换? AFAIK 它甚至可以处理 ZKM 的不透明谓词插入,这恰好(发生了?)是游戏中最好的流混淆。
    • 蕨花回来了,孩子们!
    猜你喜欢
    • 1970-01-01
    • 2016-04-22
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 2012-01-19
    • 1970-01-01
    相关资源
    最近更新 更多