我们公司帮助将客户端软件从其他语言迁移到C++。我们为他们的应用程序提供C++源代码,以及用于运行时支持函数的头文件和编译库。我们对迁移和运行时都收费。最近,一个潜在客户要求迁移他们拥有的多个系统中的一个。这个系统包含7个程序,我们希望限制运行时,这样只有这7个程序可以访问它。我们可以通过在对象库中设置加密的到期日期来限制运行时,但是,由于我们必须为转换后的程序提供源代码,因此我们很难想出一种方法来限制对特定程序集的访问。显然,我们放在源代码中以标识程序的任何东西都可以复制到任何其他程序中,因此唯一的希望似乎是让运行时库发现关于程序的一些特征集,然后根据运行时库中嵌入的一组特征对它们进行验证。据我所知,C++的反射能力非常小(RTTI是我能找到的全部),所以我想问一下,是否有人遇到过类似的问题,并找到了解决方法。提前感谢您的任何建议。
基于这两个答案,似乎需要稍微澄清一下。我们完全希望客户修改源代码,通常我们会为他们提供一个不受限制的运行时库版本。这个特定的客户端请求了一个仅限于单个系统的版本,并乐于签订许可证,将运行时库的使用限制在该系统上。因此,对法律问题的讨论是不相关的。这个问题是一个技术问题--给定一个仅限于单个系统的许可证,并且客户端拥有调用程序的源代码,但没有运行时,是否有一种方法可以将对运行时的访问限制为组成该系统的一组程序,从而强制执行许可证的条款。
发布于 2011-04-14 06:19:25
如果他们不应该对程序做进一步的修改,你为什么要给他们源代码呢?如果期望他们继续更改程序(即维护),谁来决定更改是否构成不允许使用库的新程序?
没有技术方法来强制实施这种许可模式。
可能有一种合法的方式--在加载/启用库的代码中,写一条注释“这是一个复制保护措施”。然后,DMCA禁止他们将该代码包含到其他程序中(在美国)。但是IANAL,我不认为DMCA是有效的。
咨询律师以了解您在合同/销售清单下有哪些权利来限制它们的使用。
发布于 2011-04-14 06:27:37
我能想到的最明显的答案是获取调用进程的名称和/或路径--只需将此名称与您的支持库中的7个“允许的”程序进行比较。当然,他们可以创建一个同名的新流程,但他们可能不知道这样做。
另一个级别可以是进一步将可执行文件大小与该应用程序的已知大小进行比较。(您可能希望在预期大小范围内有一个合理的范围,以防他们更改源代码和/或使用不同的选项进行编译。)
作为另一种想法,您可以尝试在应用程序的资源中添加一些看似友好的字符串。(“版权所有2011 ~您的公司名称~”)--然后您可以扫描父可执行文件中的魔术字符串。如果他们创建了一个新产品,他们可能不会考虑创建此资源。
最后,正如Ben已经指出的,如果你给他们提供源代码,这个问题可能没有万无一失的解决方案。(正如他所说,在什么情况下,“修改过的”代码会变成一个新的应用程序?)你所能做的最好的事情就是添加足够多的小障碍,这样他们就不会费心去尝试将库用于其他产品。这很可能取决于他们的决心和/或幸运程度。
发布于 2011-04-14 10:33:26
为什么不在技术上将运行时限制在一个系统上呢?有很多软件保护解决方案,我想到的就是SmartDongle。
现在运行时仍然可以被该机器上的任何其他程序使用,但我认为这应该是一个次要问题,不是吗?
https://stackoverflow.com/questions/5656277
复制相似问题