我的问题是,混淆是否有效?在回复这个答案的评论中,有人说:“如果你担心源代码被盗...混淆对于真正的破解者来说几乎是微不足道的。”。
我看过Dotfuscator社区版的输出:它看起来对我来说已经混淆了!我不想维护那个!
我明白,简单地“破解”混淆软件可能相对容易:因为你只需要找到软件中实现你想要破解的任何内容的位置(通常是许可证保护),并添加一个跳转以跳过它。
如果担心不仅仅是由终端用户或“盗版者”而引起的破解问题,而是“源代码盗窃”的话,换句话说,如果您是软件供应商,担心的是其他供应商(潜在竞争对手)会逆向工程重构您的源代码,然后将其用于自己的产品中或添加到其自己的产品中……那么简单混淆对抗这种风险足够还是不足呢?
第一次编辑:
所涉及的代码大约有20万行,运行在最终用户的计算机上(是一个用户控件,而不是远程服务)。
如果混淆确实对于真正的破解者来说“几乎是微不足道的”,我想要一些关于为什么它无效(而不仅仅是它的无效程度)的见解。
第二次编辑:
我不担心有人会反向算法:更担心他们将算法的实际实现(即源代码)重新用于他们自己的产品。
考虑到20 KLOC需要几个月的时间来开发,解密所有内容需要更多还是更少的时间(几个月)?
为了“窃取”某些东西,是否有必要解密它:或者一个理智的竞争对手是否可以将其整体纳入其产品中,同时仍然模糊不清,并接受它作为维护噩梦,并希望它需要很少的维护? 如果这种情况是可能的,那么混淆的.Net代码是否比编译的机器代码更容易受到攻击?
大部分混淆“军备竞赛”主要是为了防止人们甚至“破解”某些东西(例如找到并删除实施许可证保护/执行的代码片段),而不是防止“源头盗窃”?