考虑到这一点,存在几种不同类型的混淆。让我们开始混淆源代码,这完全是浪费时间。没有它,很难理解!因此,让我们专注于混淆交付包,如何将代码交付给用户。
轻微混淆
存在较小的混淆,以防止临时用户刺入手指并轻易弄碎东西。它并不能排除那些坚定的黑客,但是在确保您被要求支持的东西确实是您真正提供的东西方面确实有价值。这类事情所需的保护级别确实非常低。交付包只需要看起来不可读且不可编辑(无需专业工具),那就足够了。
Java的最小化就是一个例子,尽管它并不是这样销售的。即使您足够坚决/有足够的毅力,即使在技术上完全有可能这样做,也没有人会愿意阅读和编辑缩小的JS文件。
与交付Java应用程序类似。仅将代码打包到可执行的JAR中,即使在城市公园中有礼貌的“ Please Keep Off the Grass”标志,也可以阻止大多数的愚蠢行为。
即使在交付C ++代码时,从可执行文件中剥离不必要的符号也足以视为轻微的混淆。关键在于,以用户身份读取结果很尴尬,但是以计算机的形式执行结果却不成问题。
重大混淆
主要的混淆是将确定的和知识渊博的用户拒之门外。这也是一场完全失败的比赛;如果计算机可以执行它,那么一个人可以将其拆开并确定其功能。您可以得到的最接近的结果是使程序不断地对其自身进行解密,从而将它一次执行的操作转换为另一次完全不同的操作。创建这样的东西将是相当困难的,并且仍然不能阻止真正的好黑客(尽管到最后,他们将与您完全交叉,因为解密所有这些自修改代码需要付出很多努力)。
考虑其他解决方案要好得多。例如,您可以将代码的“皇冠上的宝石”保留在您控制的服务器上,并且只允许对其进行服务调用,从而使客户端成为本质上免费的赠品,这是宝贵比特币的前端。或者,您可以采用更多合同/法律途径,仅将可执行文件移交给正式同意不会在您的代码中随意戳戳或在这样做的情况下补偿您的组织(因此这是某种形式的NDA)。目的是为黑客提供一种强有力的诱因,使他们不要黑客,并让用户使代码远离不受协议约束的任何黑客。
但是,您不能以为您的代码永远不会被破解。通过虚拟化,可以检查和跟踪执行的任何程序状态,而任何试图克服它的情况(例如,对外部时间源的时钟跟踪)将比黑客更可能给合法用户造成问题。(请参阅DRM的历史,以了解一旦代码掌握在对手手中,即使是非常有决心的信息发布者也无法保证其系统的安全。)最好集中精力于真正使合法用户满意。与通过适当地满足客户所带来的额外金钱相比,偶尔出现的裂缝所造成的损失将是零。