1

我为一位客户编写了一个程序。我为他实施了一种许可方法(签名的 XML 文件)。该客户希望该应用程序仅在其客户的 PC 上安装一次,并希望我“保护”它……尤其是因为他的许可证是有时间限制的。这些电脑无法访问互联网。我告诉他这绝对是愚蠢的,它无法保护这种东西(例如 VM),但他至少想要一点“安全性”。

现在我正在 Windows 机器上寻找一个每个用户都可写的好地方(没有 UAC),我可以在其中存储一些“秘密”数据(例如上次使用的数据),这样用户就不能只在个人电脑。

他也不应该只删除应用程序文件夹、设置时间、重新安装和使用程序,也不应该通过删除实际用户并使用新创建的软件来做到这一点。

我知道这真的很愚蠢,但我的客户坚持要...

我试图找到一些地方,但到目前为止没有运气。

有没有人知道一些满足这些要求的目录?

4

4 回答 4

3

也许注册表会更好?是的,这确实是一个可怕的要求。也许您可以将安装日期编码到 XML 文件中作为安装过程的一部分,也许可以以某种方式对其进行混淆。

于 2010-09-05T21:21:53.583 回答
2

我很确定无论您选择哪个目录,进程监视器都会破坏它,因此只需使用普通的应用程序数据目录即可。没有一个神奇的目录可以以某种方式帮助您隐藏在许可证检查期间您正在从中读取/写入的事实,只要您告诉客户这是多么不安全,我就不会花费很多时间

于 2010-09-05T21:19:11.233 回答
1

好的。我采纳了大家的一些建议 :) 我将文件放在 {sys}{My-GUID}\ 下,并为我的设置中的每个人授予此目录完全权限(innosetup)

认为这应该是......好吧......不知何故:)

并且@ NullUserException :他正在支付我的车......我不能解雇他:)

感谢您的回答

于 2010-09-07T22:05:52.603 回答
1

过去,当我有类似的愚蠢要求时,我使用过注册表。这就是我所做的:

  1. 在嵌入式资源中,为程序提供非对称密钥的公共部分
  2. 运行时,检查一些注册表项(稍后详述)。这是第一次运行,所以他们将缺席
  3. 向中央许可服务器发送 CPU 序列号(可能还有产品序列号)
  4. 服务器验证之前没有见过 CPU/序列号,生成到期日期/时间。如果有,请调出旧的到期日期/时间。如果过期日期/时间已过,则不返回任何内容,否则返回旧日期/时间
  5. 服务器向客户端发送到期日期时间和使用私钥签名的所有信息(到期、CPU、序列号)
  6. 客户端将到期日期/时间和签名数据存储在注册表中
  7. 在随后的运行中,客户端获取所有信息并将其与签名进行比较。如果签名无效,则删除注册表信息

所以现在,如果用户在窗口后运行程序,信息被删除,服务器将拒绝重新认证。如果他们尝试使用注册表信息复制到新机器,签名检查将失败。如果它们安装在新机器上,则重新验证失败(由于 CPU 序列号不同)。您唯一无法真正涵盖的是他们是否总是调整时间,尽管您可以通过 NIST 检查轻松找到时间。

缺点是它取决于互联网,你需要一个许可服务器。

于 2010-09-06T00:43:09.657 回答