У меня есть два разных файла: code1.c
и code2.c
, оба они уже содержат некоторый код C (содержимое файлов различается).
Я хотел бы скомпилировать оба файла предпочтительно с одинаковыми флагами компиляции, поэтому я получу два двоичных файла, которые будут иметь одинаковый размер и одинаковый хэш md5.
Примечание. Допускается добавление лишнего мертвого / нежелательного кода в один из файлов. Думаю, gcc
версия компилятора не имеет значения? (Я бы использовал gcc version ≥ 7
)
Как я могу этого добиться?
Я нашел несколько статей, которые показывают, что конфликт хэша md5 возможен, но проблема в том, что это должно привести к тому же размеру файла:
md5 hash
файлаbinary1
и исходный кодcode2.c
, где скомпилированныйcode2.c
(binary2
) должен иметь тот жеmd5 hash
, что и файлbinary1
? - person Awaaaaarghhh   schedule 25.04.2020md5-file-hash
из скомпилированногоcode2.c
(binary2
) был точно таким же, какmd5-file-hash
изbinary1
. Мне не ясно, как я могу адаптировать решение из второй ссылки (natmchugh.blogspot.com) к моему вопросу. Вы можете мне намекнуть? ... или лучше напишите полный ответ? - person Awaaaaarghhh   schedule 25.04.2020NOPs
коды opt ... или что-то подобное), если это сработает, это тоже будет нормально ... - person Awaaaaarghhh   schedule 25.04.2020asm volatile("jmp foo\n#a bunch of asm-encoding of arbitrary binary stuff here\nfoo:": : :)
Это дает вам практически прямой доступ к середине двоичного файла из источника. - person Joseph Sible-Reinstate Monica   schedule 25.04.2020