【问题标题】:C#: How to Make it Harder for Hacker/Cracker to Get Around or Bypass the Licensing Check? [closed]C#:如何让黑客/破解者更难绕过或绕过许可检查? [关闭]
【发布时间】:2011-05-30 18:32:42
【问题描述】:

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

假设用户已将 License 文件保存在 Application.StartupPath 下,所有用户均可读取。

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

如果应用程序可以找到并验证,我们让用户继续使用全部功能。

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

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

那么我们应该把许可证检查放在哪里?

P.S.:另外,如果我放置一个全局变量 IsLicensed (true / false) 来限制功能是否安全?黑客更改 IsLicensed = true 容易吗?

【问题讨论】:

标签: c# licensing


【解决方案1】:

软件许可的第一法则:一旦您允许将软件安装在您无法控制的计算机上,您就无法控制它。

如果您想保持对代码的控制,您需要将其设为 Web 服务,并为最终用户提供与该 Web 服务接口的瘦客户端。

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

在几乎所有情况下,您都应该专注于改善用户体验,而所有形式的复制保护反而会使用户体验变得更糟。一旦您达到从warez 站点下载并通过多次病毒扫描运行它的体验比为合法版本进行许可设置更好的地步,您就输了。

【讨论】:

  • 这个。把时间花在开发复制保护上是不好的,因为这些时间本来可以用于实际的应用程序开发。
  • @Ben Voigt 和 vash47:我明白你的意思。但在这里我想做的只是让它更难破解。我们的脑海中应该有一些琐碎的想法。
  • @Peter Lee:如果你只想让它“稍微”难以破解,那就使用一个好的混淆器(注意:dotfuscator 不是一个很好的混淆器)。
  • @Peter:那是浪费时间。如果您不是专家,您将花费数小时将饼干减慢几分钟。最具成本效益的目标是“让老实人老实,不要担心饼干”,但即使这样也有点降低用户体验。
  • 除此之外:如果您确实有值得通过警惕的许可证/版权保护来保护的东西,那么您可能正在研究价值数千美元的东西,这或多或少意味着您不是单飞。即使那样,我也几乎建议将许可部分外包给专门从事该领域的公司。但是 +1 表示不用担心太多,当然 +1 表示确保您的版权保护不会破坏程序的用户体验!
【解决方案2】:

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

您的目标不应该是让许可流程牢不可破,而是让您的软件本身值得购买。这是一个更好的保护。破解者(只有他们,黑客是完全不同的东西,请参阅this article 了解更多信息)不会因此受到阻碍,但如果该软件物有所值,就会有更多人购买它。

【讨论】:

  • @Fermaref:是的,我认为混淆代码会使其更难破解。
  • 代码签名实际上只会让用户更难以欺骗用户认为文件是真实的。但在这种情况下,用户打算使用破解版,因此代码签名完全没有任何作用。
  • 本不正确。代码签名意味着程序集是强命名的,这意味着它为框架提供了一种检查其真实性的方法,因此除非您也去掉强名称(坦率地说,它是可能的)。这只是另一个减速(因为所有程序集中的所有引用也必须更改),但如果有足够的时间,也会被破坏。
  • 否;您只需sn -Vr 即可绕过验证。
  • 这是否也说明了程序集中的强名称引用?
【解决方案3】:

我认为应该在源代码的几个不同的地方进行检查;捕获所有这些比只捕获一个要困难得多。此外,如果想保护用 C#(或任何其他 .NET 语言)编写的程序,应该考虑使用一些 obfuscator。相反,破解者甚至 lamer 将能够使用诸如 .NET Reflector 之类的软件来破解程序

【讨论】:

  • 我会尝试混淆代码 :-) 谢谢。
【解决方案4】:

如前所述,可以简单地使用 .NET 反射器来获取软件的整个源代码(事实上,即使你是用 C# 编写的,它甚至可以用 VB.NET 或其他语言获取它!) .如果您希望有机会减慢破解程序的进度,则必须混淆您的程序集。

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

正如 Ben Voigt 指出的那样,这确实没有好的答案。如果您需要不可复制的内容,请将其设为闭源 Web 应用程序。 Astalavista 会告诉你大多数东西已经被破解了。花费数千美元的 Adob​​e 产品已被破解,我相信他们的员工非常精通版权保护技术。

【讨论】:

  • 混淆代码是个好主意,但我认为同时,将许可检查放在某处也应该使其更难破解,这是我真正的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 2021-06-09
  • 2011-09-07
相关资源
最近更新 更多