这是我们所有人在某个时候都必须考虑的问题。

经过多年和多种方法后,我倾向于总体上同意以下说法:“对于任何超过数百人使用的受保护软件,你都可以找到破解版本。到目前为止,每个保护方案都可以被篡改。”您的雇主是否强制使用反盗版软件?

而且,每次我发帖讨论这个话题,都会有人提醒我;“首先,无论你采用哪种保护措施,真正专注的破解者最终都会突破所有的保护障碍。”对于单个开发人员来说,最物有所值的 C# 代码保护是什么

因此,尽管有这两个广泛正确的免责声明,我们还是来谈谈“保护”吧!

我仍然认为,对于不太可能吸引熟练破解者的时间和注意力的较小应用程序,保护是一项值得的练习。

显然,无论你做什么,如果破解者可以通过修补应用程序来切换 IF 语句 (jmp) 的结果,那么世界上所有的密码和加密狗都无济于事。

所以我的方法是使用以下产品通过虚拟化来混淆代码:http://www.oreans.com/codevirtualizer.php我对这个产品非常满意。据我所知,它从未被击败过。我甚至可以用PEcompact压缩可执行文件 还有其他人有这方面的经验吗?

除了 EXEcryptor 的问题之外什么都没有http://www.strongbit.com/news.asp即使是网站使用起来也很头疼。执行任何 WMI 调用时,编译的应用程序会崩溃。

这种方法允许您用混淆包围较小的代码部分,从而保护安全检查等。

我使用在线授权方法,因为应用程序需要定期从服务器获取数据,因此用户长时间离线使用它是没有意义的。根据定义,即使该应用程序被破解,此时该应用程序也毫无价值。

所以简单的加密握手就足够了。我只是偶尔在混淆保护下检查一下。如果用户在不同的计算机上安装应用程序,则启动时会上传新 ID,服务器会禁用旧 ID 并返回新授权。

我还使用已编译应用程序的哈希值,并在启动时检查它以查看是否有单个位发生更改,然后从应用程序内将应用程序作为文件打开(带有读锁),以防止任何人在启动后更改它。

由于所有静态字符串在 .exe 文件中都清晰可见,因此我尝试使用通用的错误消息等。您在任何地方都找不到字符串“授权失败”。

为了防止内存转储,我使用了一种简单的文本混淆技术(例如对每个字符进行异或),这使得内存中的纯文本数据更难以与变量等区分开来。

当然,对于任何真正敏感的数据,都有 AES。我喜欢文本的计数器模式,因为这不会导致重复序列显示底层数据(例如空格序列)。

但是使用所有这些技术,如果可以从内存中转储密钥或初始化向量,或者绕过 IF 语句,那么一切都浪费了。

我倾向于使用 switch 语句而不是条件语句。然后我创建了第二个函数,它基本上是一个死胡同,而不是实际执行所需任务的函数。

另一个想法是编写带有添加变量的指针。该变量是授权的结果(通常为零)。这将不可避免地在某个时候导致 GPF。我仅在一些较低级别的授权失败后才使用此作为最后的手段,否则真正的用户可能会遇到它。那么你的软件的声誉就会降低。

你使用什么技术?

(这不是一个讨论实现某些东西的优点的话题。它是为那些决定做某事的人设计的)

有帮助吗?

解决方案

我不同意XSL。

我们保护我们的代码,而不是因为我们要保护我们的收入 - 我们接受那些谁是否会使用无证可能永远不会为它付出反正

相反,我们这样做是为了保护投资的我们客户已经在软件制作。我们认为,使用我们的软件,使他们更具有竞争力在其市场的地方,如果其他公司有机会获得它无需支付他们拥有不公平的优势 - 即它们成为无需许可费用的开销,因为具有竞争力

我们非常小心,以确保保护 - 这是土生土长的 - 尽可能不引人注目的有效用户,并为此目的,我们绝不会考虑一个现成的解决方案“在购买”可能会影响这一点。

其他提示

您不需要几百个用户,让您的软件破解。我恼火的有我的共享软件破解了这么多次,所以作为一个实验,我创建了一个名为魔术文本框(这仅仅是一个上有一个文本框的形式)程序,并将其发布到共享网站(它有它自己的PAD文件和一切)。一天后,魔术文本框的破解版是可用的。

这个经历使我几乎放弃了试图保护我的软件有什么比基本的复制保护更多。

我个人使用的代码技术 在这里讨论. 。这些技巧的好处是既可以给盗版者带来不便,又不会让合法最终用户的生活变得更加困难

但更有趣的问题不是“什么”,而是“为什么”。在软件供应商开始进行此类练习之前,构建威胁模型非常重要。例如,低价 B2C 游戏面临的威胁与高价值 B2B 应用程序面临的威胁完全不同。

