2011-04-26 2 views
1

Кто-нибудь знает, как предотвратить изменение временной метки исполняемого файла? Я пытаюсь создать согласованный хеш-код для .exe, но я думаю, что временная метка может мешать этому. Каждый раз, когда я перекомпилирую код (VS C++), FastSum генерирует другую контрольную сумму.Сохранять временную метку .exe от изменения

Спасибо!

+0

Почему вы пытаетесь это сделать? Какова фактическая проблема, которую вам нужно решить? – Johnsyweb

+0

Ну, я не совсем уверен, что буду честным, и я начинаю думать, что меня отправили на кроличью тропу. Это был запрос моего менеджера ... –

ответ

1

В зависимости от того, что у вас есть для контрольной суммы, вы можете либо отключить заголовок COFF (где находится временная метка), либо дополнительный заголовок. В последнем случае вы просто сохраняете только данные таблицы разделов и разделов (двоичный контент исполняемого файла). Если вы убедитесь, что исходный код не изменен, а компиляция и флаги ссылок не изменены, данные раздела должны оставаться неизменными. Если вы хотите включить номера версий или размер кода в контрольную сумму, вы должны включить дополнительный заголовок.

Чтобы найти начало опционального заголовка, выполните следующую процедуру:

  1. чтения 4-байтовый подписи базовый адрес из 0x3C.
  2. Перейти подпись смещения.
  3. Смещение 20 байт. Это начало дополнительного заголовка.
  4. Здесь вы должны ожидать 0x10b, если это 32-разрядный exe-файл или 0x20b, если 64-разрядный.

Чтобы найти начало раздела таблицы, следующую процедуру:

  1. Read 4-байтовый подписи базовый адрес из 0x3C.
  2. Перейти подпись смещения.
  3. смещение 16 байт.
  4. Прочтите 2-байтовый дополнительный размер заголовка здесь.
  5. Перейти к необязательному заголовку.
  6. Смещение Необязательный размер байта заголовка. Это начало таблицы разделов.
  7. Здесь вы должны ожидать название раздела (например, «.text», «.data» и т. Д.).

Для получения полной информации о формате PE & COFF, скачайте: Microsoft PE and COFF Specification.

+0

Awesome: D, спасибо за эту информацию. Это должно сделать трюк, я не знал, что вы можете удалить эту часть заголовка ... узнать что-то новое сегодня. –

0

Какая временная метка? Последний доступ? Вы не можете помешать этому изменению, если вы обращаетесь к нему, - но вы могли бы принять к сведению его и затем изменить его обратно?

Для хэша - что вы имеете в виду? Способ обеспечения того, чтобы .exe не изменился? Я бы использовал CRC.

+0

Я использую FastSum для проверки хэша. Ну, я не совсем уверен, если это временная метка, добавленная в .exe при перекомпиляции, или если есть что-то еще, что заставляет хэш выходить по-другому. Но да, я думаю, я не уверен, что «Последний доступ» - это то же свойство, которое может меняться при перекомпиляции кода. –

+2

Это правда, что файловая система имеет метаданные для последнего времени записи и т. Д., Но формат файла EXE имеет временную метку внутри содержимого файла. Вероятно, это значит. – asveikau

+0

@asveikau - да, это будет иметь для меня наибольший смысл, формат файла меняется, а не метаданные. –

-2

Временные метки файлов управляются и поддерживаются операционной системой - они не являются внутренними для файла (включая исполняемые файлы).

+3

Я думаю, что он означает временные метки в заголовке PE, а не метаданные файловой системы , – asveikau

2

Формат файла PE (как в вашем EXE) имеет поле метки времени. Проверьте «Таблица 2. IMAGE_FILE_HEADER полей» по этой ссылке: http://msdn.microsoft.com/en-us/library/ms809762.aspx

Похоже, если вы действительно хотите, вы можете редактировать TimeDateStamp в шестнадцатеричном редакторе, или написать небольшую программу, чтобы сделать это для вас. Если я правильно прочитал вышеприведенный документ, это выглядит как 4 байта при смещении 10.

Я не уверен, что последствия этого изменения. Я предполагаю, что это может сделать вас неспособным найти символы при отладке программы. Возможно, вместо того, чтобы изменять это поле в вашем двоичном файле, вы должны хэш-регионы вне заголовка PE. (Ссылка, которую я предоставляю, может помочь вам определить, где это имеет смысл.)

+0

Я сделал двоичную разницу, и есть два раздела, которые разные. Один из них в самом начале. Есть строка «Эта программа не может быть запущена в режиме DOS». newline, затем «$ 00000000000000», а следующий фрагмент - это первое отличие. Второй - примерно на полпути через данные и должен иметь какое-то отношение к компилятору, перемещающему материал только потому, что он чувствует себя так ... –

+0

извините, предыдущий ответ был ошибочно помещен. Спасибо за ссылку. Я займусь этим. Но чем больше я думаю об этом, тем больше кажется бессмысленным, я имею в виду, что в основном они хотят, чтобы я генерировал exe на основе хеш-кода, а не наоборот, что является точкой хеш-кода. –

Смежные вопросы