有谁知道防止可执行文件时间戳改变的方法?我正在尝试为 .exe 生成一致的哈希码,但我认为时间戳可能会阻止这种情况发生。每次我重新编译代码(VS C++)时,FastSum 都会生成不同的校验和。
谢谢!
PE 文件格式(如在您的 EXE 中)有一个时间戳字段。在此链接中查看“表 2. IMAGE_FILE_HEADER 字段”:http: //msdn.microsoft.com/en-us/library/ms809762.aspx
看起来如果你真的想要,你可以TimeDateStamp
在十六进制编辑器中编辑,或者编写一个小程序来为你做。如果我正确阅读了上述文档,它看起来像是偏移 10 处的 4 个字节。
我不确定改变这一点会产生什么后果。我的猜测是它可能会让你在调试程序时找不到符号。也许您应该在 PE 标头之外散列区域,而不是更改二进制文件中的此字段。(我提供的链接可能会帮助您确定在哪里有意义。)
根据您必须校验和的内容,您可以剥离 COFF 标头(时间戳所在的位置)或可选标头。在后一种情况下,您只需保存节表和节数据(可执行文件的二进制内容)。如果您确保源代码未更改并且编译和链接标志未更改,则节数据应保持不变。如果要在校验和中包含版本号或代码大小,则必须包含可选标头。
要查找 Optional Header 的开头,请执行以下过程:
要查找节表的开头,请执行以下过程:
有关 PE 和 COFF 格式的完整规范,请下载:Microsoft PE 和 COFF 规范。
哪个时间戳?最后访问?如果您正在访问它,您无法阻止这种更改 - 但是您可以记下它然后将其更改回来?
对于哈希 - 你是什么意思?确保 .exe 没有更改的方法?我会使用CRC。
文件时间戳是由操作系统控制和维护的——它们不是文件(包括可执行文件)本身的内部。