Как изменить контрольную сумму файла

VPF:: - Форум программистов Vingrad


Форум программистов Vingrad

Модераторы: Poseidon, Snowy, bems, MetalFan

Страницы: (2) Все [1] 2 
( Перейти к первому непрочитанному сообщению )

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> Как изменить контрольную сумму файла ? 

:(

   

Опции темы

Rexar
Дата 27.12.2005, 22:15 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 105
Регистрация: 14.12.2005

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

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

PM MAIL   Вверх
Poseidon
Дата 27.12.2005, 22:20 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Delphi developer
****

Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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

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

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

———————

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

PM MAIL ICQ   Вверх
Rexar
Дата 27.12.2005, 22:25 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 105
Регистрация: 14.12.2005

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

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

PM MAIL   Вверх
Snowy
Дата 27.12.2005, 22:28 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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

Изменить контрольную сумму файла легко. Достаточно изменить любой байт файла и любой CRC выдвст другой результат.
Для exe файлов можно безболезненно заменить любой файл в первых $100 байтах.
Но лучше менять текстовый байт. Например $50 вполне подойдет без ущерба для функциональности.

PM MAIL   Вверх
Rexar
Дата 27.12.2005, 22:33 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 105
Регистрация: 14.12.2005

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

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

PM MAIL   Вверх
DIMONSOFT
Дата 27.12.2005, 22:33 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Бывалый
*

Профиль
Группа: Участник
Сообщений: 230
Регистрация: 19.12.2004
Где: Киев

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

Цитата(Rexar @ 27.12.2005, 22:15)
изменить контрольную сумму

Антивирусам это непонравиться

———————

PM MAIL   Вверх
Poseidon
Дата 27.12.2005, 22:43 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Delphi developer
****

Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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

DIMONSOFT, антивирусам все равно!
Ты когда перекомпилируешь свой проект, антивирус твой сильно ругается? А по сути это тоже изменение контрольной суммы

———————

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

PM MAIL ICQ   Вверх
DIMONSOFT
Дата 27.12.2005, 22:49 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Бывалый
*

Профиль
Группа: Участник
Сообщений: 230
Регистрация: 19.12.2004
Где: Киев

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

Цитата(Poseidon @ 27.12.2005, 22:43)
А по сути это тоже изменение контрольной суммы

Согласен. Но непонятно что
Rexar хочет. Если он будет приписывать одинаковый код к нескольким файлам то тогда и антивирус покажется.

———————

PM MAIL   Вверх
Guest
Дата 27.12.2005, 23:04 (ссылка)
   |    (голосов: 0)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Unregistered

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

  Вверх
Zero
Дата 27.12.2005, 23:43 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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

Цитата(Rexar @ 27.12.2005, 23:33)
это Hex редактором что-ли делать или как ?

Да можно и текстовым редактором… Или я например, использую Total Commander, там выбираешь любой файл, и нажимаешь <F4>

PM MAIL ICQ   Вверх
Guedda
Дата 28.12.2005, 14:47 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Подрывник
****

Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

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

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

———————

Ll 2

PM MAIL WWW ICQ Skype GTalk   Вверх
Yanis
Дата 28.12.2005, 17:07 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

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

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

———————

user posted image *щёлк*

PM MAIL WWW ICQ   Вверх
Rexar
Дата 28.12.2005, 19:32 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 105
Регистрация: 14.12.2005

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

Цитата(Yanis @ 28.12.2005, 17:07)
Увеличить размер файла можно дописав в конец несколько байт.

Как это сделать чтоб *.exe файл потом можно было запустить ? Если я тупо допишу через блокнот то экзэшник не запускается…

PM MAIL   Вверх
Poseidon
Дата 28.12.2005, 19:41 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Delphi developer
****

Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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

Цитата(Rexar @ 28.12.2005, 19:32)
Как это сделать чтоб *.exe файл потом можно было запустить ?

Цитата(Snowy @ 27.12.2005, 22:28)
Для exe файлов можно безболезненно заменить любой файл в первых $100 байтах.
Но лучше менять текстовый байт. Например $50 вполне подойдет без ущерба для функциональности.

———————

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

PM MAIL ICQ   Вверх
Snowy
Дата 28.12.2005, 22:15 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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

Цитата(Rexar @ 28.12.2005, 19:32)
Если я тупо допишу через блокнот то экзэшник не запускается…

smile LOL smile
Конечно. Ты ж бинарник в текст превратил.

Код

var
  fs: TFileStream;
  b:  byte;
begin
  fs:TFileStream.Create('MyExe.exe', fmOpenWrite);
  fs.Seek($50);
  b:=Trunc(Random(256));
  fs.Write(b,1);
  fs.Free;
end;

PM MAIL   Вверх



















Страницы: (2) Все [1] 2 

Ответ в темуСоздание новой темы
Создание опроса
Правила форума «Delphi: Общие вопросы»
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи


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

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »
  1. Главная
  2. Форум
  3. Личные форумы.
  4. Полезности от nikzzzz



[Цитировать]

  • 215
  • Стаж: 8 лет
  • Сообщений: 3114
  • Репутация:127[+] [-]


Часто исполняемые файлы (exe,dll.sys,efi и прочие) редактируются hex редактором, при этом контрольная сумма изменяется, но не все hex редакторы могут ее скорректировать.
Результат — сообщение «файл испорчен» или просто его неработоспособность.
CheckSumPe.exe
Выводит информацию о PE файле и корректирует контрольную сумму.
Синтаксис:
CheckSumPe.exe — хелп
CheckSumPe.exe ИмяФайла — информация.
CheckSumPe.exe /c ИмяФайла — информация и коррекция контрольной суммы.
Рекомендую использовать при правке bootmgr, bootmgr.efi ,grub.efi и т.п.

Последний раз редактировалось: nikzzzz (2017-09-30 18:20), всего редактировалось 3 раз(а)


[Цитировать]

Отправлено: 18-Окт-2016 03:28
(спустя 1 месяц 1 день)

    nikzzzz

  • 215
  • Стаж: 8 лет
  • Сообщений: 3114
  • Репутация:127[+] [-]


Обновил утилиту, добавлен вывод информации о сертификате.


[Цитировать]

Отправлено: 14-Ноя-2016 15:33
(спустя 27 дней)

    KottoSOFT

  • 206
  • Стаж: 8 лет
  • Сообщений: 562
  • Репутация:64[+] [-]


nikzzzz, Привет, а как пользоваться этим? У меня она просто моргнула в виде командной строки и исчезла.


[Цитировать]

Отправлено: 14-Ноя-2016 15:51
(спустя 18 минут)

    vovan1982

  • 214
  • Стаж: 8 лет
  • Сообщений: 1021
  • Репутация:70[+] [-]
  • Откуда: Ростов-на-Дону


KottoSOFT, в коммандной строке checksumpe.exe /c pecmd.exe например.


[Цитировать]

Отправлено: 23-Сен-2017 22:07
(спустя 10 месяцев 9 дней)

    Joker-2013

  • 1039
  • Стаж: 7 лет 7 месяцев
  • Сообщений: 2053
  • Репутация:118[+] [-]
  • Откуда: из прошлого


nikzzzz, Подскажите пожалуйста…
Нужно ли корректировать контрольную сумму при создании 7zip SFX?
В стабе меняются иконка и информация о версии, приклеивается конфиг и архив.
Контрольная сумма должна быть в стабе корректна или в готовом проекте?
На каком этапе её корректировать?
Если подписывать проект цифровой подписью, контрольная сумма становится корректной… (наверное в утилите подписания, встроена корректировка)
Если файл большого размера — придется долго ждать исправления контрольной суммы?
Для чего я это… Реакция Вирус Тотал, на файл подписанный (пусть даже самописной подписью) и не подписанный разные…
Может если корректировать контрольную сумму, вирустотал будет более снисходителен к файлу…


[Цитировать]

Отправлено: 23-Сен-2017 22:42
(спустя 35 минут)

    nikzzzz

  • 215
  • Стаж: 8 лет
  • Сообщений: 3114
  • Репутация:127[+] [-]


Joker-2013,
Ресурсы не учитываются при подсчете кс, их можно изменять, удалять, добавлять — кс не изменется.
7zip SFX — кс подсчитывается только для стаба, если он не изменяется каким нибудь патчером, то и кс можно не обновлять.
По поводу файлов большого размера, утилита сначала полностью читает файл в память, правит его и сохраняет.
Для небольших файлов < 100 Mb это нормально, в принципе, утилиту можно и подправить и для больших файлов, что-бы она правила файл напрямую на диске, не знаю на сколько это необходимо.
По скорости — время на чтение файла + время на его перезапись, время на подсчет кс можно не учитывать, повторюсь, кс подсчитывается только для стаба.

45269

Может если корректировать контрольную сумму, вирустотал будет более снисходителен к файлу?

А черт их знает, в принципе коррекция кс никак не повредит.

45269

Если подписывать проект цифровой подписью, контрольная сумма становится корректной… (наверное в утилите подписания, встроена корректировка)

Это само-собой, иначе подпись будет не действительна.


[Цитировать]

Отправлено: 23-Сен-2017 22:51
(спустя 8 минут)

    Adler

  • 1708
  • Стаж: 7 лет 4 месяца
  • Сообщений: 1165
  • Репутация:65[+] [-]
  • Откуда: Луганск


45269

Может если корректировать контрольную сумму, вирустотал будет более снисходителен к файлу…

Небольшая разница, но есть:

Не корректированная КС —
Корректированная КС —


[Цитировать]

Отправлено: 23-Сен-2017 22:52
(спустя 56 секунд)

    Joker-2013

  • 1039
  • Стаж: 7 лет 7 месяцев
  • Сообщений: 2053
  • Репутация:118[+] [-]
  • Откуда: из прошлого


nikzzzz, понял…. После патчинга, лучше подправить контрольную сумму (только стаба)
Спасибо!


[Цитировать]

Отправлено: 23-Сен-2017 22:54
(спустя 2 минуты)

    Joker-2013

  • 1039
  • Стаж: 7 лет 7 месяцев
  • Сообщений: 2053
  • Репутация:118[+] [-]
  • Откуда: из прошлого


Adler, разве это разница… Если бы детект поменьше хоть был…
Но в любом случае сделаю. Люблю что бы все было правильно.


[Цитировать]

Отправлено: 23-Сен-2017 23:12
(спустя 18 минут)

    Adler

  • 1708
  • Стаж: 7 лет 4 месяца
  • Сообщений: 1165
  • Репутация:65[+] [-]
  • Откуда: Луганск


Joker-2013, ну в каких то случаях может и меньше будет. Я взял первый попавшийся файл проверить есть ли вообще какая то реакция на правильную и неправильную КС.

Последний раз редактировалось: Adler (2017-09-23 23:16), всего редактировалось 1 раз


[Цитировать]

Отправлено: 23-Сен-2017 23:15
(спустя 3 минуты)

    nikzzzz

  • 215
  • Стаж: 8 лет
  • Сообщений: 3114
  • Репутация:127[+] [-]


Joker-2013,
Провел эксперимент на BootInst , результаты поразили, на время написания вирустотал показывал порядка пяти срабатываний (27.07.2017), теперь уже 21.
Результаты теста
Неверная кс.
Правильная кс
При правильной кс число срабатываний упало с 21 до 14 !!! ae


[Цитировать]

Отправлено: 23-Сен-2017 23:20
(спустя 5 минут)

    Joker-2013

  • 1039
  • Стаж: 7 лет 7 месяцев
  • Сообщений: 2053
  • Репутация:118[+] [-]
  • Откуда: из прошлого


nikzzzz, в BootInst и с ресурсами что то не так, как то смотрел, но не написал сразу и забыл…
Неблагодарное дело, от Вирус Тотал прятаться…
Значится, результат есть, будем поправлять KC


[Цитировать]

Отправлено: 23-Сен-2017 23:23
(спустя 3 минуты)

    Adler

  • 1708
  • Стаж: 7 лет 4 месяца
  • Сообщений: 1165
  • Репутация:65[+] [-]
  • Откуда: Луганск


45275

Провел эксперимент на BootInst , результаты поразили, на время написания вирустотал показывал порядка пяти срабатываний (27.07.2017), теперь уже 21.

22 и 15 ab


45276

в BootInst и с ресурсами что то не так

А что там не так?

Последний раз редактировалось: Adler (2017-09-23 23:28), всего редактировалось 1 раз


[Цитировать]

Отправлено: 23-Сен-2017 23:28
(спустя 4 минуты)

    nikzzzz

  • 215
  • Стаж: 8 лет
  • Сообщений: 3114
  • Репутация:127[+] [-]


Очень огорчил Nod32, никогда не считал его параноиком, а тут вон оно как, на кс срабатывает.


[Цитировать]

Отправлено: 25-Сен-2017 22:54
(спустя 1 день 23 часа)

    Ander_73

  • 15549
  • Стаж: 6 лет
  • Сообщений: 3148
  • Репутация:127[+] [-]


nikzzzz, у меня родился смешной вопрос, просто в порядке отвлечённой дискуссии.
Вот мы пользуемся правленным bootia32.efi (BCD->B32). CRC при этом, разумеется, слетела. Имеет смысл корректировать CRC? (я намеренно не поднимаю вопрос, а что происходит при этом с ЦП)

Страница 1 из 2

Текущее время: 10-Фев 16:51

Часовой пояс: UTC + 3

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

Вопрос:

В старой игре, которую я пытаюсь использовать, есть проверка CRC-32. У меня нет доступа к контрольной сумме CRC, поэтому я должен изменить файл, сохраняя тот же вывод контрольной суммы.

Информация у меня есть

  • Файл, если сам файл является единственным входом в программу CRC-32, я могу рассчитать, какая контрольная сумма CRC-32 должна быть.

  • 32-битный полиномиальный код.

Лучший ответ:

Как говорит @MrSmith42, при условии, что вам не нужно поддерживать постоянную длину файла, можно легко вычислить “коллизию” (имя, данное для двух входных сообщений, которые приводят к одному и тому же хешу).

Это неловко, с большим количеством небольшого поворота, но очень быстро.

Предположим, что исходный файл в шестнадцатеричном виде:

1122334455667788

Тогда его контрольная сумма CRC-32 будет 0x9118E1C2 с использованием стандартного полинома CRC32. Если используемый алгоритм не является стандартным, его можно заменить. Я буду придерживаться стандарта для демонстрационных целей.

Сначала внесите необходимые изменения в файл. Например, я меняю байт посередине:

11223344FF667788

Первый шаг для восстановления CRC – заполнить файл четырьмя нулевыми байтами:

11223344FF66778800000000

Контрольная сумма CRC теперь 0x6BBE83C9.

Шаг второй, XOR две контрольные суммы:

0x9118E1C2 XOR 0x6BBE83C9 = 0xFAA6620B

Шаг третий, немного поменять результат:

Bit reverse of 0xFAA6620B = 0xD046655F

Шаг четвертый, и это немного странно, так что смотрите ниже, выполните обратный расчет CRC32:

0xD046655F * inverse(x32) mod crc_poly = 0xe4c7d232

Шаг пятый, побитовый результат, побайтно на этот раз:

0xe4c7d232 bit reversed byte-wise = 0x27E34B4C

Шаг шестой, замените заполненные байты на результат

11223344FF66778827E34B4C

Вуаля, значение контрольной суммы CRC32 теперь вернулось к 0x9118E1C2.

Самый простой способ сделать обратный расчет CRC – это пакет BitVector в Python:

>>> import BitVector as bv
>>> poly = bv.BitVector(intVal = 0x104C11DB7) # "standard" CRC32 polynomial
>>> inv = bv.BitVector(intVal = 0x100000000).gf_MI(poly, 32)
>>> k = 0xD046655F
>>> p = bv.BitVector(intVal = k).gf_multiply_modular(inv, poly, 32)
>>> print(p.getHexStringFromBitVector())
e4c7d232

Этот алгоритм от Redditor/u/supersaw7 опубликован в этой теме. Я не встречал лучшего, несмотря на то, что более простая версия была невероятно возможной.

Ответ №1

Если размер файла не обязательно должен быть постоянным, вы можете просто изменить его содержимое столько, сколько хотите, и добавить несколько байтов (4), чтобы исправить контрольную сумму.

Какие байты для добавления могут быть

а) вычислен, если вы понимаете используемый CRC-алгоритм или

