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