13

我正在编写一个商业产品,它使用简单的注册机制并允许用户在购买前使用应用程序进行演示。

我的应用程序必须在某处存储注册信息(如果输入)和/或首次启动日期,以计算用户是否仍在演示/试用期内。虽然我已经完成了注册机制本身,但我现在必须找到一种将注册信息存储在用户磁盘上的好方法。

最明显的想法是将试用期存储在首选项文件中,但由于用户倾向于不时删除/修改这些文件,因此将注册信息保存在单独的、更隐藏的文件中可能是个好主意。

所以这是我的问题:在 Windows、Mac OS X 和 Linux 上保存和创建此类隐藏文件的最佳位置/策略是什么?到目前为止,这是我想到的:

Linux/Mac OS X

当涉及到用户可以写入文件的位置时,大多数类 Unix 系统都相当锁定。在大多数情况下,这只是/tmp目录和用户的主目录。我想这里最简单的方法可能是创建一个带有点前缀的文件以使其不那么明显,然后给它一个不会让它明显与我的应用程序相关联的名称。

视窗

可能很像 Linux/Mac OS X - 较新的 Windows 版本在文件系统权限方面变得更加严格。


无论如何,我想听听你的想法和想法。如果您过去已经实现了类似的东西,那就更好了。

谢谢!


更新

对我来说,这些文件的位置比讨论这种复制保护方式是好还是坏的问题更重要。

4

7 回答 7

4

谁在乎你把文件放在哪里。它是您要保护的内容。

在服务器端,使用私钥加密/签署用户信息并将其分发给用户。通过电子邮件发送许可证文件,让应用程序连接并下载它,无论如何。

在您的应用程序中,包括公钥。如果您无法验证/解密文件,则失败。如果可以,请继续发挥作用。如果您无法验证许可证文件,您只需要重新连接到服务器。您只需要最原始的“许可服务器”来支持这一点。如果您通过电子邮件发送文件,“许可服务器”只是一个脚本,它加密字符串并向用户发送电子邮件。

没有什么可以保护您免受复杂的尝试来破解您的应用程序。但是此解决方案将拒绝临时用户破坏您的许可证的能力。

如果你想防止用户多次重新注册或与他们的朋友分享许可证文件,记录他们的MAC地址服务器端和许可证文件。就个人而言,我不会这样做。它不会阻止老练的黑客,但您可以决定在猫捉老鼠游戏中花费多少时间。

于 2010-04-30T18:04:23.163 回答
1

对于 Windows,您可以尝试使用独立存储,它将文件存储在产品唯一的位置,该位置通常足够隐蔽(并且具有相当深的路径),并且具有对开发人员完全透明的优势。

于 2010-04-30T17:25:50.837 回答
0

POSIX 系统应将应用程序数据放在用户主目录中的隐藏文件中。Windows 系统应该在CSIDL_APPDATA.

于 2010-04-29T13:16:18.977 回答
0

说实话,不管你做什么,都会被发现的。如果您的系统是独立的,即它在运行时不需要连接到 Internet 或其他设备,那么您的锁钥匙都必须在您的代码或写入磁盘的数据中。因此,虽然您可以混淆密钥(甚至可能是锁),但系统所有者可以调用系统跟踪工具或任何其他工具来找到您。但我想你知道这一点。每个主要的软件供应商都尝试了各种方法来完成这项工作,但每次都失败了。

我认为你唯一真正的希望是定期让你的软件电话回家,看看它是否还有有效的许可证。

于 2010-04-29T13:18:22.020 回答
0

为了说明这种方法的问题,有一个基于 Linux 的媒体服务器将其免费试用时间戳存储在/usr/bin/.tv. 只需一个strace人就可以意识到正在访问该文件 - 在这种情况下,只需删除该文件即可重新开始试用。

如果您是单个开发人员,您将不得不花费大量金钱和/或时间来实施只需要一个人破解的保护方案,以便所有人都可以使用。当然,您的目标可能只是阻止偶然的软件盗版,在这种情况下,即使是最基本的保护(例如上述方法)也可以发挥作用。

于 2010-04-29T15:58:31.430 回答
0

特别是在 Mac 上,如果是用户许可证,此类文件应位于 ~/Library/Application Support/YourAppName 中,对于机器许可证,则应位于 /Library/Application Support/YourAppName 中。

当用户许可我的应用程序时,我将文件写入 ~/Library/Application Support/MyAppName,因为这不需要特殊权限,但如果我创建了一个,请尝试从两个位置读取它以允许机器许可证。

于 2010-04-30T17:35:51.513 回答
-1

使用 Windows 版本的注册表。它是为将数据保存在中心位置而构建的,并且作为额外的好处,如果用户删除了您的整个文件夹,则设置仍位于寄存器中(*)

stackoverflow上有一篇文章描述了如何使用 Java 编程语言访问注册表。

我不认为 Mac 有这样的东西,我知道 Linux 肯定没有,但这是一个开始。

(*) 对于可以轻松删除属于您应用程序的密钥的修补用户来说,注册当然也不安全。

于 2010-04-30T17:45:53.053 回答