c#如何判断BIOS日期变化

问题描述 投票:0回答:4

您好,我如何使用程序(c#)确定 Bios 日期是否已更改?

已更新

我正在寻找机器日期,因为我想编写程序来检查某些机构是否更改了该值,弄清楚我有一个事务文件,它记录了一些带有日期和时间的信息,并且为了注册这个值,我有一个到期时间,如果有人在该到期时间之前停止机器并等到到期时间之后的时间将 BIOS 日期时间更改回来,然后将记录与该时间一起放置,我想知道这一点。

c# winapi date bios
4个回答
1
投票

我同意 Danut 的观点,即使在不太可能的情况下,可以根据 BIOS 日期检测到更改,除非您可以控制每台机器使用的 BIOS 类型,否则很可能会出现解决方法。

您确实有两种主要途径可以解决此问题,可以是硬件方法,也可以是软件方法,也可以是两者的组合。

硬件方法

根据您的预算,您可以考虑实施加密狗或硬钥匙锁定方法 - Safenet Alladin Keylock 等设备内置了专为安全性而设计的计时器,您可以将您的软件绑定到其中。缺点是每个系统都需要链接到加密狗,这会增加管理成本 - 但最终用户篡改的可能性很小。

软件方法

请记住,总会有解决方法,您可以添加大量软逻辑来检测系统是否发生篡改,即存储系统激活的最后日期并将其与当前日期进行比较,比较系统运行的总时间与基于安装日期与当前日期的最大总时间...等。

但是,使用这种方法,您可能只能在篡改发生后才检测到篡改,这可能意味着在篡改发生日期和实际检测到篡改日期之间捕获的某些数据的有效性可能会受到损害。

最终,这实际上取决于预算问题以及您的客户愿意支付多少费用来确保不发生篡改。


1
投票

我建议您通过 WMI 获取 BIOS 信息,使用 Win32_BIOS 类。您可以查询的字段之一是 BIOS 安装日期(我假设您指的是该日期)。您可以跟踪该数据并检查它是否发生变化。

有关从 .NET 使用 WMI 的详细信息可以在此处找到。


0
投票

您正在寻找的东西理论上是不可能的。如果有人关闭一台机器,等待 10 天,然后将其时钟设置回 9 天前,则无法通过查看 BIOS 或时钟来检测到这一点。

但是,如果您的用户将连接到互联网,您始终可以获取实时在线时间。请记住,除非用户格外小心,否则大多数 Windows 安装也会在线自动更新时钟。


0
投票

根据@CesarGon 的回答,我举了一个例子:

Imports System.Management

Dim query As New SelectQuery("Win32_BIOS")
Using searcher As New ManagementObjectSearcher(query)
    Dim Bio = searcher.Get().Cast(Of ManagementObject).First()
    Dim InstallDate = DateTime.ParseExact(Bio("ReleaseDate").Substring(0, 14), "yyyyMMddHHmmss", Nothing)
    Console.WriteLine($"ReleaseDate: {InstallDate.ToString()}")
End Using
© www.soinside.com 2019 - 2024. All rights reserved.