在Windows注册表中隐藏秘密

3

我知道注册表不是一个最好的隐藏地方。

现在我正在编写一款许可软件,需要在注册表中保存试用信息,例如首次安装日期等。

在Windows注册表中,哪个子项符合以下条件:

  1. 用户不容易意外发现。
  2. 该值可以在Windows用户之间共享。
  3. 不会破坏Windows系统,而且注册表清理工具不会将该值视为垃圾。
  4. 如果可能,在Windows Vista和Windows 7上无需管理员权限即可使用

编辑:我已经排除了第4条,因为根据David Heffernan的回答,它与第2条不可能同时实现。


1
很抱歉,在用户的计算机上没有真正安全的数据存储位置。请阅读:http://security.blogoverflow.com/2011/09/storing-secrets-in-software/。 - Factor Mystic
3个回答

10

没有可以在没有管理员权限的情况下写入的注册表共享位置。因此,无法同时满足您的第2个和第4个条件。我认为您需要通过文件来完成此操作。

如果您准备放弃第4个条件,那么您需要将其存储在HKLM下以使其共享。 显而易见的地方是HKLM\Software\YourCompanyName\YourProductName。当然,您需要加密数据以避免篡改。一旦您完成了这个过程,您就不会真正关心您的用户是否发现它。


1
谢谢您的回答,但我认为HKLM\Software\MyCompanyName\MyProductName是注册表中用户搜索以清除试用数据的第一位置,如果他们看到任何加密值,他们可能会决定将其删除。 - F8R
1
如果被删除了就不要运行。噢。 - Hans Passant
1
@F8R 不要这样做。由于你正在将其写入 HKLM,因此需要管理员权限。将其作为安装时执行的操作,因为那时你拥有管理员权限。 - David Heffernan
1
@F8R 如果每次运行程序都需要 UAC 提升,那么没有人会想要你的程序。将信息放入文件中。 - David Heffernan
@David Heffernan,是的,我已经成功地使用基于文件的存储方式实现了这个功能,但如果可能的话,我也想使用注册表来保存数据。顺便说一下,当一切准备就绪时,我将把这个库发布为开源项目,地址为http://flexlx.codeplex.com/。 - F8R
显示剩余3条评论

2
你想防范什么?听起来你花了很多精力去“防止人们更改系统时钟以延长试用期”,但却没有任何努力去“防止人们编辑注册表键以延长试用期”或“防止人们在机器之间共享注册表键,将试用版转换为免费的完整版本”。我认为这些情况要常见得多。任何一个因为我在自己的机器上更改时钟而向我发出警告的软件都会被我迅速卸载。
我建议你不要自己尝试。有许多可以使用的许可证库已经考虑到了人们尝试欺骗软件的各种方式。但如果你必须这样做,因为你想尝试一下,那么请花些时间区分安装过程中发生的事情(可能需要管理员权限)和运行和检查过程中发生的事情(不应该需要)。一个必须运行提升权限的应用程序,只是为了每分钟写入HKLM中的许可证信息,也会在我的机器上立即被卸载。
因此,在安装过程中,将某些晦涩/加密的内容写入HKLM下的注册表键。同时,通过组合日期、电子邮件地址和其他信息等方式,使其不太容易从一台机器复制到另一台机器上。在运行时,你的代码应该部分地查看不变的注册表条目,部分地查看其他容易更改的内容(如AppData下的文件、HKCU键或当前日期),以决定是否可以运行该应用程序。(在运行时,如果HKLM键不存在或未通过校验和等检查,则拒绝运行并要求重新安装。重新安装可以考虑是否有人试图获得无限免费试用版。)专注于人们尝试欺骗许可证方案的主要方式,同时也要考虑可用性。坚持提升权限或阻止机器的常规使用会影响可用性。

1
谢谢您的回答,我认为我已经清楚地表达了我的意图。我正在编写许可证引擎,我要做的事情在这个领域并不是什么禁忌,而是由使用此许可证引擎的开发人员决定是否启用这个“烦人”的功能。 - F8R
一个应用程序如果没有其他原因而必须每分钟以提升的权限写入许可证信息到 HKLM,那么它也会在我的计算机上被立即卸载。开个玩笑:D,说真的,在 Windows Vista 以后,我们需要习惯这个 UAC(用户帐户控制)的东西。我曾经开发过一个简单的应用程序,只是从数据库保存和显示数据,但它需要以管理员权限运行。:P - F8R
1
@F8R 没有冒犯的意思,但如果你的应用程序不是管理实用程序,并且需要以提升权限运行,那么你做错了。除了安装软件或执行像 regedit 这样的管理员任务外,我拒绝进行提权操作。需要提升权限才能运行的数据库查询应用程序?不会发生的事情。 - Kate Gregory
是的,这与数据库库/连接器有关,而不是我的代码,几年前在我的Vista上,:D。 - F8R

1

安装时,你可以更改 HKLM 中某个地方的权限,以便所有用户都具有写入访问权限。

如果你选择的地方不是 HKLM\SOFTWARE\Your Company Name\something,那么你就是在做愚蠢的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接