11

I have observed that windows executable files show incorrect timestamps when I view them in PE studio. For example this Notepad.exe file shows a compiler timestamp of 0x86FCBD69 (Mon Oct 07 03:45:05 2041 )

To validate this today (3 May 2021),I converted a Python program file to EXE & checked the same in PE Studio. It also showed an incorrect compiler timestamp of 0x5FFEC122 (Wed Jan 13 15:15:06 2021 ) Python executable

Why are compiler timestamps incorrect ? To my understanding if the Python program was converted to exe today, it should show today's date under the compiler timestamp.

5
  • I'm thinking that's the date the compiler itself was built, not the executable you're looking at. – MetalMikester May 3 at 12:04
  • @MetalMikester - The compiler is from the future? What’s more likely is the program is improperly converting the date. – Ramhound May 3 at 12:26
  • @Ramhound LOL! I wasn't focusing on the year, just the name "compiler-stamp" which I seem to recall is the compiler build date, not the EXE build date. But I'm not 100% sure. The second one is Jan 2021, however. – MetalMikester May 3 at 12:35
  • 1
    @MetalMikester - In either case it’s the wrong date, which indicates, the software is converting the value improperly. I also wouldn’t except either field to contain worth whole data based on their name – Ramhound May 3 at 12:40
  • @Ramhound Skynet is planning to go operational in 2041? Interesting – Stian Yttervik May 4 at 8:40
22

They're deliberately set to a fixed value:

  • The Old New Thing: Why are the module timestamps in Windows 10 so nonsensical?

    One of the changes to the Windows engineering system begun in Windows 10 is the move toward reproducible builds. This means that if you start with the exact same source code, then you should finish with the exact same binary code.

    […]

    Timestamps are another source of non-determinism. Even if all the inputs are identical, the outputs will still be different because of the timestamps. [...] Setting the timestamp to be a hash of the resulting binary preserves reproducibility.

  • The Old New Thing: What does the executable timestamp really mean?

    The name timestamp is misleading. Its real purpose is to act as a signature so that the operating system can determine whether a DLL against which one set of values was precalculated matches the DLL physically on the system. A better name for it would have been "UniqueId".

Note: There are two meanings to the term 'signature' here. Raymond calls the field a "signature" only in the sense of it being something unique that allows distinguishing this binary from other binaries (in the same way that the 'MZ' bytes are a signature for all .exe files). It is however not a cryptographic digital signature and does nothing to ensure the file's integrity or authenticity.

5
  • Well that's quite informative. I believe these signatures are used to ensure the integrity DLL files so that no malicious adversary can modify & recompile them. – Monk May 3 at 15:25
  • 2
    They are not signatures. You're correct that signatures are used to ensure integrity and prevent tampering, and Microsoft indeed digitally sign all their executables -- but timestamps are not the same thing as signatures. The timestamp is a 32-bit number; even if it were used to prevent tampering, it takes literally minutes to simply run through every possible 32-bit number until you find one that "passes". Actual signatures are hundreds of bits (or thousands because Microsoft uses RSA). – user1686 May 3 at 15:43
  • 4
    @supercat - Microsoft made this change awhile ago, it’s not like they recently made the change, it’s been more than 4 years. – Ramhound May 3 at 22:20
  • @Ramhound 4 years lol, those articles are from 2010-11 – Hong Ooi May 4 at 9:58
  • @HongOoi - Only one is from 2011 – Ramhound May 4 at 12:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.