查找是否已使用os映像复制的软件安装了映像操作系统

时间:2014-08-15 03:20:48

标签: windows winapi operating-system virtual-machine internals

我们能否找到我们的软件是否已复制到操作系统映像(Windows)中,然后部署在另一台计算机上。硬件详细信息确实有所变化,但可能是由于硬件升级或更改。

软件级别是否有任何表明已安装操作系统映像的内容。

P.S操作系统安装日期在图像部署后没有变化。它显示原始操作系统安装日期和时间的日期,而不是成像日期和时间的日期。

例如,我试图使用服务标签,uuid和os安装日期更改来检测这一点。我认为组合的硬件和软件细节会导致正确的检测。但是,在硬件升级期间,os安装日期更改和硬件详细信息已更改或显示垃圾值。我的软件将安装在操作系统中。然后OS将成像。我想检测成像安装

2 个答案:

答案 0 :(得分:1)

如果您的软件已连接到互联网,则相对容易解决。您安排“回家”:将偶尔的数据包发送到已知的服务器地址,该地址包含足以识别实例的信息。

为此目的,UDP数据包服务非常好。您包括有关软件构建,运行的操作系统,一些简单硬件详细信息(如内存和磁盘的数量,IP地址和MAC地址)的信息。从服务器记录的数据包中,您可以轻松地从克隆中获取原始实例,或者几乎在每个实例中都使用具有更新硬件的原始实例。如果您有足够的权限,您还可以通过详细的硬件检查获得高度独特的信息。

请注意Windows正是这样做的。如果发现在充分不同的机器上运行的激活副本,则必须重新激活它。 “充分不同”的定义并未公开。


为了清楚起见,我所描述的是启发式算法,而不是算法。我假设原始安装创建了一个GUID,并且克隆携带相同的GUID。当您从具有相同GUID的安装中收到包含足够信息的数据包时,实际上您几乎可以在每种情况下都能从克隆中分辨出原始数据。两个克隆可能会开始相同,但很快就会发生分歧:网络IP地址,磁盘可用空间,活动设备。

这可能无法满足原始问题的所有要求,但它会起作用(它已经存在)并且它总比没有好。

答案 1 :(得分:1)

每次计算机启动时生成GUID,并包括当前GUID和每次向服务器报告时先前生成的GUID历史记录。

如果计算机的报告缺少GUID,则表示您已克隆计算机,并且至少应生成一个新实例。您可以通过查找两个实例记住的最后一个GUID来确定克隆的发生时间。

要确定哪个实例与原始实例一样考虑“同一台机器”,如果这很重要,请查找MAC地址或计算机名称的更改。如果只有一个实例,自克隆机器以来这些实例都没有改变,那么可以假设它是原始实例。 (如果有多个具有相同MAC地址的实例,则会出现严重错误;请将其提请系统管理员注意并让他们对其进行排序。)

如果当前实例中没有一个具有匹配的MAC地址和计算机名称,这可能意味着原始计算机尚未重新启动,但最终将被重新启动,或者它已被销毁,或者它永久脱机并且仅用作模板。它也可能意味着,巧合的是,计算机名称和/或MAC地址在克隆机器之后但在下一次报告之前发生了变化。

如何最好地处理这个问题取决于上下文,但在大多数情况下,将原始计算机显示为单独的实例可能是明智的,即使您从克隆发生以来没有收到过报告,并在适当的情况下让系统管理员手动删除它。