我想知道,假设我开发了一个程序,可以访问客户的计算机,有没有办法开发程序只能在该机器上运行,通过写入计算机唯一标识符(如果有的话像那样)进入代码并编译程序。我正在使用德尔福 XE2
4 回答
是的,您可以通过将可执行文件绑定到机器特性来防止某种程度的未经授权的使用。您可以自己做(有问题),也可以购买现成的解决方案来为您做(免责声明——我在为此类问题提供解决方案的公司之一工作: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 是一个很好的答案。我刚买了他们的入门包。