软件保护

时间:2010-12-26 09:09:53

标签: protection software-distribution copy-protection

我希望保护我的软件不被未经许可使用。我将免费提供给我授权使用它的各方。

任何人都知道一个好的保护计划,不会被未经授权的人复制和运行吗?

到目前为止,我考虑引入一种密钥验证机制:用户需要定期向我发送(网站查询)代码,根据该代码生成应用验证的新代码。有一个初始代码,所以我可以跟踪用户......

想法?

稍后编辑:我更改了许可部分,以避免讨论不集中。

5 个答案:

答案 0 :(得分:2)

我们正在使用PELock licensing system,它扩展了SDK API,允许我们将许可模式自定义为最小的细节。

您基本上将代码的一部分包装在加密标记中,并且这些块是加密的,没有有效的许可证密钥,甚至没有执行这些块,一旦用户提供许可证密钥,它们就被解密,执行和执行。重新加密。

#incude "pelock.h"

void FullVersionProc()
{

FEATURE_1_START

// this code runs only, if the license key has
// enabled FEATURE_1 section

FEATURE_1_END

}

要将密钥锁定到特定计算机,我们使用硬件标识符和我们自己的自定义例程来读取特定的硬件组件。然后使用此硬件ID生成许可证密钥。

答案 1 :(得分:1)

无论如何都必然会失败。如上所述,强制用户连接到网络将为愤怒的用户做出贡献;序列号等离线验证方案容易出现重复;限时复制很容易重置时钟或时间戳等。

答案 2 :(得分:0)

很难想出一个没有太多误报的方案,并且不会惹恼用户。有些人会把“打电话回家”的事情称为“我跟踪你”。

另一种方法是以某种方式将用户的身份标识烘焙到软件中,然后如果您确实找到了泄露的副本,您将确切地知道应该责怪谁。向用户说明您已完成此操作,并依赖他们不希望被抓住以减少副本。几个大玩家使用这个方案;我认为O'Reilly的书是一本吗?

答案 3 :(得分:0)

您考虑的保护方案根本不会保护您的软件免受未经授权的使用,因为它很容易对其进行逆向工程,只是强迫保护从不要求您正在谈论的定期验证。< / p>

答案 4 :(得分:-1)

至少有两种方法可以实现:要么使用离线密钥验证机制(请查看本文:http://www.codeproject.com/Articles/764610/Licensing-systems-in-NET)或在线验证系统。

  1. 离线密钥验证有一个缺点 - 无法跟踪密钥是否已在任何其他计算机上使用,也无法重置时间。但是,它确实更容易,因为激活应用程序不需要互联网连接。

  2. 在线密钥验证可为您提供更多控制权。在这里,您可以选择在每次应用程序启动时强制用户连接到Internet,也可以仅定期/定期连接到Internet。第一个选项可以让您更好地控制,因为您可以阻止序列密钥或更改密钥可以运行的计算机数量,并且该更改将在下次启动软件时影响客户端用户。后一个选项可以让您稍微减少控制,但它可以使客户端用户无法一直访问互联网。此外,您始终可以将当地时间与互联网时间进行比较,以确保用户无法操纵它。

  3. (2)的一个例子是SKM平台(https://serialkeymanager.com/)。 (1)中描述的应用程序/算法的例子可以在开头提到的文章I中找到。