Как подогнать контрольную сумму файла в hex редакторе

Обновлено: 07.07.2024

Привет. Я хочу показать вам небольшой фокус. Для начала вам потребуется скачать архив с двумя файлами. Оба имеют одинаковый размер и одну и ту же md5 сумму. Проверьте никакого обмана нет. Md5 хеш обоих равен ecea96a6fea9a1744adcc9802ab7590d. Теперь запустите программу good.exe и вы увидите на экране следующее.
Попробуйте запустить программу evil.exe.
Что-то пошло не так? Хотите попробовать сами?

О хешах и колллизиях

На самом деле ничего нового во всем этом нет. В действительности данный эффект достигается за счет методов быстрого поиска коллизий для хеш функции разработанных еще в 2004-2006 годах. Если кто не знает, коллизия это два разных набора данных, имеющих одно и тоже хеш-значение. Так вот, в 2004 году группа китайских исследователей разработала алгоритм, основанный на дифференциальном криптоанализе, позволяющий за относительно небольшое время находить два различных случайных блока данных, размером по 128 байт каждый, имеющих одну и ту же md5 сумму. И хотя алгоритм этот в свое время произвел эффект взорвавшейся бомбы быстродействие его оставляло желать лучшего. Но уже в 2006 году чешский криптограф Властимил Клима предложил для поиска коллизий новый метод, позволяющий найти разную пару случайных 128 байтных блоков с одной md5 суммой на персональном компьютере меньше чем за минуту.

Таким образом, с помощью данной методики можно сконструировать два файла с одинаковой md5 суммой, но имеющих различные 128 байт в середине.
M0, M1, . Mi-1, Mi, Mi+1, Mi+2, . Mn,

M0, M1, . Mi-1, Ni, Ni+1, Mi+2, . Mn.
Обратите внимание что хеши обоих этих файлов совпадут, т.к. различающиеся блоки Mi, Mi+1 и
Ni, Ni+1 вернут в качестве si+2 одно и тоже значение, т.к. f(f(s, Mi), Mi+1) = f(f(s, Ni), Ni+1), а поскольку все последующие данные идентичны то последующие значения функции сжатия для обоих файлов будут совпадать.

Что это нам дает

Теперь перейдем от вещей абстрактных и отдаленных к вопросу практическому. Предположим, что у нас есть исполняемый файл M0, M1, X, X, …, Mn. Но его основе мы можем создать два разных файла M0, M1, N1, N1, …, Mn и M0, M1, N2, N1,…, Mn(просто меняем блоки X на N1 и N2). Если блоки N1 и N2 – это коллизии то хеш-сумма этих файлов будет совпадать.
Теперь представим, что этот исполняемый файл имеет следующую структуру:
if (X == X) then < good_program >else < evil_program >
Вот собственно и весь секрет данного фокуса.

Как сделать самостоятельно


Теперь немного поговорим о том как это сделать самому.
Шаг первый: пишем программу с двойным дном.

int good()
int a;
std::cout<< "Good, nice programme!" ;
std::cin>>a;
return 0;
>
int bed()
int a;
for ( int i=0; i<1000; i++)
std::cout<< "Evil, evil code!" ;
>
std::cin>>a;
return 0;
>
int _tmain( int argc, _TCHAR* argv[])
//строки s и s2 содержат только блоки с коллизиями без лишних элементов
string s=str1;
string s2=str2;
s.erase(0,56);
s.erase(128,8);
s2.erase(0,64);
if (s==s2) return good();
> else return bed();
>
return 0;
>

* This source code was highlighted with Source Code Highlighter .

Особое внимание прошу обратить на переменные str1 и str2. Они служат для того, чтобы их можно было быстро найти в hex-редакторе и заменить нужными данными.
Функция main в зависимости от содержимого переменных s вызывает хорошую или плохую версию программы.


