【发布时间】:2009-09-14 22:37:16
【问题描述】:
我想知道在运行该文件之前、之后或之后对 .exe 文件生成校验和时是否会得到不同的结果。与边界情况相比,我更关心常见做法(例如生成流行应用程序(如 firefox.exe)的 SHA 哈希),但两者都很有趣。谢谢。
【问题讨论】:
标签: hash executable exe
我想知道在运行该文件之前、之后或之后对 .exe 文件生成校验和时是否会得到不同的结果。与边界情况相比,我更关心常见做法(例如生成流行应用程序(如 firefox.exe)的 SHA 哈希),但两者都很有趣。谢谢。
【问题讨论】:
标签: hash executable exe
只要文件相同(即仅包含相同的字节,以相同的顺序),文件的哈希值就应该是恒定的。很难找到在运行时重写其磁盘表示的应用程序,因此散列 应该 是恒定的。有自修改程序,但它们倾向于在内存中加载的代码副本上进行操作,而不是磁盘副本。
编辑:我们应该考虑“自我更新”应用程序,但这些应用程序往往会启动一个小帮助程序来下载和更新核心应用程序。在运行时更新执行是很困难的(尤其是在 Windows 上)。 UNIX 系统倾向于运行 Copy on Write 系统,因此软件更新可能会更改您脚下的可执行文件 - 但同样,这是“极端情况”。
【讨论】:
仅当 exe 更改时,哈希才会更改。只有当应用程序修改自身时才会发生这种情况,如果没有重新启动应用程序,这不会在 Windows 上发生。 Firefox 可能会自行更新(包括重启),但除了这种情况,哈希值将保持不变。
【讨论】:
如果文件改变,哈希值也会改变。
EXE 文件很少自行更改。如果用户更新到新版本,firefox.exe 会发生变化。
您可以在运行EXE文件(如firefox.exe)后检查它的“修改日期”属性,看看它是否发生了变化,但您可能会发现它没有。
【讨论】:
如果您的意思是修改上次访问时间,请不要担心,它存储在文件系统级别,而不是在文件中,因此哈希值将保持不变。
【讨论】: