File 在Windows/Mac OS X/Linux上,在何处创建/保留许可证信息/试用版的机密文件?

File 在Windows/Mac OS X/Linux上,在何处创建/保留许可证信息/试用版的机密文件?,file,licensing,hidden,invisible,File,Licensing,Hidden,Invisible,我正在编写一个商业产品,它使用一个简单的注册机制,允许用户在购买前使用该应用程序演示一段时间 我的应用程序必须在某处存储注册信息(如果输入)和/或首次启动日期,以计算用户是否仍在演示/试用期内。虽然我已经基本完成了注册机制本身的工作,但现在我必须找到一种将注册信息存储在用户磁盘上的好方法 最明显的想法是将试用期存储在首选项文件中,但由于用户往往会不时删除/修补这些试用期,因此最好将注册信息保存在一个单独的、更隐藏的文件中 所以我的问题是:在Windows、Mac OS X和Linux上保存和创建

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

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

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

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

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

窗户 可能与Linux/Mac OS X非常相似—较新的Windows版本在文件系统权限方面变得更加严格


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

谢谢


更新
对我来说,这些文件的位置比讨论这种拷贝保护方式的好坏更为相关。

POSIX系统应该将应用程序数据放在用户主目录中的隐藏文件中。Windows系统应该把一些东西放在CSIDL_APPDATA下,老实说,不管你做什么,你都会被发现。如果您的系统是自包含的,也就是说,它不需要在运行时连接到Internet或其他设备,那么您的锁和钥匙必须位于代码或写入磁盘的数据中。因此,虽然您可以混淆钥匙(甚至可能是锁),但系统的所有者可以调用系统跟踪工具或其他任何工具来找到您。但我想你知道的。每个主要的软件供应商都尝试过各种方法来实现这一点,但每次都失败了


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

为了说明这种方法的问题,有一个基于Linux的媒体服务器将其免费试用时间戳存储在
/usr/bin/.tv
中。只需一次
扫描
某人就会意识到该文件正在被访问——在这种情况下,只需删除该文件即可重启试验


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

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

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


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

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

是一篇描述如何使用Java编程语言访问注册表的文章

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


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

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

在服务器端,使用私钥对用户信息进行加密/签名,并将其分发给用户。通过电子邮件发送许可证文件,让应用程序连接并下载,等等

在应用程序中,包括公钥。如果无法对文件进行身份验证/解密,则失败。如果可以,请继续运行。只有在无法验证许可证文件时,才需要重新连接到服务器。您只需要最原始的“许可证服务器”即可支持此功能。如果您通过电子邮件发送该文件,“许可证服务器”只是一个加密字符串并向用户发送电子邮件的脚本

没有任何东西可以保护您免受复杂的黑客攻击。但此解决方案将拒绝临时用户破坏您的许可证的能力


如果要防止用户多次重新注册或与其朋友共享许可证文件,请在服务器端和许可证文件中记录其MAC地址。就我个人而言,我不会这么做。而且它不会阻止老练的黑客,但这取决于你决定花多少时间玩猫捉老鼠的游戏。

这不是一个非常可靠的方法。你会考虑使用许可服务器吗?不,我的策略是尽可能使用最简单的软件保护,这样公平、付费的用户就不会受到影响。不想付钱的人无论如何也不会付钱。想要破解软件的人会