C#:如何使黑客/cookies更难以避开或绕过许可证检查?
首先,我明白,几乎所有的应用程序都可以被破解(特别是用C#编写)。 我的问题是要使它更难以破解。
假设用户已将Application.StartupPath下的License文件保存在所有用户都可以读取的位置。
然后,每次应用程序启动时,都会检查是否可以查找和validation许可证文件。
如果应用程序可以find并validation,我们让用户继续完整的function。
如果没有,我们提示MessageBox显示“未经许可,继续使用试用版,function受限”。
我的问题是,如果我是黑客/黑客,我会尝试避开或绕过许可证检查,而不是破解许可证文件,因为如果我们使用RSA签名,则很难破解许可证文件。
那么我们应该在哪里进行许可证检查?
PS:还有,如果我把一个全局variablesIsLicensed(true / false)限制function是否安全? 黑客更容易改变IsLicensed = true吗?
软件许可的第一法则:一旦您允许将软件安装在您无法控制的计算机上,您就无法控制软件。
如果要保持对代码的控制权,则需要将其设置为Web服务,并为最终用户提供一个与该Web服务接口的瘦客户端。
在许多情况下,这是不可接受的,因为即使用户没有互联网连接,用户也希望能够使用他们的软件。
在几乎所有情况下,您都应该专注于改善用户体验,而所有forms的版权保护都会使情况变得更糟。 一旦你从warez站点下载并通过多次病毒扫描运行它的经验比为合法版本设置许可证更好,那么你就失败了。
你可以对代码进行混淆处理(反编译/使用reflection器比较困难),但是有足够的精力和知识会被破坏,之后很容易改变组件的字节码,从而绕过许可证检查。 而且,你可以投资这些钱来让你签署你的程序集,这会使程序集本身变得更加困难,但是有足够的能量(不仅仅是打破混淆),这也可以被规避。
你的目标不应该是使许可证过程牢不可破,而是让你的软件本身值得购买。 这是一个更好的保护。 破解者(只有他们,黑客是完全不同的,看这篇文章的更多)不会受到这个阻碍,但是软件是值得的,更多的人会买它。
我认为这个检查应该在源代码的几个不同的地方完成。 抓住所有这些比一个更难。 另外,如果要保护以C#(或任何其他.NET语言)编写的程序,则应考虑使用一些混淆器 。 在对应的一个cookies,甚至拉默将能够使用一些像.NETreflection器的软件破解程序
如前所述,可以简单地使用.NETreflection器来获取软件的完整源代码(实际上,甚至可以使用VB.NET或其他语言,即使使用C#编写它也可以)。 如果你希望有机会减缓破解者的进度,你必须混淆你的程序集。
什么是阻止人们直接复制许可证? 如果你有一个签署的许可证,那么只需要在两个地方签署 – 你有什么措施来阻止这个? 不要在意一个全球variables是否会进一步削弱你的保护,而不考虑琐碎的“裂缝”。
本·福伊特(Ben Voigt)指出,这确实没有什么好的答案。 如果您需要某些不可复制的内容,请将其设置为封闭源代码的Web应用程序。 Astalavista会告诉你,大部分东西已经被破解。 花费数千美元的Adobe产品已经被破解,我相信他们的员工非常熟悉复制保护技术。