б) попробуйте попытку грубой силы найти подходящие байты (может занять некоторое время, но если вам не нужно часто это делать, это все еще возможно

Ответ №2

Используйте пародию. После того, как вы изменили свой файл, вам нужно будет определить набор битовых местоположений, которые вы позволите изменить, чтобы вернуть CRC в исходное значение. Вам нужно будет предоставить пародию исключительного или исходного CRC, к которому вы хотите вернуться, и текущего CRC, а также местоположения бит, которые вам не нужны, например, в символьных строках, а также некоторая информация о сам CRC и длина файла. затем spoof решает, для какого из этих битов перевернуться, чтобы получить желаемый CRC. В документации дается руководство по количеству изменяемых позиций бит, которые вам нужно будет предложить.

Вы можете оставить файл той же длины или добавить байты в файл для создания позиций, которые считаются изменчивыми.

Старая игра, которую я пытаюсь сделать модом, имеет проверку CRC-32. У меня нет доступа к самой контрольной сумме CRC, поэтому я должен изменить файл, сохраняя тот же вывод контрольной суммы.

Информация у меня есть

  • Файл, если сам файл является единственным входом в программу CRC-32, я могу рассчитать, какой должна быть контрольная сумма CRC-32.

  • 32-битный полиномиальный код.

3 ответа

Лучший ответ

Как говорит @ MrSmith42, при условии, что вам не нужно поддерживать постоянную длину файла, можно легко рассчитать «коллизию» (имя, данное для двух входных сообщений, которые приводят к одному и тому же хешу).

Это неудобно, с большим количеством небольшого поворота, но очень быстро.

Предположим, исходный файл в шестнадцатеричном виде:

1122334455667788

Тогда его контрольная сумма CRC-32 будет 0x9118E1C2 с использованием стандартного полинома CRC32. Если используемый алгоритм не является стандартным, его можно заменить. Я буду придерживаться стандарта для демонстрационных целей.

Сначала внесите необходимые изменения в файл. Например, я меняю байт посередине:

11223344FF667788

Первый шаг для восстановления CRC — заполнить файл четырьмя нулевыми байтами:

11223344FF66778800000000

Контрольная сумма CRC теперь 0x6BBE83C9.

Шаг второй, XOR две контрольные суммы:

0x9118E1C2 XOR 0x6BBE83C9 = 0xFAA6620B

Шаг третий, немного поменять результат:

Bit reverse of 0xFAA6620B = 0xD046655F

Шаг четвертый, и это немного странно, так что смотрите ниже, выполните обратный расчет CRC32:

0xD046655F * inverse(x32) mod crc_poly = 0xe4c7d232

Шаг пятый, побитовый результат, побайтно на этот раз:

0xe4c7d232 bit reversed byte-wise = 0x27E34B4C

Шаг шестой, заменить заполненные байты с результатом

11223344FF66778827E34B4C

Вуаля, значение контрольной суммы CRC32 теперь вернулось к 0x9118E1C2.

Самый простой способ сделать обратный расчет CRC — это пакет BitVector в Python:

>>> import BitVector as bv
>>> poly = bv.BitVector(intVal = 0x104C11DB7) # "standard" CRC32 polynomial
>>> inv = bv.BitVector(intVal = 0x100000000).gf_MI(poly, 32)
>>> k = 0xD046655F
>>> p = bv.BitVector(intVal = k).gf_multiply_modular(inv, poly, 32)
>>> print(p.getHexStringFromBitVector())
e4c7d232

Этот алгоритм от Redditor / u / supersaw7 опубликован в этой теме, Я не сталкивался с лучшей, несмотря на то, что возможна более простая версия.


4

Heath Raftery
3 Май 2019 в 00:19

Если размер файла не обязательно должен быть постоянным, вы можете просто изменить его содержимое столько, сколько захотите, и добавить несколько байтов (4) для исправления контрольной суммы.

Какие байты добавить можно

А) рассчитывается, если вы понимаете используемый алгоритм CRC или

