Mon*_*onk 11 windows compile sysinternals
我观察到 Windows 可执行文件在 PE Studio 中查看时显示不正确的时间戳。 例如,此 Notepad.exe 文件显示的编译器时间戳为0x86FCD69 (Mon Oct 07 03:45:05 2041 )
为了在今天(2021 年 5 月 3 日)验证这一点,我将 Python 程序文件转换为 EXE 并在 PE Studio 中进行了检查。它还显示了错误的编译器时间戳0x5FFEC122 (Wed Jan 13 15:15:06 2021 ) Python 可执行文件
为什么编译器时间戳不正确?据我了解,如果今天将 Python 程序转换为 exe,它应该在编译器时间戳下显示今天的日期。
use*_*686 22
它们被故意设置为固定值:
旧的新事物:为什么 Windows 10 中的模块时间戳如此荒谬?
在 Windows 10 中开始的对 Windows 工程系统的更改之一是转向可重现的构建。这意味着如果您从完全相同的源代码开始,那么您应该以完全相同的二进制代码结束。
[…]
时间戳是非确定性的另一个来源。即使所有输入都相同,由于时间戳的原因,输出仍然会有所不同。[...] 将时间戳设置为生成的二进制文件的哈希值可以保持可重复性。
旧的新事物:可执行时间戳的真正含义是什么?
名称时间戳具有误导性。它的真正目的是充当签名,以便操作系统可以确定预先计算的一组值所针对的 DLL 是否与系统上的 DLL 物理匹配。更好的名称应该是“UniqueId”。
注意:这里的“签名”一词有两种含义。Raymond 将该字段称为“签名”,只是因为它是某种独特的东西,可以将此二进制文件与其他二进制文件区分开来(就像“MZ”字节是所有 .exe 文件的签名一样)。然而,它不是加密数字签名,并且无法确保文件的完整性或真实性。