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

时间:2011-01-10 05:45:26

标签: c# .net

我想在我的应用程序中存储密码以加密安装日期并将其存储在某个文件夹中,也可能在注册表中存储30天版本的应用程序。我一直在谷歌上搜索,大多数人建议加密安装日期。 我知道 无论我做什么仍然可以破解,但我希望它能够在没有回家的情况下破解相当难以解决。例如,我可以使用const字符串存储密码,该密码使用存储在另一个const字符串中的密码加密,依此类推。这会让它变得有点复杂。但由于字符串混淆似乎是混淆器的常见任务,我想知道是否有更好的方法可以做到这一点,以防任何人知道混淆器通常如何在代码中混淆字符串,所以我可以重复这个过程。

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

(而且我仍然希望进行30天的试用。我已经阅读了很多其他选项,例如制作免费版本和类似的东西.30天版本是我个案中最好的选择。)

2 个答案:

答案 0 :(得分:4)

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

然后你必须确保他们不会继续注册新的密钥等。

通过反编译和重新编译应用程序可以避免任何超出此限制的内容。

在日期构建

我通过识别用户计算机的功能做了一些更复杂的事情。我会解释一个简单的方法。请记住,如果他们真的想要反编译/重新编译,这将无法正常工作,但我会说它相当困难。

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

这是您的新许可证密钥。您可以在注册时将它们剪切并粘贴到您的应用程序中。

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

请注意,这只是阻止用户共享或利用您的软件的简单方法。 这些都不是高安全级别的技术,如果他们真的想要,会导致关键的破解者。

答案 1 :(得分:3)

我同意之前的评论,即如果所有移动部件都是您的应用程序的本地部分,那么拥有技术技能和一点空闲时间的人将会破坏您放在一起的任何加密/误导方案。混淆工具(如Dotfuscator商业SKU)都包括“字符串加密”,但这种特殊的转换被认为是最弱的(与控制流混淆或过载感应重命名相比)。一旦字符串被破坏,“解密”函数就会在文本在运行时弹出之前被注入到堆栈中 - 任何想要花时间跟踪你所经历的任何进程的人都会很快将所有的技巧都放在前面。他们(除非一些技巧是遥远的)。所以,你提到你并没有试图做出任何防弹措施 - 只是减慢人们的速度并阻止机会主义的黑客攻击 - 事实就是如此,那么这种技术很好 - 你会阻止“机会主义的黑客”谁将会四处寻找有趣,但很容易被推迟(但这将是它的程度)。

最后,如果您的应用程序是偶然的WP7应用程序 - 那么Dotfuscator的完整商业版本可以免费获得(包括字符串加密,控制流程等),请访问www.preemptive.com/windowsphone7 .html