Б) Попытка грубой силы найти подходящие байты (может занять некоторое время, но если вам не нужно делать это часто, это все же выполнимая попытка


1

MrSmith42
14 Янв 2018 в 08:21

Используйте обман . После того, как вы изменили свой файл, вам нужно будет определить набор битовых положений, которые вы бы позволили изменить, чтобы вернуть CRC к исходному значению. Вам нужно будет предоставить поддельный эксклюзивный или исходный CRC, к которому вы хотите вернуться, и текущий CRC, а также битовые местоположения, которые вам не нужны, например, в символьных строках, вместе с некоторой информацией о самом CRC и длине файла. Затем spoof решит, какой из этих битов перевернуть, чтобы получить желаемый CRC. Документация дает руководство о том, сколько изменяемых битовых позиций вам нужно предложить.

Вы можете оставить файл такой же длины или добавить байты в файл, чтобы создать позиции, которые вы считаете изменяемыми.


1

Mark Adler
14 Янв 2018 в 16:29

Содержание

  1. Что такое MD5, SHA-1 и SHA-256
  2. Что такое хеш-суммы и для чего они нужны
  3. Как проверить хеш в Windows 10
  4. Как узнать хеш в PowerShell
  5. Как проверить хеш-сумму через Командную строку
  6. Как проверить хеш через HasTab
  7. Для чего проверяются хэш-суммы файлов и как это сделать?
  8. Что такое целостность файла?
  9. Зачем проверять целостность файла?
  10. Как можно проверить целостность файла?
  11. Что такое хэш суммы md5?
  12. Как проверить хэш-сумму MD5 с помощью программы Solid Explorer?
  13. Есть ли другие подобные решения
  14. Советы и выводы
  15. Контрольные суммы файла
  16. Проверка контрольных сумм файлов в Windows
  17. Проверка хеша файла в командной строке Windows
  18. Проверка хеша в программе MD5 File Checker
  19. Расчет контрольных сумм в программе HashTab
  20. Проверка хешей в Linux
  21. Как проверить MD5 хеш-сумму файла в Windows
  22. Вариант через расширение для проводника
  23. Вариант через командную строку (без установки программ)
  24. Вариант через командную строку (с установкой программы)
  25. Комментарии к статье (9)
  26. Как узнать контрольную сумму файла в Windows
  27. Для чего нужны контрольные суммы
  28. Как вычислить контрольную сумму он-лайн
  29. Как узнать контрольную сумму файла в Windows
  30. Файловый менеджер Total Commander
  31. Файловый архиватор 7-Zip
  32. Как подсчитать контрольную сумму файла из консоли Windows
  33. Считаем контрольную сумму в PowerShell
  34. Какой алгоритм вычисления контрольных сумм самый правильный
  35. Выводы

Что такое MD5, SHA-1 и SHA-256

В процессе исследования интернета или перед загрузкой определенных файлов вы можете столкнуться с загадочными параметрами MD5, SHA-1 и SHA-256, также известными как хеш-суммы. То, что сначала кажется просто случайным набором букв и цифр, на самом деле является уникальным ключом, который позволяет проверить подлинность файлов и узнать, не были ли они изменены или подделаны.

Что такое хеш-суммы и для чего они нужны

Хеш – это результат работы криптографических алгоритмов, разработанных для создания набора цифр и букв. Его еще называют «цифровым отпечатком». Обычно эти наборы имеют фиксированную длину и количество знаков, вне зависимости от размера входной информации. К примеру, у “WP” и “WP-SEVEN” будут хеш-суммы абсолютно одинакового размера. Длина суммы зависит только от того, какой алгоритм хеширования вы проверяете. К примеру, SHA1 выдаст сумму размером 40 знаков, а MD5 только 32.

checksum 1

Кроме того, обратите внимание, что, несмотря на минимальное различие между “WP-SEVEN” и “WP-SEVEM”, хеш-суммы полностью разные и не имеют ничего общего. Это значит, что, даже если кто-то изменит файл хоть на 1 бит (грубо говоря), конечный результат получит совершенно другую хеш-сумму. Это и делает хеш удобным способом проверки подлинности файла. Издатель указывает оригинальную сумму, а пользователь проверяет полученный результат и сравнивает его с оригиналом.

Хеширование осуществляется при помощи различных стандартов. Зачастую это MD5, SHA-1 и SHA-256. Все три алгоритма работают по-разному, но концепция у них одинакова. Мы не будем здесь внедряться в принцип работы каждого алгоритма, поскольку это весьма сложная информация, а только приведем общие сведения, необходимые для обычного пользователя.

Как проверить хеш в Windows 10

Любая настольная операционная система, будь то Windows 10, Linux или MacOS, имеет стандартные механизмы проверки хеш-сумм любых файлов на вашем диске.

Как узнать хеш в PowerShell

PowerShell выдаст вам хеш-сумму вашего файла. По умолчанию Windows генерирует хеш SHA-265, но вы можете указать, что вам нужен хеш другого алгоритма. Для этого используйте следующие команды:

Как проверить хеш-сумму через Командную строку

Множество действий, которые вы выполняете в PowerShell, можно сделать и в классической командной строке. Проверка хеша через Командную строку делается следующим образом.

По умолчанию Командная строка выводит на экран хеш-сумму SHA1, но вы можете изменить это, указав системе, какой именно хеш вы хотите получить. Для этого используйте следующие команды:

Как проверить хеш через HasTab

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

Кроме того, HashTab позволяет легко сравнить хеш-суммы двух файлов. Для этого по первому файлу кликните правой кнопкой мыши, выберите Свойства, а затем откройте вкладку Хеш-суммы файлов. Нажмите Сравнить файл и укажите путь к второму файлу.

checksum 4

Хеш-сумма второго файла отобразится в поле Сравнение хеша, и, если суммы совпадают, возле иконки решетки будет зеленая галочка. Если не совпадают – красный крестик.

Источник

Для чего проверяются хэш-суммы файлов и как это сделать?

Для проверки целостности файлов применяются хэш-суммы, позволяющие путем сравнения отследить изменения или повреждения в файле.

Что такое целостность файла?

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

Зачем проверять целостность файла?

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

Проведение данной процедуры необходимо для проверки целостности загружаемых файлов, чтобы обезопасить свое устройство и убедиться в том, что злоумышленники их не модифицировали, заразив вирусами. Хэш-функция применяется для файлов любых типов, включая установщики EXE и архивы ZIP.

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

Как можно проверить целостность файла?

Для проверки контрольных сумм файлов можно воспользоваться специальными программами. Можно проверить целостность файла онлайн или прибегнуть к использованию встроенного инструмента в командной строке Windows, который называется CertUtil.

Чтобы выполнить проверку по алгоритму MD5, нужно ввести в командную строку следующее:

после чего указать путь к файлу, который необходимо проверить. После этого останется запустить выполнение команды с помощью клавиши Enter.

Что такое хэш суммы md5?

Это специальный криптографический алгоритм хэширования, состоящий из 32 шестнадцатеричных цифр и букв. Используется во многих файлах и сервисах. Существуют другие подобные алгоритмы, например, SHA.

Как проверить хэш-сумму MD5 с помощью программы Solid Explorer?

Данная программа предназначена для удобного управления файлами. Этот файловый менеджер имеет расширенный функционал, позволяющий выполнять различные действия с файлами. С его помощью можно обеспечить защиту файлов на основе надежного шифрования с помощью пароля и отпечатка пальца.

56918 890314

Данное приложение поддерживает основные сетевые протоколы и подключение к облачным хранилищам. Также можно получить Root-права для доступа к корневому каталогу. Есть функции группировки файлов по папкам и индексированный поиск.

Процесс установки на Android выглядит следующим образом:

Есть ли другие подобные решения

Если требуется быстро проверить целостность файла, но нет доступа к специализированному программному обеспечению, можно открыть вкладку « Свойства » двух сверяемых файлов и провести сравнение величины их размера в байтах. Если величины совпадают, то файл, скорее всего, не подвергался внесению каких-либо изменений.

Также можно инсталлировать бесплатную программу Hashtab с официального сайта разработчика. Для этого необходимо выполнить следующие действия:

56918 890355

Еще одним способом проверки совпадения хэш-суммы является использование языков веб-программирования для написания специализированного скрипта.

Советы и выводы

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

Дайте знать, что вы думаете по этой теме материала в комментариях. За комментарии, дизлайки, отклики, лайки, подписки огромное вам спасибо!

Источник

Контрольные суммы файла

hash

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

Конечно можно сравнить размер полученного файла с исходным, но этого не достаточно, чтобы утверждать об идентичности двух файлов. Поэтому были разработаны специальные алгоритмы позволяющие решить эту задачу.

Мы не будем углубляться в техническую реализацию, достаточно знать, что применяя определенный алгоритм высчитывает некое значение однозначно описывающее данный файл. Оно всегда одинаковое для одних и тех же данных и называется контрольной суммой или хешем. Хотя самих алгоритмов хеширования существует множество, вот некоторые из наиболее часто встречающихся: MD5, CRC32, SHA-1, SHA256, BTIH.

Поэтому очень часто на странице загрузки указаны хеши оригинальных файлов, чтобы пользователи могли выполнить проверку после скачивания. Таким образом зная контрольную сумму оригинального файла рассчитанную по какому-либо алгоритму, мы можем проверить идентичность его копии, рассчитав для нее соответствующий хеш и сравнив с оригинальным, если они не совпадут, значит в данных есть разница. Это можно использовать не только для проверки целостности данных загруженных из интернета, но и для сравнения двух файлов в компьютере или, например для проверки корректности записи данных на Узнав о необходимости выполнить проверку, начинающие пользователи компьютера часто не знают, как проверить хеш файлов, хотя это делается очень просто. В разных операционных системах данная операция выполняется по-разному.

Проверка контрольных сумм файлов в Windows

В операционной системе Windows существует множество способов выполнить данную проверку, поэтому рассмотрим только несколько из них, а вы уже сами выберите наиболее удобный вам.

Проверка хеша файла в командной строке Windows

Начнем с самого простого способа не требующего установки дополнительного программного обеспечения. Начиная с Windows 7 есть возможность рассчитать контрольную сумму в командной строке используя встроенную утилиту certutil среди прочего умеющую вычислять хеш файлов. Просто запускаете командную строку и вводите следующую команду:

где [HashAlgorithm] может принимать одно из следующих значений: MD2, MD4, MD5, SHA1, SHA256, SHA384, SHA512. Таким образом, чтобы узнать контрольную сумму файла Win10_1511_1_Russian_x32.iso расположенного в корне диска D: по алгоритму SHA-1 команда будет выглядеть так:

certutil hashfile

Результатом выполнения команды будет строка содержащая хэш-код в виде шестнадцатеричных чисел. Кстати, чтобы не вводить путь до файла руками, можно воспользоваться хитростью. Результат вычислений выделен красным. Осталось сравнить его с оригинальным, для этого удобно вставить их рядом в блокноте. Причем если использовать продвинутый блокнот типа Notepad++, то и сверять визуально не придется, если хеши будут одинаковы, то они подсветятся.

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

Проверка хеша в программе MD5 File Checker

Очень простая программа не требующая установки и имеющая графический интерфейс. Состоит всего из одного окна в котором нужно сначала выбрать файл в верхнем поле, затем вставить в самое нижнее правильный хеш и нажать кнопку «Проверить».

md5 file checker

Через некоторое время программа выдаст вердикт. Основной минус программы, что она умеет использовать только алгоритм MD5, что иногда бывает недостаточно. Скачать MD5 File Checker можно здесь.

Расчет контрольных сумм в программе HashTab

Здесь уже используется немного другой подход, причем есть версия как для Windows так и для Mac OS. В Windows программа является расширением проводника, а на Mac является плагином для Finder. Покажем работу программы на примере Windows.

Если после установки программы HashTab щелкнуть правой кнопкой мыши по проверяемому файлу и выбрать в контекстном меню «Свойства», то мы обнаружим новую вкладку «Хеш-суммы файлов» и одновременно запустится расчет контрольных сумм этого файла.

HashTab

Причем программа умеет вычислять хеш по множеству алгоритмов, а какой будет использоваться, можно выбрать, щелкнув «Настройки». Так же есть возможность указать оригинальную контрольную сумму, если хеши совпадут, то появится зеленая галочка. Скачать HashTab и узнать последние новости можно с сайта программы.

Представленных вариантов вполне достаточно, для проверки целостности файлов в Windows. Единственное пожалуй упомянем, что Total Commander так же умеет вычислять CRC-суммы, соответствующие возможности находятся в меню «Файл».

Проверка хешей в Linux

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

Для хеш-сумм по алгоритму SHA-1 команда выглядит немного иначе.

В случае необходимости рассчитать циклическую контрольную сумму (CRC) используется команда

Кто не хочет связываться с консолью, может поставить программу Gtkhash с графическим интерфейсом и проверять целостность файлов в ней. Для установки программы выполнить в консоли:

Напоследок расскажем о том, как можно убедиться, что скачанный с торрента или доставшейся из другого ненадежного источника дистрибутив Windows оригинальный и его не изменял кто-либо. Для этого идем на сайт Майкрософт где подписчики MSDN могут скачивать ее продукты. Находим нужный нам образ, обращая внимание на версию, дату, разрядность и язык. Когда нужный продукт будет найден, нажимаем на «Сведения» рядом с ним.

hash msdn

В нижней части раскрывшейся области будет указана хеш сумма рассчитанная по алгоритму SHA1. Не смотрите на название вашего файла, его могли переименовать, главное это содержимое. Кроме того не стоит тратить время на проверки контрольных сумм образа, если это сборка, репак и подобное народное творчество, а не образ MSDN.

Источник

1Как проверить MD5 хеш-сумму файла в Windows

5326

В некоторых ситуациях, может быть необходимо, посчитать MD5 хеш-сумму для файла, который вы скачали на свой компьютер. Например, чтобы быть уверенным в том, что вы скачали именно тот файл, который хотели и злоумышленник его не модифицировал. В этой статье мы рассмотрим 2 разных способа это сделать: через расширение для проводника, а также через командную строку.

Вариант через расширение для проводника

Для проводника Windows существует замечательная программа Hashtab, которая бесплатна для некоммерческого использования. Скачать ее можно с официального сайта. Выбираем бесплатную (Free) версию и жмем на кнопку «Download».

download hashtab

После установки программы, в контекстном меню проводника появится новая вкладка «Хеш-суммы файлов», выбрав которую, программа автоматически посчитает хеш-суммы для выбранного файла в зависимости от того, какие алгоритмы выбраны в ее настройках.
hashtab

Вариант через командную строку (без установки программ)

В том случае, если вам не хочется устанавливать какие-либо программы, то можно обойтись встроенными средствами Windows, для этого можно воспользоваться утилитой CertUtil.

Для проверки MD5 хеша, достаточно ввести следующую команду:

Check MD5 Hash

Как видно на скриншоте, хеш-сумма нашего файла 62130c3964. полностью идентична той, которую мы получили с помощью первого способа.

Вариант через командную строку (с установкой программы)

В случае, если необходимо посчитать хеш-сумму файла через командную строку, мы можем воспользоваться утилитой от Microsoft, которая годится как раз для таких случаев. Скачиваем ее с официального сайта Microsoft и устанавливаем. Для этого надо будет создать какую-либо папку на жестком диске и указать ее в процессе установки. В нашем примере, программа была установлена в папку C:Program Files (x86)FCIV. Для того, чтобы посчитать MD5 хеш-сумму файла, нам необходимо запусить командную строку и в ней набрать следующую команду:

md5 fciv

Как видите, MD5 хеш-сумма одинакова как для всех трех способов, которые рассмотрены в данной статье.

Была ли эта статья Вам полезна?

Комментарии к статье (9)

[мат удален] не работают команды.

Доброе время суток, подскажите пожалуйста, где и какими способами можно дешефрировать число из 20-30 цифр. Вот пример:
ba18c0a0c200eb9c4cf3cdb27806eb61

число зашивровано по MD5

В интернете достаточно материалов на эту тематику (как пример), к данной статье это не имеет отношения.

Этот вопрос сильно не по теме статьи 😉
Основной плюс хеш-функций, это то, что они работают только в одну сторону.
1) Можно поискать в интернете сервисы с радужными таблицами (rainbow tables) по алгоритму md5 и попытать счастья там, вводя этот хеш. Но очень вряд ли что кто-нибудь делал вычисления для таких огромных чисел.
2) Можно установить hashcat, который позволяет в том числе искать хеши с помощью CPU и GPU для различных алгоритмов, включая MD5 и методом bruteforce атаки по маске просто пытаться подобрать такое число, которое даст такой хеш. Но этот способ вряд ли подойдет для таких огромных чисел. Для примера на GTX 2080 Ti на перебор всех возможных хешей для числа из 18 цифр требуется чуть меньше 2-х лет.

