防止.exe的时间戳发生变化



有人知道防止可执行文件时间戳改变的方法吗?我试图为。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的开头,请遵循以下步骤:

  1. 从0x3c读取4字节签名基址。
  2. 返回签名偏移量
  3. 偏移量20字节。这是可选标头的开始
  4. 如果是32位的exe文件,您应该期望0x10b,如果是64位的,则应该期望0x20b。

查找section表的起始位置,请执行以下步骤:

  1. 从0x3c读取4字节签名基址。
  2. 返回签名偏移量
  3. 偏移16字节
  4. 读取2字节的可选头大小。
  5. Offset可选报头大小字节。这是section表的开始部分。
  6. 您应该期望这里有一个节名(如"。文本"、"。数据"等等)。

完整的PE规格;COFF格式,下载此:Microsoft PE和COFF规范。

文件时间戳是由操作系统控制和维护的—它们不是文件(包括可执行文件)本身的内部。

相关内容

最新更新