帕特里克·麦肯齐 (Patrick Mackenzie) 有一篇很好的文章,其中他 讨论一些威胁, ,包括对4种潜在客户的分析。我建议在做出有关保护您的业务模型的选择之前,对您自己的应用程序进行威胁分析。

我实现了自己的硬件之前键控(加密狗),所以我不与问题完全陌生。事实上,我已经给它思想的大交易。我不与任何人违反版权法同意,因为你的饼干都在做。谁不希望有法律AQUIRE你的软件,而不应该做的副本。我从来没有侵犯软件著作权自己。如此说来...

我真的,真的不喜欢这里使用的词“保护”。你试图保护的唯一事情是的控件的。您是不会保护软件。该软件是蛮好的任何一种方式,因为是你的用户。

究其原因,从复制让人们和共享软件就是这样一个邪恶的PITA是防止这种activites是不自然的。计算机的整个概念围绕着复制数据,这是简单的人的本性,想要分享有用的东西。您可以打这些事实,如果你真的坚持,但是这将是一个终身的斗争。神不是让人类有什么不同,我不会购买那些无法复制的东西的计算机。也许这将是更好的找到一些方式来工作的的计算机和人,而不是对他们的战斗所有的时间?

我,与广大的专业软件开发人员一起,感到需要开发的软件,以便它可以做它的业务的公司全职工作,没有那么它可以有一个“软件产品”与人为稀缺“卖”给用户。如果我写了一般有用的东西(即不被认为是“竞争性优势”在这里),我们可以释放它作为自由软件。无需 “保护”。

从一些链路:

我试图解释这个概念是我所说的“裂解价差”。这不要紧,裂纹(或凯基,或盗版序列,或其他)存在您的应用程序。重要的是有多少人访问了裂缝。

其中/当查询的序列号:我在启动时检查一次。很多人说“检查各种各样的地方”,使其更难有人通过剥离出支票来破解。如果你想得特别恶劣的裂解装置,检查在各种使用内嵌代码的地方(也就是不外部化所有到SerialNumberVerifier.class),如果在所有可能使多线程,很难当它失败承认了。但是,这只是使得它更难使裂纹,也不是不可能,并记住你的目标一般不会打败饼干。击败黑客不会使你的钱可观的金额。你只需要击败在大多数情况下,一般用户和一般用户不能访问到调试器,也不知道如何使用的。

如果你要打电话回家,你应该和他们的用户信息,打电话回家,接受的序列号为您的服务器的脚本的输出,而不是与序列号打电话回家,并接受布尔等,作为输出。即你应该做的密钥注入,没有密钥验证。密钥验证具有最终的应用程序,这就是为什么公钥密码是做到这一点的最好办法内发生。其原因是,互联网的连接也是在对手的手中:)你是一个hosts文件改变远离休息一次,休息,到处都是漏洞,如果你的软件只是希望读一个布尔关闭互联网。

不要做一个“有趣”或“具有挑战性”的保护。许多饼干破解单独的智力挑战。让你的保护难以破解,但一样无聊越好。

有一些裂缝,其搜索字节模式在搜索修补的地方。他们通常不会被重新编译击败,但如果你的.EXE包装(用的ASProtect,犰狳等),这些类型的裂纹必须先解压缩.EXE ..如果你使用一个很好的包装,如的ASProtect,裂解将能够手动解开EXE使用组装级调试如SoftICE的,但将不能够创建一个工具,它自动解压缩的.EXE(事后申请字节补丁)。

XSL,即视非常窄的点与许多内置assumtions。

它似乎很明显,我认为,它依赖于从控制下的服务器提供任何东西的应用应当能够做到搞清楚的一个相当不错的工作我们谁拥有一个有效的帐户!

我也相信,定期更新(这意味着在不同的地点代码新编译的应用程序),会使破解vesrions很快就会过时。如果您的应用与服务器通信,发射的二次处理,以取代主可执行每周是一块蛋糕。

所以,是的,没有什么是不可破解的,但也有一些巧妙的设计固有的,它成为一个争论的焦点。这是显著的唯一因素是有多少时间是愿意它花饼干,多少努力都是为了让愿意在试图找到他们每周甚至每天都在努力的产品发挥的潜在客户!

我怀疑,如果你的应用程序提供了一个有用的宝贵功能,那么他们将愿意支付一个公平的价格。如果没有,竞争力的产品将进入市场,你的problme只是解决本身。

我已经使用.NET反应器中有良好的效果,过去 - http://www.eziriz.com/

我喜欢这个产品,它不要求你混淆代码,才能有良好的保护。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top