Источник

Как узнать контрольную сумму файла в Windows

При скачивании ISO образов и архивов больших размеров всегда есть вероятность получить «битый» файл. Во времена Dial-UP такое было сплошь и рядом. И хотя сейчас такое случается намного реже, чтобы убедиться, что перед вами «оригинальный» файл придумали контрольные суммы, которые вычисляются на основе содержимого и позволяют заметить несоответствие даже одного байта.

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

Для чего нужны контрольные суммы

У контрольных сумм две задачи:

Зная контрольную сумму оригинала, можно проверить является ли ваша копия подлинной.

Как вычислить контрольную сумму он-лайн

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

Как узнать контрольную сумму файла в Windows

Разумнее вычислить контрольную сумму локально на своем компьютере. Это быстро и конфиденциально. В этой статье я опишу несколько способов получения контрольных сумм, как с помощью сторонних программ, так и непосредственно с помощью самой операционной системы Виндовс.

Файловый менеджер Total Commander

Total Commander — это популярный файловый менеджер, работающий на платформах Microsoft Windows и Android. В нем есть встроенная функция вычисления контрольных сумм.

checksum 0

После чего вы можете выбрать один из алгоритмом вычисления контрольных сумм.

checksum 1

По-умолчанию Total Commander создает файл с именем проверяемого и с расширением по имени выбранного алгоритма расчета контрольной суммы.

