【问题标题】:Java deobfuscator supporting variable renaming?Java反混淆器支持变量重命名?
【发布时间】:2017-03-19 11:36:52
【问题描述】:

我正在尝试对 .jar 文件(基本上是一组 .class 文件)进行逆向工程。但是,有两个困难:

  1. 部分变量、方法和类以unicode字符命名,无法正常显示。这使得源代码编辑非常不方便。

  2. 某些类以 Java 关键字 命名(例如 if)。因此,Java 编译器在重新编译逆向工程的源文件时会报错。

是否有任何 Java 去混淆器可以克服这些困难?

【问题讨论】:

  • Java 中反编译器的现状是一个悲伤的故事。我想要求反编译器甚至试图打破混淆器......祝你好运。此外:你的问题显然是题外话。您正在寻求场外资源的推荐。
  • @GhostCat 我不是要反编译器。我正在寻找一种方法来更改 JAR 文件中的变量名。支持变量重命名的有效 Java 反混淆器显然是解决此问题的最佳方法。如果反编译器具有该功能,那也是一种解决方案,但不是问题本身。顺便说一句,所有问题都是推荐问题。我正在寻找解决我的问题的答案,但不是工具之间的比较。这看起来不是很主观,对吧?
  • 你试过jd-gui吗?
  • @PradeepPati 是的。它只是无法正确显示 unicode 字符。而且它不处理 Java 关键字。我已经在问题中提到了这些问题。

标签: java reverse-engineering obfuscation decompiler deobfuscation


【解决方案1】:

有几种工具可以重命名 Java 标识符。例如,您可以在其上运行 Proguard 来重命名所有内容。

话虽如此,我建议重新考虑您的方法。 Java 编译和反编译都是有损过程。反编译对于逆向工程很有用,但您通常不能期望能够重新编译反编译的代码。如果它之前被混淆了,你还不如忘记它。

修改混淆代码的最佳方法是使用Krakatau assembler and disassembler。 Krakatau 程序集可以可逆地转换为字节码和从字节码转换,这意味着您可以编辑任意类而不会弄乱,无论它们如何被混淆。唯一的缺点是你必须熟悉 Java 字节码。

【讨论】:

  • 这个答案看起来不错。实际上,我刚刚制定了一个适用于我的应用程序的 Proguard 配置。结果看起来好多了,尽管仍然有一些公共变量的名称必须保持不变。还要感谢您指出 Krakatau。实际上我正在使用 Android 并且有 smali/baksmali 看起来与此类似。我会继续努力,看看事情是否会最终解决。
【解决方案2】:

Cuchaz 的Enigma 支持重命名局部变量。它不再更新并在不再更新的 BCEL 上运行。只要你不反编译任何 BCEL 无法处理的东西,它应该可以正常工作。

【讨论】:

    猜你喜欢
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2011-01-24
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2011-03-07
    相关资源
    最近更新 更多