是否可以以某种方式将.NET可执行文件限制到特定计算机,以便它只能在该计算机上运行。
答案 0 :(得分:9)
是的,我在我的应用中这样做了。它运作得非常好。
使用WMI(强烈推荐)获取系统信息(CPUID,MacID,HDD详细信息)非常简单。
我创建了一个几乎万无一失的系统(除非你是专业黑客)。
当我的应用程序首次在用户的PC上安装时,他们会使用Web服务返回我的服务器。他们使用密码哈希标识自己并查找客户端的授权代码/订单ID。
如果客户端具有正确的授权码,则应用程序会加密并将系统详细信息存储在客户端的计算机上,并将信息的哈希值发送到存储它的服务器。然后使用一些散列标记在客户端的计算机上激活该软件,每次运行应用程序时,系统信息都会与文件中的散列信息进行比较。
如果客户端重新格式化计算机,他所需要的只是自动重新激活软件的订单ID(当程序检查我的服务器时,如果系统详细信息匹配,则验证并批准系统详细信息)。如果客户端在另一台计算机上安装该软件,则必须联系我的支持团队以获得批准。
- 所有信息都经过加密和散列(双重加密)。 - 所有代码都经过混淆和打包。
目前它的工作非常安全。
所以是的,它是可能的,它已经过现场测试,发现它和任何其他保护系统一样有效。
答案 1 :(得分:2)
无法使用处理器ID并每次检查(?)
Here is a sample code我写了一些时间。
Imports System.Management
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Declare following three object variables
Dim objMOS As ManagementObjectSearcher
Dim objMOC As Management.ManagementObjectCollection
Dim objMO As Management.ManagementObject
'Now, execute the query to get the results
objMOS = New ManagementObjectSearcher("Select * From Win32_Processor")
objMOC = objMOS.Get
'Finally, get the CPU's id.
For Each objMO In objMOC
MessageBox.Show("CPU ID = " & objMO("ProcessorID"))
Next
'Dispose object variables
objMOS.Dispose()
objMOS = Nothing
objMO.Dispose()
objMO = Nothing
End Sub
End Class
答案 2 :(得分:2)
假设机器有NIC,您可以使用MAC address:
答案 3 :(得分:1)
开箱即用 - 没有。
您可以尝试在安装过程中生成计算机签名,并在签名文件不存在或对此特定计算机无效时将应用程序锁定为不启动。
答案 4 :(得分:1)
.NET非常糟糕,因为使用常用工具将其反转回源代码非常容易。 (我们做一个演示,我们在大约2分钟内破解.NET)。 Cyril的解决方案听起来不错,因为他正在使用加密和目标机器的指纹散列。令人遗憾的是,这些解决方案容易受到某些类型的中间人攻击,尽管他的解决方案听起来比大多数人好。机器绑定的一个问题是,您要使用的指纹识别令牌(如MAC地址,CPU序列号等)必须通过操作系统调用来检索,这可能是由中级别的破解者欺骗的。
根据使用CodeMeter等好的加密狗的软件的价值,Hasp HL或KeyLok会为您提供重要的保护。但是,使用“坏”加密狗不会对你有所帮助。
答案 5 :(得分:0)
您可以对EXE进行数字签名并使用证书来提供某种保护,但是如果您真的想要阻止EXE在特定PC上运行,您可能会更好地提示用户输入密码并使用密钥文件?
.NET加密示例 http://aspnet.4guysfromrolla.com/articles/112002-1.aspx http://www.eggheadcafe.com/articles/20020630.asp
答案 6 :(得分:0)
为此,您需要使用机器的MAC ID,HDD ID,CPU ID等生成的某种机器代码嵌入您的许可证代码。
然后使用运行软件时生成的机器代码检查此嵌入代码。如果这些不匹配,则表示该软件正在另一台计算机上使用。
如果您需要支持此方案的现成许可方案,请参阅CryptoLicensing
答案 7 :(得分:0)
如果您需要支持此方案的现成许可证方案,请参阅CryptoLicensing
这不是真的。 CryptoLicensing仅使用计算机名称,甚至不使用CPU ID。