Шаг второй: После компиляции программы нужно будет немного поработать с hex-редактором для того чтобы найти в .exe файле наши строки str1 и str2. Скопируй полученный .exe файл. Пусть копия будет называется «обрезанная версия». Откройте копию в hex-редакторе и найди в ней строки str1 и str2. Удалите все данные идущие после первых 64 байт первой из строк. Последние строки полученного файла будут выглядеть вот таким образом: . Сохраните данный файл.

Шаг третий: Созданный на втором шаге файл будет служить так называемым префиксом для поиска коллизий. Чтобы найти коллизию с заданным префиксом нужно скачать отсюда программу fastcoll(Спасибо ее автору Marc Stevens). Исходники лежат тут.
Запустите программу с параметром –p. В качестве префикса укажите «обрезанную версию». В результате работы программы будут созданы два файла «обрезанная версия_msg1» и «обрезанная версия_msg2».


Шаг четвертый: создайте еще одну копию вашей программы. Пусть оригинал будет называться good.exe, а копия evil.exe. Откройте файлы msg1 и msg2 в hex редакторе. Сперва замените блок в котором хранится str2 данными из блока str1. Пусть теперь в них будет одинаковая информация. После этого скопируйте из файла msg1 последние 128 байт и вставьте их в ваш good файл так как показано на рисунке.

Обратите внимание, отступы должны соответствовать следующим параметрам: первый блок вставляется прямо в том месте где заканчивается файл «обрезанная версия», второй блок располагается в 96 байтах от первого. Важно: блоки вставлять одни и те же. Это будет доброй версией нашей программы. Сохраняем файл good.exe и открываем файл evil.exe. Блоки в файл evil.exe нужно будет вставить в те же места, что и в good.exe, единственное отличие заключается в том, что первый блок мы берем из файла msg2, а второй из файла msg1. Это различие и обеспечит нам невыполнение условия программы if (s==s2) и соответственно запустит злую версию программы.

Шаг пятый: Profit! Сравниваем md5 суммы файлов, наслаждаемся полученным результатом.

Репутация: 0
Всего: 0

Как изменить контрольную сумму файла средствами Делфи.
Нужно как-то просто добавить какой-то код или что-то в этом роде.

Репутация: 53
Всего: 133

Какого файла? Формат?

В общем случае можно просто открыть файл как текст и добавить туда пару символов. Хотя для некоторых форматов может не прокатить

Если хочешь, что бы что-то работало - используй написанное,
если хочешь что-то понять - пиши сам.

Репутация: 0
Всего: 0

*.exe, если просто добавить символы, то программа не запуститься.

Репутация: 192
Всего: 484

Репутация: 0
Всего: 0

Нужно изменить размер файла, например чтоб больше был. это Hex редактором что-ли делать или как ? Я просто не пойму что ты написал

Репутация: 1
Всего: -3

Репутация: 53
Всего: 133

Если хочешь, что бы что-то работало - используй написанное,
если хочешь что-то понять - пиши сам.

Репутация: 1
Всего: -3

Я хочу вот что: есть файл 1.exe он занимает 48,8 КБ, нужно сделать так чтоб он занимал места больше чем 48,8 КБ, например 50,8 КБ.

Репутация: 8
Всего: 24

Репутация: 14
Всего: 78

Если у тебя есть исходники, то лучше дописать что-нить (кроме комментариев). А если исходников нет, тогда лучше делать, как посоветовал Snowy

Репутация: 72
Всего: 111

2 Rexar
Изменение контрольной суммы файла и изменение размера файла - это не одно и тоже. Опеределись сначала, что ты хочешь. Увеличить размер файла можно дописав в конец несколько байт. А это суть работа с файлами, причём основы и про это ты можешь прочитать почти в любом FAQ для Delphi/Pascal.

Репутация: 0
Всего: 0

Репутация: 53
Всего: 133

Если хочешь, что бы что-то работало - используй написанное,
если хочешь что-то понять - пиши сам.

Репутация: 192
Всего: 484

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

[ Время генерации скрипта: 0.1479 ] [ Использовано запросов: 21 ] [ GZIP включён ]

