md5sum файл, который содержит саму сумму? - PullRequest
1 голос
/ 14 августа 2011

Я написал небольшое приложение на C ++, состоящее из одного EXE-файла.

Я хочу поместить в его диалоге "about" md5sum самого исполняемого файла.Он должен быть статически встроен в исполняемый файл (чтобы его можно было увидеть из шестнадцатеричного редактора), а не вычислялся на лету.

Ответы [ 3 ]

0 голосов
/ 14 августа 2011

Как только вы добавите md5 в файл, файл будет иметь другой md5.Невозможно получить md5 в самом файле.

0 голосов
/ 14 августа 2011

Как уже сказали оба @Shi & @matthewdaniel, это нельзя сделать напрямую.
Однако возможны несколько обходных путей:

  • Расчет MD5 вашего приложения и упаковка вашего исполняемого файла в контейнерное приложение, которое просто извлечет его и проверит, что это MD5
  • Компиляция вашего кода и хэширование только сегментов кода или других сегментов (кроме данных), а затем добавление контрольного кода MD5. Это будет работать, так как строка MD5 будет храниться в сегменте данных, сохраняя действительность предварительно рассчитанного хэша любого другого сегмента памяти.
0 голосов
/ 14 августа 2011

Это невозможно.

Если вы введете хеш md5 в двоичный файл, двоичный файл изменится, поэтому хеш md5 также изменится. Если вы создадите новый и попытаетесь добавить его в двоичный файл, двоичный файл снова изменится.

Так что лучше всего поместить хеш в файл, прочитать этот файл и отобразить его содержимое.

Другим способом может быть создание хэша md5 двоичного файла, а затем добавление его в исполняемый файл. Чтобы получить значение, вы читаете последние 32 байта двоичного файла и отображаете его как md5. Конечно, если вы создаете хеш полного исполняемого файла, он не будет совпадать с хешем - вы должны создать хеш исполняемого файла, исключая последние 32 байта.

Если вы храните 128-битный хэш md5 в необработанном формате (база 256 вместо базы 16), вам потребуется только 16 байт.

...