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

标签 c# .net security macos vmware

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

我知道没有办法让它 100% 安全,尽管如此,我还是想让大多数高级用户难以做到这一点。

我正在查看不同的唯一标识符,例如处理器 ID、Windows 产品 ID、计算机 GUID 和其他 UI。因为终端服务器是一个虚拟机,所以我找不到任何完全是这台机器独有的东西。

关于我应该研究什么以确保它最安全的任何想法。我没有时间也没有必要让它尽可能安全,因为它会破坏应用程序本身的目的。

我不想使用 MAC 地址。尽管它对于每台机器都是唯一的,但可以按照互联网上的说明进行欺骗。

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

或者,与其尝试识别机器,不如通过识别用户并创建通过 AD 处理的基于组的权限来访问该软件可能会更好。

最佳答案

根据设计,唯一标识虚拟机很困难;任何允许您唯一标识它的东西都意味着它不是完​​全虚拟的(因为克隆虚拟机应该产生相同的机器)。

  1. 在通过环回网络适配器与虚拟机通信的主机上创建心跳应用程序。
  2. 如果无法唯一标识主机,则让心跳应用程序拒绝运行。
  3. 如果心跳应用程序未运行,则让主应用程序拒绝运行。

您需要找到一种方法来确保心跳应用程序不会太容易被欺骗。

不可能 100% 保护终端程序。这个问题相当于试图防止软件盗版。

关于c# - 是否存在即使在虚拟机中也可以可靠使用的唯一计算机标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4594520/

相关文章:

c# - 如何在SpreadsheetGear中通过文本查找ColumnPostion?

c# - 如何将dataGridView的前3列readOnly设置为true

c# - Windows Phone 上的 Reactive Extensions 错误

c# - DotNetOpenId — “This message has already been processed” 错误(第 2 部分)

java - 使用 Java 字符串时的提示和技巧,以提高性能和安全性

c# - 在 HtmlEditor WinForms 上拦截粘贴事件

c# - react X : Catching exceptions on Observable<bool> as lambda expression

mysql - 为什么 VS 告诉我 MySqlCommand.Parameters.Add 已弃用?

visual-studio-2010 - 如何将 Windows 组作为 “Readers” 添加到 TFS 2010 集合中的所有项目?

php - 了解 Wordpress 漏洞