我正在构建一个Spring MVC Web应用程序。
我计划使用Hibernate。
我对混淆等方面没有太多经验。
混淆应用程序的潜在缺点是什么?
我知道可能存在调试应用程序和恢复丢失源代码的问题。
实际运行应用程序是否会有任何已知问题?会引入错误吗?
由于这是我寻求一般指导的领域,请随时提出我应该注意的任何问题。
我正在构建一个Spring MVC Web应用程序。
我计划使用Hibernate。
我对混淆等方面没有太多经验。
混淆应用程序的潜在缺点是什么?
我知道可能存在调试应用程序和恢复丢失源代码的问题。
实际运行应用程序是否会有任何已知问题?会引入错误吗?
由于这是我寻求一般指导的领域,请随时提出我应该注意的任何问题。
很惊讶没有人提到速度 - 通常,代码越难懂=运行速度越慢。
[编辑] 我不敢相信这个答案得到了-2。这是一个正确的答案。
缩短标识符和删除未使用的方法会减小文件大小,但对运行速度没有任何影响(除了减少加载时间的几个纳秒)。与此同时,程序的大部分混淆来自于添加的代码:
这些都是常见的混淆技术,会导致程序运行更慢。
当然,使用代码混淆器可能会带来一些潜在的性能/维护问题,但是一个好的代码混淆器至少可以帮助你解决其中的一些问题。以下是需要注意的事项:
但是,正如你所看到的,这些影响有些微妙和理论- 因此,在混淆之后,你需要对你的应用程序进行大量的实测,就像你对任何其他重要更改一样。
你还应该小心不要假设混淆可以隐藏你想要隐藏的代码/算法(如果这是你的意图) - 使用反编译器查看结果混淆过的类的内容。
一个免费的 obfuscator 是 Babel,你可能想要试试。它被设计用于命令行(像许多其他的 obfuscators 一样),有一个 Reflector addin 可以为你提供 UI。
当涉及到混淆时,你真的需要分析你的目标是什么。在你的情况下 - 如果你有一个 web 应用程序(mvc),你计划将其作为可下载的应用程序出售吗?(如果不是,并且你将源代码保留在你的 web 服务器上,那么你不需要它)。
你可以查看组件并选择只混淆某些部分...而不是整个应用程序。一般来说,当你在开发后尝试添加混淆时,ASP.Net 应用程序很容易崩溃,因为使用了大量反射。
几乎以上提到的所有内容都是正确的...这完全取决于你打开多少功能来使你的代码难以逆向:
成员重命名(字段/方法/事件/属性)是最常见的操作之一(有不同的方式:从将方法从GetId()更改为a()到不可读的字符和命名空间的删除)。顺便说一句:这通常会破坏反射。你的程序集文件可能会变得更小,因为使用了较小的字符串。我的建议是只有在你知道为什么要使用它并且以此为设计目标时才使用它...不要在完成代码后尝试添加它(我曾经这样做过,不好玩)