在VC ++中创建程序的有限使用版本

时间:2011-04-13 22:09:31

标签: c++ programming-languages

我们公司帮助将客户端软件从其他语言迁移到C ++。我们为他们的应用程序提供C ++源代码以及用于运行时支持函数的头文件和编译库。我们收取迁移和运行时的费用。最近,一位潜在客户要求迁移他们拥有的众多系统中的一个。该系统包含7个程序,我们希望限制运行时间,因此只有这7个程序可以访问它。我们可以通过在对象库中放入加密的到期日期来限制运行时间,但是,由于我们必须为转换的程序提供源代码,因此我们很难想出一种限制对特定程序集的访问的方法。显然,我们在源代码中添加任何标识程序的内容都可以复制到任何其他程序中,因此唯一的希望似乎是让运行时库发现一些有关程序的特性,然后根据嵌入的一组特性验证它们在运行时库中。据我了解,C ++几乎没有反射功能(我只能找到RTTI)所以我想问一下是否有人遇到类似的问题并找到了解决问题的方法。提前感谢任何建议。

基于这两个答案,似乎有点澄清。我们完全希望客户端修改源代码,通常我们为它们提供不受限制的运行时库版本。此特定客户端请求的版本仅限于单个系统,并且很高兴进入限制将运行时库用于该系统的许可证。因此,对法律问题的讨论无关紧要。问题是技术问题 - 鉴于许可证仅限于单个系统,并且假定客户端具有调用程序的源而不是运行时,是否有办法将运行时的访问限制为程序集包括该系统,从而执行许可条款。

3 个答案:

答案 0 :(得分:1)

如果他们不打算对程序进行进一步的更改,为什么要给他们源代码?如果他们希望继续更改程序(即维护),谁来决定更改是否构成一个不允许使用该库的新程序?

没有技术方法可以强制执行该许可模式。

可能有合法的方式 - 在加载/启用库的代码中,写一条注释“这是一个复制保护措施”。然后DMCA禁止他们将该代码包含在其他程序中(在美国)。但IANAL,我认为DMCA无论如何都不是有效的。

咨询律师,了解您根据合同/销售单获得的权利,以限制其使用。

答案 1 :(得分:0)

我能想到的最明显的答案是获取调用过程的名称和/或路径 - 只需将此名称与支持库中的7个“允许”程序进行比较即可。当然,他们可以创建一个具有相同名称的新流程,但他们可能不知道这样做。

另一个级别可能是进一步将可执行文件大小与该应用程序的已知大小进行比较。 (如果他们对源代码进行了更改,和/或使用不同的选项进行编译,您可能希望在预期大小周围允许相当宽的范围。)

另一种想法是,您可以尝试在应用程序的资源中添加一些看似良性的字符串。 (“版权所有2011~您的公司名称〜”) - 然后您可以扫描父可执行文件中的魔术字符串。如果他们创建新产品,他们可能不会考虑创建此资源。

最后,正如Ben已经指出的那样,如果你给他们源代码,那么这个问题很可能没有万无一失的解决方案。 (正如他所说,“修改后的”代码在什么时候成为新的应用程序?)你可能做的最好的事情就是添加足够小的障碍,他们不会试图将lib用于其他产品。这可能取决于他们的决心和/或幸运程度。

答案 2 :(得分:0)

为什么不在技术上将运行时的使用限制在一个系统中?有许多软件保护解决方案,我想到的是SmartDongle

现在运行时仍然可以被该机器上的任何其他程序使用,但我认为这应该是一个小问题,不是吗?