Файловый архиватор 7-Zip

7-Zip — свободный, бесплатный файловый архиватор с высокой степенью сжатия данных. Он поддерживает несколько алгоритмов сжатия и множество форматов данных, включая собственный формат 7z c высокоэффективным алгоритмом сжатия LZMA.

Этот архиватор имеет встроенную функцию вычисления контрольных сумм. Запустить ее можно прямо из контекстного меню Windows:

checksum 2

Если выбрать «звездочку», то программа подсчитает сразу несколько контрольных сумм:

checksum 3

Полученные данные можно выделить и скопировать в текстовый документ.

Как подсчитать контрольную сумму файла из консоли Windows

Чтобы посчитать контрольную сумму совсем не обязательно устанавливать специальные программы. И если вы не пользуетесь упомянутыми выше, то можете рассчитать контрольную сумму прямо из командной строки операционной системы.

Например, чтобы посчитать контрольную сумму SHA1 с помощью утилиты CertUtil нужно запустить командную строку Windows 10, 8 или Windows 7 и ввести следующую команду:

Вот пример ее работы через несколько минут:

windows free download 3

Считаем контрольную сумму в PowerShell

PowerShell — это средство автоматизации от Microsoft, с интерфейсом командной строки и языка сценариев, работает и включена в состав Windows 8 и новее.

