1

我试图逆向工程.jar文件(基本上是一组.class文件)。但是,有两个难点:支持变量重命名的Java解混淆器?

  1. 一些变量,方法和类的名称均带有Unicode字符,不能正确显示。这使得源代码编辑非常不方便。

  2. 某些类以Java关键字(例如if)命名。因此,Java编译器会在重新编译反向工程源文件时发生抱怨。

是否有任何Java deobfuscators可以克服这些困难?

+0

Java中反编译器的状态是一个令人伤心的故事。我想要求解编译器,甚至试图打破混淆器... ...祝你好运。此外:你的问题显然是无关紧要的。您正在要求推荐非现场资源。 – GhostCat

+0

@GhostCat我没有要求反编译器。我正在寻找一种方法来更改JAR文件中的变量名称。支持变量重命名的工作Java解混淆器显然是解决此问题的最佳方法。如果反编译器具有该功能,那也是一个解决方案,但不是问题本身。顺便说一下,所有问题都是推荐问题。我正在寻找解决我的问题的答案,而不是工具之间的比较。这看起来不是很主观,对吧? – Cyker

+0

你有没有试过jd-gui? –

回答

3

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

这就是说,我会建议重新考虑你的方法。 Java编译和反编译都是有损进程。反编译对逆向工程很有用,但通常不能指望能够重新编译反编译的代码。如果它以前被混淆了,你可以忘记它。

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

+0

这个答案看起来不错。其实我只是制定了一个与我的应用程序配合使用的Proguard配置。结果看起来好多了,尽管仍然有一些公共变量的名字必须保持不变。也谢谢你指出Krakatau。其实我正在开发Android系统,并且有些类似于smali/baksmali。我会继续努力,看看事情是否会最终解决。 – Cyker

0

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