调试Java混淆代码

5
我们计划对项目进行混淆,但不想失去远程调试和热部署的功能。请问有没有相关工具可以实现这个需求?如果只是简单的混淆,比如重命名类、方法和变量,就足够了。
[编辑] 我们使用的是Intellij IDEA,但没有找到适用于此任务的插件。
2个回答

5
我们有相同的需求(简单混淆,需要后期调试),并且我们使用 ProGuard。它是一个Java应用程序,可以集成到Ant任务中。
它可以做很多事情,但也是完全可调的。因此,您可以保持简单的混淆。其中一个选项是生成“符号对应表”,它允许您从混淆的代码中检索非混淆的代码。(它跟踪变量xyz在类qksdnqd中实际上是MeaningfulClassName类中的myCuteVarName)
编辑:混淆可能会很棘手。一些例子:
  • 您无法更改主方法的名称。
  • 您是否使用类加载器?在混淆之后仍然能够检索类吗?
  • 您的ORM映射如何?您的Spring上下文呢?(如果有)
编辑2: 您还可以查看:

是的,我知道SC表。但是我和我的团队并不是那些能够轻松调试和更改混淆代码的大师,即使使用了这个表 :) 所以我只是在寻找一种可以让我透明地调试代码的工具。 - Vitaly
你不必成为大师,只需向应用程序提供表格和混淆的jar文件,它们就会再次变得可读(减去注释)。但是,我认为您不能使用此过程进行“热交换”(这相当于删除并替换所有jar文件)。 - Antoine Claval
也许我没有理解清楚。我能否远程“逐步”调试混淆代码,并在某种调试器中同时查看“正常”的代码(无需任何其他操作,如查看表格、启动其他应用程序等)? - Vitaly
经过一些严肃的配置工作,您将拥有两个Ant任务。一个使您的编译代码不可读,并创建一个文件作为输出。第二个Ant任务将文件和您的不可读编译代码作为输入,并输出可读的编译代码。 - Antoine Claval
补充前面的评论:该文件是符号表。如果您的应用程序正在服务器上运行,您将不得不停止它。 - Antoine Claval
你没有回答这个问题:如何逐步调试混淆的远程机器上的代码(例如使用ProGuard)。我也遇到了同样的问题。翻译堆栈跟踪很容易,但是关于调试方面却没有任何信息... - Daniel

0
请查看SD Java混淆器。它会剥离注释和空格,并重命名所有非公共成员/方法/类名。
它还会为您提供代码混淆的映射,例如将每个符号FOO混淆为XYZ,一个映射FOO->XYZ。这意味着如果您得到一个回溯提到XYZ,您可以轻松确定原始符号FOO。当然,由于只有您(进行混淆的人)拥有此映射,因此只有您可以这样做。

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