Чтобы вычислить контрольную сумму файла необходимо выполнить команду Get-FileHash указав через пробел имя файла и алгоритм вычисления контрольной суммы:

Обратите внимание, что полный путь и имя файла лучше заключить в двойные кавычки.

checksum 4

По-умолчанию, если не указать тип контрольной суммы, то будет посчитана SHA-256.

Для алгоритмов вычисления контрольной суммы в Windows PowerShell поддерживаются следующие значения:

Для оформления вывода в виде списка можно использовать параметр | Format-List. Например:

Тогда результат работы будет выглядеть так:

checksum 5

Подробнее об использовании команды Get-FileHash можно прочитать на официальном сайте Microsoft — https://docs.microsoft.com/ru-ru/powershell/module/microsoft.powershell.utility/get-filehash

Какой алгоритм вычисления контрольных сумм самый правильный

MD5, SHA-1, SHA-256 и прочие – это разные алгоритмы хеш-функции. Хэши являются результатом работы криптографических алгоритмов, и представляют собой строку символов. Часто эти строки имеют фиксированную длину, независимо от размера входных данных.

MD5 самый быстрый, считается устаревшим, а SHA-256 имеет наименьшую вероятность коллизии, когда два разных файла имеют одинаковую контрольную сумму.

Для проверки целостности файла вам следует использовать тот, который предоставляет издатель. Если у вас на выбор есть несколько контрольных сумм, то лучше выбрать в следующей последовательности MD5, SHA-1, SHA-256, последний вариант является более предпочтительным.

