重新混淆已经被混淆的代码是否有问题?

9

我曾经使用过Java混淆器,但有一些很容易被逆向工程。我认为它可能没有混淆得足够。

对于应用两个阶段的混淆,是否错误或存在问题?

  1. 使用ProGuard进行混淆
  2. 最后使用商业产品Zelix Klassmaster

--

这是一个不好的方法吗?只应该使用一个混淆器吗?


从意义上讲,“没问题”,也就是说不会发生任何不好的事情。 - Oliver Charlesworth
4
我认为这是一个很好的问题。不知道为什么它被投了“关闭”的票。也许应该稍微重新表述一下。 - MByD
我投票关闭此问题,因为从客观意义上讲,“好”和“坏”的含义不明确。 - Oliver Charlesworth
@oli,你本可以询问 Kyle 重新表述它,而不是投票关闭。 - Paul
@oli,我已经重新表述了我的问题。 - Kyle
@Oli,我在谷歌上搜索了一下,找到了这个网站,那有什么问题呢?你们这些人需要放下高姿态;这个网站不仅仅是为专业开发者而设的。如果你们想让它变成那样(很多人都这么想),我相信我可以找到另一个更受欢迎的网站。我保证我不是唯一一个这样犹豫的人。 - nckbrz
2个回答

4
只要代码仍然正确运行,不管使用多少种混淆器,都应该没问题。记住,使用混淆器的主要目的是尽可能地使代码难以阅读,同时保持其正确性。

2
重新混淆混淆代码是一种众所周知的反混淆代码的方法。例如,您可以混淆类名,使其名称不形成有效的Windows文件名,如:
class COM1 { ... }

反编译会生成一个名为COM1.java的文件,这不是一个有效的Windows文件名,因此会破坏许多反编译器。

解决方法是首先使用名称字典(如class1、class2、method1、method2、field1、field2)重新混淆,然后再进行反编译。反编译代码现在不仅更有效,而且更易读。

通常,连续使用混淆器会导致混淆代码与最后一个使用的混淆器一样强。(即链条的强度取决于最后一个环节)

我建议您坚持使用一个混淆器,但确保您了解混淆过程中的每个选项以及撤销操作的难易程度。


想象一下最后的混淆器只是复制了代码。那么这会使之前的混淆步骤变得不那么有效吗?我认为它就像最强的链接一样强大。 - Ira Baxter
@IraBaxter 我明白你的意思,但是很多混淆技术可以通过重新混淆来撤销。 - Matiaan
在串联使用混淆器时,通常会导致混淆代码的强度与最后一个使用的混淆器一样强。(即链条的强度取决于最后一个环节)。为什么呢? - user207421
一些混淆器通过添加不必要和误导性的代码来进行混淆。其他混淆器会删除不必要的代码(不作为混淆的一部分,而是作为优化的一部分)。显然,将这两个混淆器串联起来并不能创建一个更强大的链。 同样地,通过使类名成为无效的Windows文件名进行混淆,然后通过尽可能缩小类名来混淆也会撤销已经完成的工作。 - Matiaan
如果一个混淆器的结果(“添加不必要的代码”)可以通过机械方法(“简单的死代码分析”)轻松删除,那么这个混淆器并不是非常强大。所以同意连续使用两个混淆器并不能让它更加强大。但这不是我的重点。关于你的例子,混淆文件名的混淆器即使应用另一个以不同方式实现相同效果的混淆器,也无法通过机械手段恢复。 - Ira Baxter

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