【问题标题】:Hash value MD5 and SHA256 of file is coming different when file is from system32 folder. Why?当文件来自 system32 文件夹时,文件的哈希值 MD5 和 SHA256 不同。为什么?
【发布时间】:2015-04-29 14:08:51
【问题描述】:

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

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

【问题讨论】:

  • 您能重新检查一下您的问题吗?我已经按照你的建议做了,我仍然得到相同的哈希值
  • notepad.exe 文件存在于 C:\Windows\System32\notepad.exe 文件版本:6.1.7600.16385 文件大小:193536 字节哈希值(MD5):d378bffb70923139d6a4f546864aa61c Notepad.exe(我复制了文件到桌面)C:\Users\User_name\desktop\notepad.exe 文件版本:6.1.7600.16385 文件大小:193536 字节哈希值(MD5):f2c7bb8acc97f92e987a2d4087d021b1 使用 MD5file.com 生成哈希值
  • @ArturPeniche 你是如何计算哈希值的?

标签: hash cryptography window group-policy


【解决方案1】:

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

这也让我发疯了一段时间,因为我一生都无法弄清楚为什么 System32 中的某些文件(即 .dll 和 .exe)会根据我检查它们的内容返回不同的哈希值。

使用 HxD 和 Firefox 上传文件来检查其哈希值,与使用在 explorer.exe 中运行的 QTTabBar 的哈希检查器相比,我得到了不同的结果。

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

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

但后来我想在另一个文件夹上尝试同样的事情,最后在Wikipedia:的帮助下破解了它

操作系统使用 %SystemRoot%\System32 目录作为其 64 位库和可执行文件。这是为了向后 兼容性原因,因为许多遗留应用程序被硬编码为 使用该路径。执行 32 位应用程序时,WoW64 透明 将 32 位 DLL 重定向到 %SystemRoot%\SysWOW64,其中包含 32 位 库和可执行文件。

32 位应用程序通常不知道 它们在 64 位操作系统上运行。 32 位 应用程序可以通过伪访问 %SystemRoot%\System32 目录 %SystemRoot%\Sysnative

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

同样,当您将文件从 System32 复制到另一个位置时,作为 64 位进程的 explorer.exe 会复制原始 System32 文件,而不是(令人困惑的)SysWOW64 等效文件。

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

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

进一步阅读:

【讨论】:

  • 我将 notepad.exe 从 Sys32 复制到桌面。然后我检查了哈希值:System32、SysWow64 和 Desktop。 Sys32 和 Wow 64 是相同的,而桌面上的文件是不同的......
  • 你用什么检查哈希值?如果您使用 32 位应用程序,当您检查 System32 文件时,它将返回与 SysWow64 相同的结果(因为 Windows 将其重定向到那里),但通过将其复制到您的桌面,64 位 explorer.exe 正在创建System32 的原始文件,所以你会得到不同的结果。尝试使用 %SystemRoot%\sysnative 加载 notepad.exe,看看会发生什么
  • 为了支持答案,我编写了一个名为 QuickHash 的程序,我只将它编译为 32 位程序,它在 64 位和 32 位系统上运行良好。但是,用户报告 C:\Windows\System32 中的文件报告了不正确的哈希值。我核实了报告,发现它是正确的。然而,如果文件被复制到 c:\temp,它们散列就好了。所以我需要从现在开始编译 32\64bit 版本。
【解决方案2】:

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

【讨论】:

  • 我将文件从 system32 文件夹复制到桌面。两个文件的大小显示相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 2016-07-27
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 2020-07-11
  • 2020-02-26
相关资源
最近更新 更多