Hash 当文件来自system32文件夹时,文件的散列值MD5和SHA256不同。为什么?

Hash 当文件来自system32文件夹时,文件的散列值MD5和SHA256不同。为什么?,hash,cryptography,window,group-policy,Hash,Cryptography,Window,Group Policy,我通过在线散列生成器计算了notepad.exe和mspaint.exe的MD5和SHA256散列值。 我注意到的是,如果我计算两个exe在system32中的实际位置时,得到的值与放置在system32文件夹之外时的值不同。 这背后的原因是什么?哪个是正确的哈希值 我正在使用软件限制策略阻止应用程序,我为notepad.exe(存在于SYSTE32文件夹中)文件创建了一个哈希规则并阻止了它。当我检查注册表中的哈希值时,它与通过其他方法(如在线md5计算器或Windows API)计算的note

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


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

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

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

这也让我有一段时间发疯,因为我一辈子都搞不明白为什么System32中的某些文件(即.dll和.exes)会根据我检查它们的内容返回不同的哈希值

使用和Firefox上传一个文件来检查其散列,与使用在explorer.exe中运行的hash checker相比,我得到了不同的结果

但如果我将这些文件中的一个复制到另一个位置,那么我将在所有程序中得到相同的结果

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

但后来我想在另一个文件夹上尝试同样的方法,最后在一个小朋友的帮助下破解了它

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

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

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

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

因此,正如wiki所述,如果您输入
%SystemRoot%\Sysnative
在32位应用程序中打开文件对话框的路径中,它应该从realSystem32文件夹加载文件,并给出正确的结果

如果您检查SysWOW64目录中的文件,则所有文件都应返回相同的相应哈希值,而不管您使用什么方法打开它们

进一步阅读:


您能重新检查您的问题吗?我已经按照你的建议做了,但仍然得到了C:\Windows\System32\notepad.exe文件版本:6.1.7600.16385文件大小:193536字节哈希值(MD5):d378bffb70923139d6a4f546864aa61c notepad.exe中的相同哈希值TEPAD.exe文件(我已将该文件复制到桌面)C:\Users\User\u name\desktop\notepad.exe文件版本:6.1.7600.16385文件大小:193536字节哈希值(MD5):f2c7bb8acc97f92e987a2d4087d021b1使用MD5file.com生成哈希值values@ArturPeniche如何计算哈希值?我已将文件从system32文件夹复制到桌面。两个文件显示的大小相同。我将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\64位版本。