Выводы

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

Источник

Забавляемся с хешами

Время прочтения
5 мин

Просмотры 82K

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

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

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

Вы спросите, но что нам даст обладание такой парой сообщений, мало того что они короткие(всего 128 байт), так еще, в добавок, и случайные, т.е. метод не позволяет для заданного сообщения подобрать другое, с идентичным хешем. Однако это открывает огромный простор для различного рода атак на выполняемые файлы. И виной тому служит следующая особенность работы любой хеш функции: Хеш функция по своей природе итеративна. Это означает, что при подсчете хеша сообщение разбивается на блоки, к каждому блоку применяется функция сжатия, зависящая от некоторой переменной, называемой вектор инициализации. Результат этой функции будет являться вектором инициализации для следующего блока. Результат функции после работы с последним блоком и будет окончательным хеш значением нашего сообщения.

Схематично это можно представить следующим образом:
si+1 = f(si, Mi), где si вектор инициализации для i-го блока.
Метод Властимила Клима позволяет для любого заданного значения si подобрать два 128-байтных блока M,M` и N,N` таких, что f(f(s, M), M’) = f(f(s, N), N’).

Таким образом, с помощью данной методики можно сконструировать два файла с одинаковой 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 }
Вот собственно и весь секрет данного фокуса.

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

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

