c# - 混淆器中的字符串混淆是如何工作的?

标签 c# .net

我想在我的应用程序中存储一个密码来加密安装日期并将其存储在某个文件夹中,也许还存储在注册表中以获取我的应用程序的 30 天版本。我一直在谷歌上搜索很多,大多数人建议存储加密的安装日期。 我知道我所做的一切仍然可以被破解,但我希望它在不打电话回家之类的情况下相当难以破解。例如,我可以让一个 const 字符串存储一个密码,该密码使用存储在另一个 const 字符串中的密码加密,等等。这会使它变得有点复杂。但是由于字符串混淆似乎是混淆器的一项常见任务,我想知道是否有更好的方法来做到这一点,以防你们中的任何人知道混淆器通常如何混淆代码中的字符串,以便我可以重复该过程。

(我不打算购买混淆器。我使用的是 dotfuscator 的免费版本,它不会混淆字符串,这很好,但我不会购买付费版本只是为了混淆单个字符串(在如果付费版本混淆了我不关心的字符串)。)

(而且我仍然想进行 30 天试用。我已经阅读了很多关于其他选项的信息,例如制作自由光版本等等。30 天版本是我的最佳选择。)

最佳答案

您还需要考虑当用户删除您的所有注册表项并重新安装您的应用以再获得 30 天时会发生什么。 “最佳”选项是生成具有内置日期的注册码。如果他们决定重新安装您的应用程序,他们必须使用有效的注册 key ,并且他们唯一拥有的是日期较早的 key 。

然后您必须确保他们不会继续注册新 key 等。

除此之外的任何事情都可以通过反编译和重新编译您的应用程序来规避。

建立一个日期

我做了一些更复杂的事情来识别用户计算机的特征。我会解释一个简单的方法。请记住,如果他们真的想反编译/重新编译,这是行不通的,但我会说它相当困难。

  • 为您的产品生成加密 key 。
  • 将其转换为 byte[],因此它不是字符串。 (但也请记住,“默默无闻并不安全”,但我们并不是真的要结束所有的许可方案)
  • 获取用户的全名并将其连接到当前日期,然后将其与他们的许可证有效天数连接起来。您最终可能会以 01/10/2011 30 Andrew Finnell 作为最终字符串。
  • 加密该字符串并将其转换为 Base64。

这是您的新许可证 key 。当他们去注册时,您可以让他们将其剪切并粘贴到您的应用程序中。

如果该 key 太难管理,您可以做一些不同的事情。基本上你按照我说的做,但只取前 16 个十六进制字符。然后,您将其与他们的姓名、日期和天数一起存储在注册表中。当您的应用程序加载时,您会使用这些存储的值(名称、日期、日期等)生成一个新 key ,并将前 16 个字符与存储在注册表中的内容进行比较。

请记住,这只是一种防止用户共享或利用您的软件的简单方法。 这些都不是高安全级别的技术,如果他们真的愿意的话,会导致破解 key 。

关于c# - 混淆器中的字符串混淆是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4644017/

相关文章:

c# - 使用 Entity Framework 查询许多(~100)个搜索词

c# - MVVM - 模型教程?

c# - 什么时候使用 [MTAThread]?

c# - 使用 foreach 不可能在 ListItemCollection 上隐式键入,但可以使用 for 循环

.net - 如何从 VBScript 调用 Windows 服务的方法?

c# - ConcurrentDictionary 陷阱 - 来自 GetOrAdd 和 AddOrUpdate 的委托(delegate)工厂是否同步?

c# - 将 HttpPostedFileBase - pdf 类型转换为 png/jpg 类型

c# - 从 C# .NET 应用程序连接到 SAP Web 服务

c# - 与用于键入密码的文本框相关的问题

c# - ServiceStack 和 JSV : When I serialize a Dictionary<string, 对象 > 'object' 的类型在反序列化时丢失