关于c#:是否存在即使在虚拟机中也可以可靠使用的唯一计算机标识符? 您所在的位置:网站首页 如何获取电脑的唯一标识码和密码 关于c#:是否存在即使在虚拟机中也可以可靠使用的唯一计算机标识符?

关于c#:是否存在即使在虚拟机中也可以可靠使用的唯一计算机标识符?

2024-07-15 16:15| 来源: 网络整理| 查看: 265

我正在编写一个要在终端服务器上运行的小型客户端程序。我正在寻找一种方法来确保它仅在指定的服务器上运行,并且从服务器中删除后它将停止运行。

我知道没有任何方法可以使其100%安全,但我想让大多数高级用户难以做到这一点。

我正在查看不同的唯一标识符,例如处理器ID,Windows产品ID,计算机GUID和其他UI。由于终端服务器是虚拟机,因此我无法找到该机器完全唯一的任何内容。

我应该研究什么以确保其安全性。我没有时间或需要使其尽可能地安全,因为它会破坏应用程序本身的目的。

我不想使用MAC地址。即使它对于每台计算机都是唯一的,也可以按照Internet上的说明进行欺骗。

就Microsoft产品ID而言,因为我们的系统团队克隆了VM服务器,并且我们使用公司的卷密钥,所以我发现已经可以访问的两台服务器具有相同的产品ID号。我不知道有多少其他人具有相同的产品ID

另外,也可以尝试识别用户并创建通过AD处理的,用于访问该软件的基于组的权限,而不是尝试识别计算机。

相关讨论 MAC地址即使在VM中也应该是唯一的? -stackoverflow.com/questions/3443093/ 每个人如何获得如此精确的数据来欺骗MAC地址? 显然是5%...我不知道。 我不想做一个MAC地址,任何可以使用Google的超级用户都可以欺骗它。 mydigitallife.info/2008/06/30/ 我非常有信心,不到1%的人会解决这个问题。

通过设计,很难唯一地标识虚拟机。任何可以唯一标识它的东西都意味着它不是完??全虚拟的(因为克隆虚拟机会产生相同的机器)。

在通过环回网络适配器与VM通信的主机上创建心跳应用程序。 如果心跳应用程序无法唯一标识主机,请使其拒绝运行。 如果心跳应用程序未运行,请让主应用程序拒绝运行。

您将需要找到一种方法来确保检测信号应用程序不会被轻易欺骗。

无法100%保护终端程序。这个问题等同于试图防止软件盗版。

我发现最好的东西是BIOS UUID-但对于您的用例而言,还远远不够完美。

VM虚拟机内部可用的SMBIOS UUID也被VMware虚拟机管理程序和管理工具用作VirtualMachine.config.uuid(请参阅:此页面的uuid属性)。这意味着保证在特定主机或特定vCenter中是唯一的。但是,它可以在单独的主机或单独的vCenter安装上重复。

而且,虚拟机上的BIOS UUID是可变的。可以通过API进行更改(尽管不容易通过客户端更改)。

这可能接近您的95%,因为要花一些时间和精力才能完全复制VM。

但是,从启用虚拟化的角度(包括VM灾难恢复和虚拟化软件的未来升级)来看:使用诸如UUID或MAC地址之类的硬件ID会引起各种问题。当他们想要在软件下修订OS版本时,通常是通过创建新的虚拟机,他们需要手动编辑两台服务器的VM配置以更改UUID以匹配。使用MAC,如果他们改变了网络架构,则您的软件要求VM是一种特殊情况。这些事情只会给虚拟管理员带来麻烦(但它们可能正是您要引起的确切麻烦-只有您可以肯定知道)。

我建议您使用您提到的基于权限的方法,或者在必要时甚至使用并发许可服务器。但是我来自高度虚拟化的背景,在这个背景下,与硬件捆绑在一起的许可证已经令人头疼。

扩展macaddress方法。您可以在macaddress周围使用带有md5函数的SALT,只有系统所有者才知道。这样,在不知道SALT的情况下,macaddress是无用的。

只是我的钱值得.. :)

[edit]-另请参见此处的有关哈希/盐渍等的c#示例:

带有盐的MD5哈希用于在C#中将密码保留在DB中

http://www.obviex.com/samples/hash.aspx

您可以获取PC的MAC地址,如下所示:http://www.java2s.com/Code/CSharp/Network/GetMacAddress.htm

当然,这种方法并非没有缺陷。这篇文章中列出了其他方法,这些方法是相似的,但不是完全相同的方法:什么是唯一标识计算机的好方法?

相关讨论 注意,我认为我链接到的StackOverflow帖子中的答案值得一些赞扬。 可以接受的答案非常好,尤其是要谨慎对待正在进行的琐事。

您可以将许可证绑定到网卡(或多个网卡,如果有多个)的MAC地址。

当然,更换网卡将使您的软件无法运行。

如果/当TPM在服务器上成为标准配置时,您应该可以使用它来认证服务器。

最简单的解决方案是使用mac地址,但是请注意,在Windows上通过编辑注册表可以轻松更改它。我要说的是,不到5%的人知道该怎么做。

这是在C#中获取mac地址的方法:

1System.Net.NetworkInformation.NetworkInterface.GetPhysicalAddress(); 相关讨论 在Windows中,没有人能做到这一点,这似乎暗示了这个问题。 ;-) 我指的是ifconfig的用法,您现在已将其从答案中删除。 我知道MAC可以在任何操作环境下被欺骗。 @Cody我本来以为Linux(是的,我没有看过标签,调皮了我!:P),但是改变了它。 问题不暗示有关mac地址的任何信息,甚至没有提及它。

如果您要95%,我会使用Mac ID-它可以被欺骗,但默认情况下对于计算机而言是唯一的。

相关讨论 mydigitallife.info/2008/06/30/我认为这是由5%以上的人轻松完成的。 根据最近的统计,美国的计算机识字率为20%。 我想像不到有四分之一的人可以欺骗MAC地址。 只需重新输入您的问题即可。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有