HxD для редактирования файлов в шестнадцатеричном коде

Начиная писать обзор hex-редактора c коротким названием HxD, мы и не предполагали, что эта на первый взгляд ничем не выделяющаяся утилита обладает таким внушительным набором функций. Конечно же, в первую очередь это редактирование файлов в шестнадцатеричном коде с сопутствующими возможностями замены и вставки байтов. А теперь просто перечислим остальные функции HxD: редактирование дисков, оперативной памяти, склейка и разделение, сравнение и надёжное удаление файлов, подсчёт контрольных сумм файла различными алгоритмами и статистика использования символов в тексте.

После запуска HxD открываем файл и видим его содержимое в двух панелях: слева отображается шестнадцатеричный код, а справа представлено обычное текстовое содержание файла.

Содержимое файла в HxD

Для редактирования содержимого файла просто ставим курсор в текстовой панели и вводим текст. Изменённые данные отображаются красным цветом, чтобы их легко было найти. Можно изменить информацию и в шестнадцатеричном режиме, тут уже потребуется вводить код символа, состоящий из двух позиций: это могут быть цифры от 0 до 9 или буквы от A до F. Ещё одна полезная функция, предоставляемая HxD, это выделение нескольких байтов для последующих операций.

Редактирование файла в шестнадцатеричном коде в HxD

Выделенный блок можно удалить, при этом остальные данные смещаются влево и изменяется размер файла. В большинстве случаев удаление части кода в файле может привести к нарушению его целостности и невозможности открыть в приложении. Правый клик на выделенном блоке и выбор в меню пункта Заполнить выделение позволит настроить параметры замены байтов. В окошке можно вручную ввести код, который будет заменяться в байтах. Есть и возможность заполнения байтов случайными числами в указанном диапазоне (опция Случайные байты). Кнопка [Нуль-байты] позволяет выбрать заполнение нулями. В списке Шаги можно добавить несколько проходов и для каждого указать заменяемые символы. В результате HxD перепишет выделенные байты несколько раз, по окончании они будут содержать данные, указанные для последнего шага.

Настройка параметров заполнения выделенных байтов в HxD

Есть и другой способ выделения блока, особенно эффективный для больших объёмов данных. Правым кликом в тексте выбираем пункт мню Выделить блок и настраиваем параметры выделения. Указываем смещение от начала файла и на выбор смещение конца или длину блока. Значения смещения можно вводить как шестнадцатеричном виде (hex), так и более привычном нам десятеричном (dec). В результате мы получаем выделенный блок указанной размерности.

Параметры выделения блока в HxD

Через меню Правка – Вставить байты открывается окно настроек параметров добавления данных в файл. Здесь в первую очередь указываем количество добавляемых байтов. Можно и ввести шаблон заполнения, эту последовательность шестнадцатеричных данных HxD будет вставлять в добавленные байты.

Параметры вставки байтов в HxD

Редактирование диска в HxD

Не менее полезной окажется функция [Открыть RAM], позволяющая выбрать приложение в списке процессов и изменять содержимое оперативной памяти. Отчасти аналогичный функционал предлагают многочисленные утилиты для взлома игр, позволяющие добавить «жизни», деньги и др.

Выбор процесса в оперативной памяти для редактирования в HxD

Дальнейшие действия и возможности ничем не отличаются от редактирования файлов в шестнадцатеричном коде.

Редактирование данных приложения в оперативной памяти в HxD

Напоследок отметим ещё некоторые возможности hex-редактора HxD. Программа умеет отображать данные в нескольких кодировках: Ansi, DOS, EBCDIC и Macintosh. Настраивается базис смещения и группировка байтов (по умолчанию по одному), количество байтов в строке. Если есть необходимость надёжного удаления файла, без возможности его удаления, можно выбрать в меню Дополнительно — Файловые инструменты – Надёжное удаление (Шредер).