#include <stdafx.h> 
#include<iostream>
#include <string>
using namespace std;
//переменные str1 и str2 в данном примере являются теми самыми элементами X.
static char *str1="qwertyuioplkjhgfdaszxcvbnmkjhgfdsaqwertyuikjh"
"gbvfdsazxdcvgbhnjikmjhbgfvcdsazxdcfrewqikolkjnhgfqwertyuioplkjh"
"gfdaszxcvbnmkjhgfdsaqwertyuikjhgbvfdsazxdcvgbhnjikmjhbgfvcdsa"
"zxdcfrewqikolkjnhgfq123"
;
static char *str2="qaswderftgyhujikolpmnbvcxzasxdcfvgbhnjmkijuy"
"gtfdeswaqscfvgyjqaswderftgyhujikolpmnbvcxzasxdcfvgbhnjmkijuyg"
"tfdeswaqscfvgyjqaswderftgyhujikolpmnbvcxzasxdcfvgbhnjmkijuygt"
"fdeswaqscfvgyjqwertyuikja2"
;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 суммы файлов, наслаждаемся полученным результатом.

Список литературы:
1. Замечательный сайт с описанием данного метода
2. Сайт Властимила Клима
3. Сайт автора программы findcoll

Понравилась статья? Поделить с друзьями:

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

  • Как изменить контрольную сумму victoria 3
  • Как изменить контрольную сумму ck3
  • Как изменить контрольное слово сбербанк
  • Как изменить контроллер микрофона
  • Как изменить контроллер звука на realtek windows 10

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии