C ++让程序只能在一台电脑上工作

时间:2014-03-05 10:35:34

标签: c++ copy-protection

我想为某些人制作一个程序,所以我再为每个人制作程序,如果有人将程序交给其他人,他就不能使用它。

我该怎么做? 没有任何互联网连接。

任何PC都有一些独特的id或类似的东西,我可以让他成为一个程序来获取它,所以他会发给我,在我的程序中我将检查是否相同,如果不是程序将停止。

像hwid这样的东西会起作用吗? 硬件ID是否唯一且无法更改? 如果是这样,我怎么能得到它?我发现了很多问题,但没有任何好的答案..

5 个答案:

答案 0 :(得分:5)

答案 1 :(得分:2)

有几种方法可以识别程序运行所在的计算机:

  1. WMI-Windows提供了一组可用于大多数硬件枚举和标识任务的类,它们被称为WMI或Windows Management Instrumentation。这些是Windows驱动程序模型(WDM)的扩展。

  2. CPU ID-似乎最好的解决方案是对CPU唯一标识号(或CPU ID)进行采样。但是,有一些问题使得无法依靠读取CPU ID来实现。

首先,除旧的Pentium III外,大多数CPU都没有唯一的CPU序列号。出于隐私原因,英特尔已删除此功能。

仍然有可能从整个主板上生成唯一的ID。当然可以,但是大量不同类型的主板和制造商使得几乎不可能生成覆盖所有主板的唯一ID。

  1. 基于MAC地址的硬件ID 获得这种唯一ID的下一个选择是对MAC地址进行采样。首先,“ MAC地址”是什么?它代表媒体访问控制。 MAC地址为48位长(6个字节)。 GetMACAddress代码示例说明了如何获取MAC地址。

但是,这种方法存在一个问题:MAC地址可以轻松更改为新的MAC地址...

  1. 硬盘序列号 看来,获取机器ID的唯一可靠解决方案是使用主硬盘驱动器的序列号。第二个示例GetHDSerialNumber显示了如何获取此ID。根据我的经验,这种方法是生成基于机器的唯一硬件ID的最佳方法和最可靠方法。

另请参阅this文章。

答案 2 :(得分:1)

像其他人所说的那样,实现这一目标真的很难。 您可以使用硬件加密狗或许可软件之类的东西来限制使用。对于任何有足够动力的人来说,这是一个减速带,而不是更多。

这方面的另一个方面是,您尝试制作它越安全,它的限制风险就越高。也就是说,它最终可能会意外阻止合法使用,如果你想让用户满意,这是一件非常糟糕的事情。

答案 3 :(得分:1)

我已经写过this article,但请注意,没有任何解决方案是完美的。

答案 4 :(得分:0)

当PC变得流行时,尝试了很多次。每次都是惨淡的失败。它甚至会干扰法律授予用户的权利(保留备份副本)。事实证明,对于许多用户而言,用户的麻烦就足以让他们不使用“受版权保护”的程序。

今天,各种游戏机成功完成了这项工作,但控制台的提供商对机器和软件的控制非常严格。通过强制,那些不能被用户用作常规计算平台,它们是单一用途的。没有广泛的软件可用。

在常规机器上唯一能够实现这一壮举的是像Mathlab或Autocad这样昂贵的程序,主要是通过网络管理员严格控制的某种“许可证服务器”,与运行它的特定服务器相关联。一些冗长的程序。即便如此,获取盗版(“未锁定”)副本并不难。