В Windows я хочу сравнить старые двоичные файлы с недавно созданными, чтобы определить, какие файлы были обновлены. Однако, когда я собираю файлы, я даю им новые метаданные (например, версию и т.д.). Щелкнув правой кнопкой мыши по файлу и перейдя на вкладку «Детали», вы можете увидеть версию файла и другую информацию. Это вызывает сравнения дифференциации. Можно ли обойти это, чтобы проверить, какие файлы равны или нет?

2 ответа2

0

Обновить:
Я перечитал ваши комментарии, и мне кажется, что вы хотите сравнить информацию о версии из исполняемых файлов и библиотек вместо проверки целостности файлов.

Ну, во-первых, вам нужно понять, что нет таких терминов, как "заголовок метаданных". Исполняемые файлы и библиотеки в Windows имеют концепцию так называемых "ресурсов", которые связаны с окончательным файлом при компиляции / компоновке. Это не требование, поэтому программист может использовать ресурсы или просто пропустить его. В ресурсах файла можно собрать практически все, что угодно: значки, звуки, изображения, вредоносные зашифрованные данные и так далее. В этом же файле ресурсов программист может указать дополнительную текстовую информацию, например, версию файла. Вы должны понимать, что версия файла не продвигается автоматически на некоторых языках, это ручная работа программиста, чтобы изменить версию файла.
Хорошо, давайте вернемся к теме, я полагаю, вы хотите сравнить версии файлов между исполняемыми файлами / файлами библиотек, поэтому вы можете использовать инструмент командной строки для извлечения версии файла из ресурсов с помощью официальной утилиты от Microsoft sigcheck.exe которая является частью очень полезной утилиты от Sysinternals Suite. Если вы запустите sigcheck.exe для исполняемых файлов, которые имеют ресурсы, эта программа извлечет "метаданные", о которых вы упомянули:

Publisher:
Company:
Description:
Product:
Prod version:
File version:

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

Если вы можете использовать Windows API, вы можете извлекать «метаданные» из ресурсов программным способом, используя FileVersionInfo WinAPI.

Предыдущая догадка:

Поскольку вы упомянули compare old binary files with newly built ones , то лучшим вариантом для вас будет использование систем контроля версий, таких как git или fossil, которые могут отслеживать изменения в двоичных файлах помимо удобного отслеживания исходных файлов.

Вы также можете сравнить двоичные файлы несколькими способами:

Стандартный diff утилиты Unix, которая может сравнить двоичные файлы, то просто бы сказать , если она отличается или нет.
(Если у вас Windows 10, вы можете использовать WSL для запуска нативной утилиты Unix)

Существует также visual binary diff который работает как на Windows, так и на Unix.

Утилита собственного окна fc также может выполнять двоичное сравнение как fc /b file1 file2

Вы можете использовать расширение проводника, которое может вычислять хэш бинарных файлов, например, HashCheck, DirHash или даже использовать fciv Microsoft.

Если вы используете Microsoft Visual Studio, вы также можете использовать WinDiff

Для сравнения огромных файлов (в терабайтах) вы можете использовать старый добрый HxD

0

Дайте Ангусу Джонсону Ресурсный Хакер попробовать. Этот бесплатный инструмент позволит вам просматривать (и даже редактировать) таблицы ресурсов в данном исполняемом файле, если PE или библиотека были скомпилированы с ресурсом Version Info . Помните, что вы не сможете просматривать или редактировать файлы ресурсов в запутанном двоичном файле.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .