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