Ещё пара функций HxD не помешает при работе с файлами. Через меню Дополнительно — Файловые инструменты – Объединить открывается окно настроек склейки файлов. В списке можно выбрать сколько угодно файлов, после чего программа объединит их в один и сохранит под указанным именем. Противоположная по результату функция позволяет разделить один файл на несколько частей. В этом случае открываем разделяемый файл, вводим базовое имя для частей файла, а также выбираем или вводим размер частей.

Параметры разделения файла на несколько частей в HxD

Нередко могут пригодиться возможности HxD для сравнения файлов (Анализ – Сравнение файлов – Сравнить). Здесь всё просто: выбираем два файла и видим их шестнадцатеричный код в двух панелях. Нажимая клавишу F6, можно переместиться на следующее отличие, а комбинация клавиш Shift + F6 возвращает нас на предыдущее отличие. Таким образом, можно быстро просмотреть все отличающиеся данные в файлах.

Для быстрого перемещения можно использовать закладки. Для установки закладки жмём клавиши Ctrl + Shift + цифра, а для перехода на закладку просто Ctrl + цифра.

И, наконец, ещё одна интересная возможность hex-редактора. Это статистика символов в файле (Анализ — Статистика), особенно полезная для текстовых данных. На диаграмме каждый столбец соответствует одному символу, а всего их, как известно 256. И чем выше столбец, тем чаще в тексте встречается соответствующий символ. При клике на столбце в статусной строке отображается символ и его шестнадцатеричный код, процент в тексте и количество.

Статистика использования символов в тексте в HxD

Характеристики:
Язык интерфейса: русский, английский и др.
ОС: Windows 95, 98, Me, 2000, XP, 2003, Vista
Размер файла: 874 Кб
Лицензия: бесплатная

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Понял, спасибо большое!
Интересно почему хекс редакторы не делают это автоматически?

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Загрузи в IC-Prog отредактируй и сохрани или выложи сюда я сделаю.

Приглашаем 30 ноября всех желающих посетить вебинар о литиевых источниках тока Fanso (EVE). Вы узнаете об особенностях использования литиевых источников питания и о том, как на них влияют режим работы и условия эксплуатации. Мы расскажем, какие параметры важно учитывать при выборе литиевого ХИТ, рассмотрим «подводные камни», с которыми можно столкнуться при неправильном выборе, разберем, как правильно проводить тесты, чтобы убедиться в надежности конечного решения. Вы сможете задать вопросы представителям производителя, которые будут участвовать в вебинаре.

Интересно почему хекс редакторы не делают это автоматически?

Хекс редакторы позволяют непосредственно редактировать файлы в бинарном режиме. А Intel HEX - это текстовый формат хранения бинарных данных. Он позволяет читать и редактировать эти данные в обычном текстовом редакторе, так как они хранятся в виде ASCII-символов.

Наверняка просто есть специальные утилиты для редактирования файлов в этом формате. Поищите в гугле по запросу "intel hex editor".

Приглашаем всех желающих 25/11/2021 г. принять участие в вебинаре, посвященном антеннам Molex. Готовые к использованию антенны Molex являются компактными, высокопроизводительными и доступны в различных форм-факторах для всех стандартных антенных протоколов и частот. На вебинаре будет проведен обзор готовых решений и перспектив развития продуктовой линейки. Разработчики смогут получить рекомендации по выбору антенны, работе с документацией и поддержкой, заказу образцов.

Загрузи в IC-Prog отредактируй и сохрани или выложи сюда я сделаю.

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

Интересно почему хекс редакторы не делают это автоматически?

Хекс редакторы позволяют непосредственно редактировать файлы в бинарном режиме. А Intel HEX - это текстовый формат хранения бинарных данных. Он позволяет читать и редактировать эти данные в обычном текстовом редакторе, так как они хранятся в виде ASCII-символов.

Наверняка просто есть специальные утилиты для редактирования файлов в этом формате. Поищите в гугле по запросу "intel hex editor".

Читайте также: