检查 Windows 更新文件完整性

S. *_*tes 14 windows updates

我必须经常更新离线 Windows 系统。

因此,我在 Windows 网站上下载更新文件 (KB) 并在系统上运行该文件。

我想知道是否有推荐的方法来检查 Windows 更新文件 (kb) 的完整性。我的目的是确保该文件是正确的,并且在应用它之前没有以某种方式进行过修改。

所以我需要像官方 MD5 签名这样的东西作为参考值来与下载文件的签名进行比较,但我找不到这样的东西。

use*_*686 14

所有 Windows 更新文件(.exe、.msi、.msu、.cab)都使用 Authenticode 进行签名——数据散列和数字签名被嵌入到文件中,以便 Windows 可以自行验证。

在所有三种情况下,请确保签名有效并且来自“Microsoft 代码签名 PCA”(链接到 Microsoft 根证书颁发机构)。

请注意,MD5 或 SHA1 哈希本身不是签名。签名是由散列和密钥(例如 Authenticode 签名证书)的组合创建的。


小智 5

如果您通过 Microsoft 更新目录下载了更新文件:

在此处输入图片说明

您将在其文件名中看到 MSU 包的 SHA1:

在此处输入图片说明

以蓝色突出显示的字符串是其 SHA-1(安全哈希算法-1)值,其长度始终为 40 个字符,如果文件内容被修改,该值将更改。

可以用这个方法来检查文件是否真实,可以用PowerShell来做;

首先,打开 PowerShell:

Win+ R>>类型PowerShell>> Ctrl+ Shift+Enter

然后你需要你的文件的完整路径和文件名,在这个例子中,文件被下载到默认的下载文件夹,也就是C:\Users\USERNAME\Downloads文件夹,在PowerShell中你可以使用这个变量:$home代表C:\Users\Username(你的用户配置文件)文件夹。

您可以使用Get-Filehashcmdlet 获取文件的哈希值,并使用-eq运算符将其与文件名中的哈希值进行检查,如果结果是,true则该文件是好的。如果它返回,false则文件已损坏。

我会给你这个例子来更好地描述该方法:

(get-filehash -path "$home\downloads\windows10.0-kb4592438-x86_95758bd6e2c3a4a98a19efaa4056213531f84f5c.msu" -algorithm SHA1).hash -eq "windows10.0-kb4592438-x86_95758bd6e2c3a4a98a19efaa4056213531f84f5c.msu".split("_")[1].substring(0,40)
Run Code Online (Sandbox Code Playgroud)

它返回true,意味着我的文件没有损坏。

使用时只需将文件名和文件路径替换成你要检查的文件的真实名称和路径即可。然后你就可以走了。

  • 我并不是说您的回答不好 - 只是您的方法对于某些用例来说是足够的,但对于其他用例则不够。我发布此评论主要是为了回应 OP 在其他地方的评论中询问此方法的弱点。我已经阅读了问题标题,但有些访问者可能会稍后来到这里搜索一个完全不同的解决方案,并且没有注意到这种方法是不安全的_对于他们的用例_。因此,我认为有一点评论指出了这种方法的弱点,同时说明了它的好处,增加了一些价值。 (4认同)