有没有可能以某种方式将.NET可执行文件限制在特定的计算机上,使其只能在该计算机上运行。
发布于 2009-07-18 06:02:48
是的,我在我的应用中做到了这一点。它工作得很好。
获取系统信息(CPUID,MacID,硬盘详细信息)很容易使用WMI (强烈推荐)。
我创建了一个几乎万无一失的系统(除非你是专业黑客)。
当我的应用程序第一次安装在用户的PC上时,它们会使用web服务返回到我的服务器。他们使用口令散列来标识自己,并查找客户端的授权码/订单id。
如果客户端拥有正确的授权码,应用程序将加密并将系统详细信息存储在客户端的计算机上,并将信息的哈希信息发送到存储该信息的服务器。然后使用一些散列标志在客户端的计算机上激活该软件,每次应用程序运行时,系统信息都会与文件中的散列信息进行比较。
如果客户重新格式化计算机,他所需要的就是订单id,以便再次自动激活软件(当程序与我的服务器核对时,系统详细信息将得到验证和批准,如果它们匹配)。如果客户将软件安装在另一台计算机上,他必须联系我的支持团队以获得批准。
--所有信息都经过加密和散列(双重加密)。--所有代码都是经过混淆和打包的。
目前,它运行得相当安全。
所以,是的,这是可能的,它已经经过现场测试,发现它和任何其他保护系统一样有效。
发布于 2009-07-17 09:21:41
不能使用处理器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发布于 2009-07-17 13:34:38
假设机器有NIC,您可以使用MAC address
https://stackoverflow.com/questions/1142217
复制相似问题