Переходим от теории к практике
Прежде, чем разрабатывать собственный взломщик CRC32, попробуем повозиться с уже существующим. Скачаем популярный распознаватель упаковщиков PEiD (http://www.wasm.ru/baixado.php?mode=tool&id=67), установим набор дополнительных плагинов (http://www.wasm.ru/baixado.php?mode=tool&id=318), в число которых входит и модуль с FixCRC с названием, которое говорит само за себя (в аннотации на WASM'е сказано, что он предназначен для исправления поля CheckSum в PE-заголовке, но это не так!).
Рисунок 1 внешний вид утилиты PEiD
Запускаем PEiD и загружаем в него какое-нибудь приложение, например, общепринятый notepad.exe ака "блокнот" (см. рис. 1). Давим на кнопку со стрелочкой "–>" в правом нижнем углу, на экране появляется меню "Plugins" из которого мы выбираем пункт "CRC32" (см. рис. 2). Возникает симпатичное диалоговое окошко, сообщающее нам контрольную сумму всего файла (у мыщъх'а она равна AFBF6001h). Записываем ее на бумажке (или запоминанием в голове, кстати говоря, после курса принятия ноотропов восьмизначные числа запоминаются только так!).
Рисунок 2 вызов плагина CRC32
Выходим из PEiD и правим файл по своему усмотрению в hiew'е или любом другом hex-редакторе, который вам больше по вкусу. Модифицированный файл вновь загружаем в PEiD и рассчитываем новую контрольную сумму, которая теперь равна A97343D5h. AFBF6001h != A97343D5h, что не есть хорошо и чтобы CRC было OK, его надо поправить. Заносим в поле NewCRC старую контрольную сумму оригинального файла (AFBF6001h) и ждем кнопку "Fix It". Плагин сообщает, что "4 bytes written" (см. рис. 3) и действительно дописывает к концу файла какую-то гадость (см. рис. 4)
Рисунок 3 для "подделки" контрольной суммы, PEiD дописывает в конец файла 4 байта
Рисунок 4 последние 4'е байта (выделенные красным маркером) были вставлены PEiD для коррекции CRC
Зато контрольная сумма файла вновь равна AFBF6001h, какой она и была до модификации. Правда, длина файла изменилась… к тому же с защитами, контролирующими контрольную сумму "от сих до сих" такой трюк уже не прокатывает и приходится хитрить.
Рисунок 5 PEiD скорректировал CRC модифицированного файла так, чтобы никто не заметил подмены
Берем оригинальный notepad.exe, привычным действием вычисляем контрольную сумму, затем отрезаем от его хвоста 4 байта (в hiew'е это делается так: загружаем файл, нажимаем <ENTER> для перехода в hex-mode, перемещаемся в конец файла по <Ctrl-End>, отступаем курсором на четыре байта назад, давим <F3> для перехода в режим редактирования и говорим <F10> (truncate), подтверждая всю глубину серьезности своих намерений клавишей "Y"). Модифицируем файл по своему усмотрению и fix'им его в PEiD. Как легко догадаться, корректирующие байты будут дописаны на место отрезанных. Ни длина, ни контрольная сумма файла теперь не изменится!
Аналогичным образом можно корректировать отдельные блоки, если предварительно вырезать их из программы и сохранить в отдельном файле, который после модификации и исправления CRC вновь вернуть там, где они лежали.