Изменяем запретное Крис Касперски Хакер, номер #090, стр. 090-122-7 Как это было Подделкой CRC мыщъх заинтересовался совершенно случайно. Все началось с экспериментов над интеловскими биосами, формат прошивок которых был неизвестен и всякая попытка модификации приводила к краху, с воплем о неправильном CRC. Вот только найти место хранения CRC никак не удавалось. Границы контролируемого блока были также неизвестны. Казалось, что дело труба, но, используя тот факт, что в прошивке хранится не само CRC, а "корректирующие" байты, обращающие контрольную сумму в ноль, а все структуры выровнены на границе 4-х килобайт, мыщъх решил действовать так: выбираем блок, считаем его CRC (алгоритм подсчета был выдран из прожигающей программы, который был тут же опознан как стандартный). Если не ноль, то движемся дальше до тех пор, пока контрольная сумма выбранного блока не обратится в ноль. Достижение нуля сигнализирует о том, что границы контролируемого блока с той или иной степенью вероятности уже найдены. Модифицируем BIOS по своему желанию, после чего добавляем "корректирующие" байты так, чтобы контрольная сумма не изменялась, то есть осталось равной нулю! Таким образом, чтобы "взломать" CRC, помимо алгоритма расчета, еще необходимо знать, откуда и докуда его считать! В противном случае попытка подделки контрольной суммы будет немедленно разоблачена. Неизвестные алгоритмы и борьба с ними Хорошо, если алгоритм подсчета контрольной суммы известен, но что делать если он не доступен (воплощен в железе, находится на удаленном сервере и т. д.)? А вот что: воспользоваться тупым перебором! Информационная стойкость CRC32 равна 32-м битам, дающих всего лишь 4.294.967.296 комбинаций. Учитывая высокую скорость вычисления CRC32, подбор корректирующих байтов займет совсем немного времени — буквально минуты, а то и десятки секунд! Внедряем двойное слово, равное нулю, в произвольное место контролируемого блока и рассчитываем контрольную сумму по обычному алгоритму. Если CRC не OK, увеличиваем двойное слово на единицу и продолжаем до тех пор, пока желаемое CRC не будет найдено. CRC16 подбирается вообще мгновенно! С CRC64, конечно, уже приходится основательно попыхтеть, но быстрые табличные алгоритмы на мощных процессорах найдут искомую комбинацию за несколько часов, ну в худшем случае, за ночь (тут все, конечно, от размера контролируемого блока зависит). CRC128 методом перебора уже не ломается (разве что задействовать сеть из нескольких машин), но элементарно восстанавливается по методике, описанной выше. WWW http://www.onembedding.com/info/crc/crc_rus.zip - охренительное руководство по устройству и реализации различных CRC-алгоритмов на русском языке. WWW http://www.wasm.ru/baixado.php?mode=tool&id=318 - небольшая коллекция плагинов к PEiD, среди которых есть и плагин, ответственный за подделку CRC32, путем дописывания 4-х байтов в конец файла. |