Я анализировал файл, написанный на Microsoft Visual C++ 2012, и нашел строку, т.е. "Создана версией MIDL 7.00.0555 в Сб Сен 20 23:13:16 2014", я понимаю, что это происходит потому, что компилятор MIDL был б/у. версия номер я понимаю. Мой вопрос: что означает дата?
Как инженер-реверс, я не стал бы доверять строковым буквам типа "дата сборки", которые вы найдете при разборке.
Вы хотите, чтобы TimeDateStamp из заголовка EXE (PE Header). Если вы перейдете на http://msdn.microsoft.com/en-us/library/ms809762.aspx, вы можете увидеть хорошее руководство по тому, какая информация находится в этом заголовке. Вас интересует эта строка под Таблицей 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.
Несколько лет назад мне нужно было получить только TimeDateStamp, поэтому я перепробовал этот быстрый (и очень хакерский) C++, который я видел где-то в сети (по крайней мере, я думаю, что я его заимствовал), я мог бы написать его с нуля.. это было слишком долго!) Конечно, эта функция предназначена для вызова из WITHIN исполняемого исполняемого файла... но вы получаете идею:
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;
}
TimeDateStamp
может быть подделан / изменен?
Это дата создания .exe
.