我想知道,假设我开发了一个程序,可以访问客户端计算机,是否有办法开发该程序,以便只能在该机器上运行,方法是在计算机中写入唯一标识符(如果有类似的东西)到代码中并编译程序。我正在使用德尔福XE2
是的,您可以通过将可执行文件绑定到计算机特征来防止某种程度的未经授权的使用。你可以自己做(有问题),也可以买一个现成的解决方案来为你做(免责声明 - 我为一家为这类问题提供解决方案的公司工作:Wibu-Systems)。机器装订有两个问题;我们可以在其中之一提供帮助:
-
误报:计算机特性可能会因用户升级或奇怪的驱动程序行为而更改。这可能会导致您的许可系统报告用户正在尝试滥用许可证(误报)。这是这些系统中的普遍问题。(无耻的自我推销:我们刚刚发布了一种新的绑定方法,以减少或消除这类错误。我们称之为SmartBind(tm)。
-
可破解性:由于任何机器绑定都必须使用操作系统调用来获取硬件"指纹"信息以进行验证,因此破解程序可以修补用于始终返回已知"良好"值的 dll,从而允许破解软件。这些类型的裂缝在bittorrent网站上很猖獗。不幸的是,没有很好的解决方法,尽管我们的方法使用了一些加密魔力来使其更难做到。为了最终实现反盗版,您必须使用像CmStick,HASP或KeyLok这样的加密设备。当然,NSA可以破解任何东西,但是破解像CodeMeter这样的基于硬件的顶级解决方案的难度使得它不太可能,除非回报真的是巨大的。
我强烈建议您研究商业解决方案以仔细研究可用的选项。这个领域有许多供应商和几种不错的产品可供选择(当然,我认为我们的产品是最好的)。推出自己的解决方案会在您尝试处理各种配置问题和可能不满意的用户时给下游带来很多悲伤。
简短的回答是,没有可靠的方法来防止复制程序。 当然,有一些技术可以识别程序的特定实例,识别机器硬件等,但是对于这些技术中的每一种,对于真正想要解决问题的用户来说,都有一种反击技术可以绕过它。 无论是破解您的程序并更改它查找的内容(或完全禁用检查),虚拟化您正在寻找的硬件等。 总有办法的。 有人愿意投入只是时间和精力的问题。
如果你想要一些简单的东西,这将给你硬盘卷ID作为一个数字,对于每个机器栏黑客攻击应该是唯一的。
function GetHDSerialNumber: Dword;
var dw:DWord; mc, fl : dword; c:string;
begin
c:=extractfiledrive(application.exename)+'';
GetVolumeInformation(Pchar(c),nil,0,@dw,mc,fl,nil,0);
Result := dw;
end;
这适用于Delphi 2007,上面的版本是Unicode,你自己解决这个问题。
虽然没有防黑客硬件这样的东西,但Wibu系统还没有被黑客入侵,它具有强大的防黑客功能,包括物理设计功能,使最复杂的黑客攻击几乎不可能。
像i-Lock这样的其他解决方案已经被黑客入侵,但到目前为止,Wibu是一个很好的答案。我刚买了他们的入门包。