当文件来自 system32 文件夹时,文件的哈希值 MD5 和 SHA256 会有所不同。为什么?

Hash value MD5 and SHA256 of file is coming different when file is from system32 folder. Why?

我通过在线哈希生成器md5FileCalculator Onlinemd5计算了notepad.exe和mspaint.exe的MD5和SHA256哈希值。 我注意到的是,如果我计算两个 exe 何时出现在它们在 system32 中的实际位置,则出现的值与放置在 system32 文件夹外的某个位置时不同。 这背后的原因是什么?哪个是正确的哈希值?

我正在使用软件限制策略来阻止应用程序,我为 notepad.exe(存在于 SYSTE32 文件夹中)文件创建了一个哈希规则并阻止了它。当我检查注册表中的哈希值时,它不同于通过其他方法(如在线 md5 计算器或通过 Windows API 计算的 notepad.exe(来自 SYSTEM32 文件夹)的哈希值。但是当我将 notepad.exe 文件复制到桌面上的其他文件夹并计算哈希值时,它与我为其创建 rule.So 的注册表中的哈希值相同,我认为正确的值是当文件不在 system32 文件夹中时我得到的一个。但我不明白为什么会这样?跟权限有关系吗?

您确定要在不同路径上检查完全相同的文件吗?我认为您正在检查两个不同的 notepad.exe。检查文件的大小...它在字节数上必须完全相同。 我刚刚在两个不同的路径 C:\Windows\System32C 上检查了我的 notepad.exe: \Windows 他们是不同的。

这是因为 32 位应用程序 运行 在 64 位 Windows 上,以及 Windows 如何处理这些程序的 System32 文件夹。

这也让我抓狂了一段时间,因为我一辈子都弄不明白为什么 System32 中的某些文件(即 .dll 和 .exes)会 return 不同的散列,具体取决于我用什么检查了它们。

使用 HxD and Firefox to upload a file to check its hash, I got different results compared to using QTTabBar 的散列检查器,它在 explorer.exe 中运行。

但是如果我将其中一个文件复制到另一个位置,我会在所有程序中得到相同的结果。

同时,HxD 显示复制文件的文件长度与 System32 中的文件长度不同,虽然两者显示相似的字节分布,但也存在显着差异。

但后来我想在另一个文件夹上尝试同样的事情,最后在 Wikipedia:

的帮助下破解了它

The operating system uses the %SystemRoot%\System32 directory for its 64-bit library and executable files. This is done for backward compatibility reasons, as many legacy applications are hardcoded to use that path. When executing 32-bit applications, WoW64 transparently redirects 32-bit DLLs to %SystemRoot%\SysWOW64, which contains 32-bit libraries and executables.

32-bit applications are generally not aware that they are running on a 64-bit operating system. 32-bit applications can access %SystemRoot%\System32 through the pseudo directory %SystemRoot%\Sysnative.

因为 HxD 和 Firefox(以及大多数其他浏览器)都是 32 位应用程序,当您将文件加载到它们时,Windows 实际上是 t运行sparently 将它们重定向到文件SysWOW64 文件夹中的同名(估计如果你 运行 64 位浏览器,就不会遇到这个问题)。

类似地,当您将文件从 System32 复制到另一个位置时,explorer.exe 作为 64 位进程,会复制原始 System32 文件,而不是(混淆命名的)SysWOW64 等效文件。

正如 wiki 所述,如果您输入 %SystemRoot%\Sysnative 进入 32 位应用程序中打开文件对话框的路径,它应该从 real System32 文件夹加载文件,并为您提供正确的结果。

并且如果您检查 SysWOW64 目录中的文件,所有文件都应该 return 相同的各自哈希值,无论您使用什么打开它们。

进一步阅读: