Как подогнать контрольную сумму файла в hex редакторе
Привет. Я хочу показать вам небольшой фокус. Для начала вам потребуется скачать архив с двумя файлами. Оба имеют одинаковый размер и одну и ту же 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
Репутация: 192
Всего: 484
Репутация: 0
Всего: 0
Репутация: 1
Всего: -3
Репутация: 53
Всего: 133
если хочешь что-то понять - пиши сам.
Репутация: 1
Всего: -3
Репутация: 8
Всего: 24
Репутация: 14
Всего: 78
Репутация: 72
Всего: 111
Изменение контрольной суммы файла и изменение размера файла - это не одно и тоже. Опеределись сначала, что ты хочешь. Увеличить размер файла можно дописав в конец несколько байт. А это суть работа с файлами, причём основы и про это ты можешь прочитать почти в любом FAQ для Delphi/Pascal.
Репутация: 0
Всего: 0
Репутация: 53
Всего: 133
если хочешь что-то понять - пиши сам.
Репутация: 192
Всего: 484
Запрещается!
1. Публиковать ссылки на вскрытые компоненты
2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.
[ Время генерации скрипта: 0.1479 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Начиная писать обзор hex-редактора c коротким названием HxD, мы и не предполагали, что эта на первый взгляд ничем не выделяющаяся утилита обладает таким внушительным набором функций. Конечно же, в первую очередь это редактирование файлов в шестнадцатеричном коде с сопутствующими возможностями замены и вставки байтов. А теперь просто перечислим остальные функции HxD: редактирование дисков, оперативной памяти, склейка и разделение, сравнение и надёжное удаление файлов, подсчёт контрольных сумм файла различными алгоритмами и статистика использования символов в тексте.
После запуска HxD открываем файл и видим его содержимое в двух панелях: слева отображается шестнадцатеричный код, а справа представлено обычное текстовое содержание файла.
Для редактирования содержимого файла просто ставим курсор в текстовой панели и вводим текст. Изменённые данные отображаются красным цветом, чтобы их легко было найти. Можно изменить информацию и в шестнадцатеричном режиме, тут уже потребуется вводить код символа, состоящий из двух позиций: это могут быть цифры от 0 до 9 или буквы от A до F. Ещё одна полезная функция, предоставляемая HxD, это выделение нескольких байтов для последующих операций.
Выделенный блок можно удалить, при этом остальные данные смещаются влево и изменяется размер файла. В большинстве случаев удаление части кода в файле может привести к нарушению его целостности и невозможности открыть в приложении. Правый клик на выделенном блоке и выбор в меню пункта Заполнить выделение позволит настроить параметры замены байтов. В окошке можно вручную ввести код, который будет заменяться в байтах. Есть и возможность заполнения байтов случайными числами в указанном диапазоне (опция Случайные байты). Кнопка [Нуль-байты] позволяет выбрать заполнение нулями. В списке Шаги можно добавить несколько проходов и для каждого указать заменяемые символы. В результате HxD перепишет выделенные байты несколько раз, по окончании они будут содержать данные, указанные для последнего шага.
Есть и другой способ выделения блока, особенно эффективный для больших объёмов данных. Правым кликом в тексте выбираем пункт мню Выделить блок и настраиваем параметры выделения. Указываем смещение от начала файла и на выбор смещение конца или длину блока. Значения смещения можно вводить как шестнадцатеричном виде (hex), так и более привычном нам десятеричном (dec). В результате мы получаем выделенный блок указанной размерности.
Через меню Правка – Вставить байты открывается окно настроек параметров добавления данных в файл. Здесь в первую очередь указываем количество добавляемых байтов. Можно и ввести шаблон заполнения, эту последовательность шестнадцатеричных данных HxD будет вставлять в добавленные байты.
Не менее полезной окажется функция [Открыть RAM], позволяющая выбрать приложение в списке процессов и изменять содержимое оперативной памяти. Отчасти аналогичный функционал предлагают многочисленные утилиты для взлома игр, позволяющие добавить «жизни», деньги и др.
Дальнейшие действия и возможности ничем не отличаются от редактирования файлов в шестнадцатеричном коде.
Напоследок отметим ещё некоторые возможности hex-редактора HxD. Программа умеет отображать данные в нескольких кодировках: Ansi, DOS, EBCDIC и Macintosh. Настраивается базис смещения и группировка байтов (по умолчанию по одному), количество байтов в строке. Если есть необходимость надёжного удаления файла, без возможности его удаления, можно выбрать в меню Дополнительно — Файловые инструменты – Надёжное удаление (Шредер).
Ещё пара функций HxD не помешает при работе с файлами. Через меню Дополнительно — Файловые инструменты – Объединить открывается окно настроек склейки файлов. В списке можно выбрать сколько угодно файлов, после чего программа объединит их в один и сохранит под указанным именем. Противоположная по результату функция позволяет разделить один файл на несколько частей. В этом случае открываем разделяемый файл, вводим базовое имя для частей файла, а также выбираем или вводим размер частей.
Нередко могут пригодиться возможности HxD для сравнения файлов (Анализ – Сравнение файлов – Сравнить). Здесь всё просто: выбираем два файла и видим их шестнадцатеричный код в двух панелях. Нажимая клавишу F6, можно переместиться на следующее отличие, а комбинация клавиш Shift + F6 возвращает нас на предыдущее отличие. Таким образом, можно быстро просмотреть все отличающиеся данные в файлах.
Для быстрого перемещения можно использовать закладки. Для установки закладки жмём клавиши Ctrl + Shift + цифра, а для перехода на закладку просто Ctrl + цифра.
И, наконец, ещё одна интересная возможность hex-редактора. Это статистика символов в файле (Анализ — Статистика), особенно полезная для текстовых данных. На диаграмме каждый столбец соответствует одному символу, а всего их, как известно 256. И чем выше столбец, тем чаще в тексте встречается соответствующий символ. При клике на столбце в статусной строке отображается символ и его шестнадцатеричный код, процент в тексте и количество.
Характеристики:
Язык интерфейса: русский, английский и др.
ОС: 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".
Читайте также: