【发布时间】:2010-12-25 09:49:29
【问题描述】:
您好,我如何通过程序 (c#) 确定 Bios 日期是否有更改?
更新
我正在寻找机器日期,因为我想编写程序来检查某些机构是否更改了该值,弄清楚我有一个事务文件,它记录了一些带有日期和时间的信息,并用于注册这些值我有一个到期时间,如果有人在该到期时间之前停止机器并等到到期时间之后的时间将BIOS日期时间更改回来,然后将记录与该时间一起放置,我想知道。
【问题讨论】:
您好,我如何通过程序 (c#) 确定 Bios 日期是否有更改?
更新
我正在寻找机器日期,因为我想编写程序来检查某些机构是否更改了该值,弄清楚我有一个事务文件,它记录了一些带有日期和时间的信息,并用于注册这些值我有一个到期时间,如果有人在该到期时间之前停止机器并等到到期时间之后的时间将BIOS日期时间更改回来,然后将记录与该时间一起放置,我想知道。
【问题讨论】:
我同意 Danut,即使在不太可能的情况下可以根据 bios 日期检测到更改,除非您可以控制每台机器使用的 bios 类型,否则很可能会出现解决方法起来。
您确实有两条主要途径可以解决此问题,硬件或软件方法或两者的结合。
硬件方法
根据您的预算,您可以考虑实施加密狗或硬键锁定方法 - Safenet Alladin Keylock 等设备内置了专为安全而设计的计时器,您可以将其绑定到您的软件中。不利的一面是,每个系统都需要连接到加密狗,这会增加间接成本——但最终用户篡改的可能性很小。
软件方法
请记住,总会有解决方法,您可以添加大量软逻辑来检测系统是否发生了篡改,即存储系统激活的最后日期并将其与当前日期进行比较,比较系统运行的总时间与基于安装日期与当前日期的最大总时间......等等。
但是,使用这种方法,您可能只能在篡改发生后才能检测到,这可能意味着在篡改发生日期和实际检测到篡改日期之间捕获的某些数据的有效性可能会受到影响。
最终,这实际上归结为一个预算问题,以及您的客户愿意支付多少费用以确保不会发生篡改。
【讨论】:
您正在寻找的东西在理论上是不可能的。如果有人关闭机器,等待 10 天,然后将时钟设置回 9 天前,则无法通过查看 BIOS 或时钟来检测。
但是,如果您的用户将连接到 Internet,则您始终可以实时在线。请记住,除非用户格外小心,否则大多数 Windows 安装也会在线自动更新时钟。
【讨论】:
我建议您通过 WMI 获取 BIOS 信息,使用 Win32_BIOS class。您可以查询的字段之一是 BIOS 安装日期(我假设您指的是该日期)。您可以跟踪该数据并检查它是否发生变化。
有关从 .NET 使用 WMI 的详细信息,请参阅 here。
【讨论】: