c+中的时间戳是什么+;exe(使用MIDL将IDL转换为TLB文件) 我正在分析一个在微软Visual C++ 2012中编写的文件,发现了一个字符串,即“MIDL版本7.00.055,在SAT 9月20日23∶13:16 2014”中创建,我理解这是因为有一个MIDL编译器。 我的问题是:日期意味着什么?
它是创建c+中的时间戳是什么+;exe(使用MIDL将IDL转换为TLB文件) 我正在分析一个在微软Visual C++ 2012中编写的文件,发现了一个字符串,即“MIDL版本7.00.055,在SAT 9月20日23∶13:16 2014”中创建,我理解这是因为有一个MIDL编译器。 我的问题是:日期意味着什么?,c++,reverse-engineering,C++,Reverse Engineering,它是创建.exe的日期。作为一名逆向工程师,我不相信在反汇编中找到的任何“构建日期”类型的文字字符串 您需要的是来自EXE头(PE头)的时间戳。如果转到,您可以看到关于此标题中包含哪些信息的良好指南。您感兴趣的是表2下的这一行: DWORD TimeDateStamp The time that the linker (or compiler for an OBJ file) produced this file. This field holds the number of seconds s
.exe
的日期。作为一名逆向工程师,我不相信在反汇编中找到的任何“构建日期”类型的文字字符串
您需要的是来自EXE头(PE头)的时间戳。如果转到,您可以看到关于此标题中包含哪些信息的良好指南。您感兴趣的是表2下的这一行:
DWORD TimeDateStamp
The time that the linker (or compiler for an OBJ file) produced this file. This field holds the number of seconds since December 31st, 1969, at 4:00 P.M.
几年前,我只需要得到时间数据表,所以我重新调整了我在网上看到的这个快速的(而且非常尖刻)的C++(至少,我想我是借用了它——我可以很好地从头开始写它……太长了!)当然,这个函数是从可执行文件中被检查的……你明白了:
unsigned int GetExecutableTimestamp()
{
unsigned int BaseAddress = (unsigned int)GetModuleHandle(0);
unsigned int dwPos = *(unsigned int*)(BaseAddress+0x3C);
unsigned int Timestamp = *(unsigned int*)(BaseAddress+dwPos+0x8);
return Timestamp;
}
谢谢,但是我有3个不同大小的exe,它们有相同的时间戳,那么3个exe怎么能有相同的编译时间呢?如果它是一个projectmap,那么它们可能是在同一时间生成的。可能是在创建文件时?我想即使是
TimeDateStamp
也可以被伪造/修改?是的,如果你真的想修改的话,可以修改任何东西。但是,至少有了时间戳,这将是一个“主动”的黑客/欺骗/修改。一般来说,编译器在没有主动黑客/欺骗的情况下生成修改值的可能性最小。而其他库/软件可能具有可用于创建特殊日期/时间等的设置和/或其他UI值。此外,反汇编中的字符串文字可能在实际链接器/编译器生成文件之前或之后几秒钟创建。你提出了一个正确的观点;然而,我认为TDS是最好的选择。我还应该提到使用“TimeDateStamp”的另一个好处是它总是在同一个地方:)