Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:如何让黑客/黑客更难绕过或绕过许可检查?_C#_Licensing - Fatal编程技术网

C#:如何让黑客/黑客更难绕过或绕过许可检查?

C#:如何让黑客/黑客更难绕过或绕过许可检查?,c#,licensing,C#,Licensing,首先,我知道几乎所有的应用程序都可以被破解(特别是用C#编写的)。我的问题是让它更难破解 假设用户已将许可证文件保存在Application.StartupPath下,所有用户都可以从中读取 然后,每次应用程序启动时,它都会检查是否能够找到并验证许可证文件 如果应用程序能够找到并验证,我们将允许用户继续使用全部功能 如果没有,我们会提示一个消息框,显示“未经许可,继续使用试用版,功能有限。” 我的问题是,如果我是黑客/破解者,我会尝试绕过或绕过许可检查,而不是破解许可文件,因为如果我们使用RSA

首先,我知道几乎所有的应用程序都可以被破解(特别是用C#编写的)。我的问题是让它更难破解

假设用户已将许可证文件保存在Application.StartupPath下,所有用户都可以从中读取

然后,每次应用程序启动时,它都会检查是否能够找到并验证许可证文件

如果应用程序能够找到并验证,我们将允许用户继续使用全部功能

如果没有,我们会提示一个消息框,显示“未经许可,继续使用试用版,功能有限。”

我的问题是,如果我是黑客/破解者,我会尝试绕过或绕过许可检查,而不是破解许可文件,因为如果我们使用RSA签名,破解许可文件非常困难

那么我们应该把执照检查放在哪里呢


另外,如果我将一个全局变量IsLicensed(true/false)用于限制功能,是否安全?黑客更改IsLicensed=true容易吗?

您可以混淆代码(使其更难反编译/使用反射器),但如果有足够的精力和知识,它将被破坏,然后很容易更改程序集的字节码,从而绕过许可证检查。此外,您可以投资资金,使您能够签署您的程序集,这将使更改程序集本身变得更加困难,但如果有足够的精力(不仅仅是打破混淆),这也可以避免


您的目标不应该是使许可过程牢不可破,而是使您的软件本身值得购买。这是一个更好的保护。黑客(只有他们,黑客是完全不同的东西,更多信息请参见)不会因此受到阻碍,但随着软件的价值,更多的人会购买它。

我认为应该在源代码中的几个不同位置进行检查;要抓住所有人比只抓住一个人要困难得多。此外,如果想保护用C语言编写的程序(或者任何其他.NET语言),应该考虑使用一些程序。在另一种情况下,破解者甚至拉默将能够使用一些软件破解程序,如

软件许可的#1法则:一旦你允许你的软件安装在你无法控制的计算机上,你就无法控制它

如果你想控制你的代码,你需要把它变成一个web服务,并且只给最终用户一个瘦客户端来连接这个web服务

在许多情况下,这是不可接受的,因为用户希望能够使用他们的软件,即使他们没有互联网连接


在几乎所有情况下,您都应该将重点放在改善用户体验上,而所有形式的拷贝保护都会使其变得更糟。一旦你从warez网站下载并通过多次病毒扫描运行的体验比为合法版本进行许可证设置要好,你就输了。

如前所述,你可以简单地使用.NET reflector获取软件的全部源代码(事实上,它甚至可以在VB.NET或其他语言中获得,即使你是用C#!)。如果你希望有机会减慢破解程序的进度,你必须模糊你的程序集

什么是阻止人们直接复制许可证?如果你有一个已签名的许可证,那么它将只在两个地方签名——你采取了什么措施来阻止这一点?不管全局变量是否会在不考虑琐碎的“裂缝”的情况下进一步削弱你的保护


正如Ben Voigt指出的那样,这个问题确实没有很好的答案。如果你需要不可复制的东西,就把它做成一个封闭源代码的web应用程序。Astalavista会告诉你大部分东西都被破解了。花费数千美元的Adobe产品被破解了,我相信他们的员工对拷贝保护非常精通n技术。

这一点。花时间开发拷贝保护是不好的,因为这段时间本来可以用于实际的应用程序开发。@Ben Voigt和vash47:我理解你的意思。但这里我想做的只是让它更难破解。我们脑子里应该有一些琐碎的想法。@Pet二李:如果你只想让破解变得“稍微”难一点,那么就使用一个好的模糊器(注:点模糊器不是一个很好的模糊器)。@Peter:那是浪费时间。如果你不是专家,你会花几个小时来降低破解速度几分钟。最具成本效益的目标是“让诚实的人诚实,不要担心饼干",但即使这样也会降低用户体验。除此之外:如果你真的有值得警惕的许可证/拷贝保护的东西,你可能正在做价值数千美元的东西,这或多或少意味着你不是单飞。即使如此,我几乎建议将许可部分外包给这家公司专门做这方面的工作。但是a+1是为了不太担心,当然a+1是为了确保你的拷贝保护不会破坏你程序的用户体验!@Fermaref:是的,我认为混淆代码会使破解变得更困难。代码签名只会让用户更难相信文件是经过身份验证的但在这种情况下,用户打算使用破解版本,因此代码签名完全不起任何作用。这是不对的Ben。代码签名意味着程序集具有强名称,这意味着它为框架提供了一种检查其身份的方法,因此除非您也去掉强名称,否则无法更改其中的IL代码(坦率地说,这是可能的)。这只是又一次减速(因为所有程序集中的所有引用也必须更改),但如果有足够的时间,将会是