![]() |
подделка контрольных сумм
Само слово коллизия - это столкновение противоположных сил, интересов, взглядов. Так написано в словаре. ну а я хочу рассмотреть коллизию в crc32.
Коллизия контрольных сумм в crc32 - отличный пример того, что нет ничего невозможного Допустим, вы протрянили форум.. Или же архив... Отлично, но вот в чем беда - контрольные суммы не совпадают.. И в этой статье я хочу написать о том, что такое и как подделать контрольные суммы.. Собственно, для начала нужен сам пример вычисления контрольной суммы.. Код:
Как подсчитывается CRC32?Цитата:
Но пожалуй, надо перейти от теоризации к более практической части! рассмотрим: По сути, в самой прошивке не хранится CRC, а там хранятся лишь корректирующие байты. Но походу, если все структуры выверены на границу 4-х байт, то можно взять блок, стандартным алгоритмом подсчитать контрольную сумму. если же она не будет равняться нулю, то ищет тот блок, который подходит под нужные нам условия. В утилите: PEiD аже плагин есть специально для подделки CRC (http://slil.ru/24480346 - ссыль посеяла. поэтому залила), а также вот(http://www.secretashell.com/codomain/peid/plugins/ ) ссылка на подборку плагинов для нее.. По сути надо знать что вычислять и по каким параметрам.. Нашла таблицу - приведу ее: http://img507.imageshack.us/my.php?i...0062693de8.jpg По сути, в Crc32 нам надо подогнать блок байт к контролируемому блоку, подогнав контрольную сумму к нужному значению. Блок равен разрядности.. То есть для CRC32 блок будет равняться 4-ем байтам.. расчитанными, или полученными с помощью брута. чтобы рассчитать эту сумму, нужен не только aлгоритм, данные из вышепредставленной таблицы, но также сведения(также необходимые) откуда и докуда защита считает контрольную сумму. Затем нам надо решить внедрять ли нам внутрь кода корректирующие байты, или же просто дописать их. И если целостность всего блока проверяется, то тогда, конечно же легче, лучше и проще нам будет дописать необходимые данные. но тогда длина контролируемого блока изменится.. Но защитные системы часто не обращают внимания на дописывание - они контролируют целостность определенного блока байтов. Я приведу исходник плагина для PEiD'а, который дописывает 4 корректирующих байта к файлу: Код:
#include <stdio.h>Этот метод намного более действенен.. у него больше перспектив... При желании, можно выбить себе место для 4х байт. Можно переписать машинные команды. для начала надо найти наименее значимые биты.. Да и если учесть, что компиляторы тоже не всухую работают.. То есть они тоже вставляют куски кода.. А если это сертификат, то высвободить себе места намного проще. Но всеже, лучше мы рассмотрим пример: Например байтовое расположние у нас выглядит так: A:::::::::::::::::::::::::::::::::D контрольная сумма равняется CRC_OK теперь мы изменим некоторые байты: A:::::x:::::::::::::::::::::::::xxx::::x:x:D Но в чем беда - контрольная сумма отличается.. Давайте найдем себе кусочек байтов, которые можно изменить без зазрения совести? Походу, байты лучше всего вставлять посередине. Это мы и продемонстрируем: A:::::x::::::B_12_3_4_C::::::xxx:::x:x:D Это шаблон, ткак сказать. а теперь нам надо просто подсчитать контрольные суммы этих 4-х байтов и подобрать те, что нам подходят. И в конце посчитать контрольную сумму данного блока. Так.. а теперь посмотрим поближе. Выше я разместила ссылку на PEiD и на плагины! Нам нужен плагин FixCRC(еще ссыль на плагины, вот еще на пейд ссыль ). Потом мы запускаем что-либо, жмем стрелочку. и выбираем crc32 в plugins. Затем выходим, и в хекс-редакторе, к примеру, правим файл. hex_редактор можно найти тут (http://www.handshake.de/user/chmaas/...load/xvi32.zip - спасибо Дикс'у с его темой про авик)) Затем опять откурываем файл в PEiD опять смотрим контрольную сумму. Не совпадает, не так ли?Затем плагин САМ пишет нам - 4 bytes written! да, и мы можем заметить, что в конец действительно было дописано 4 корректирующих байта. Потом мы может вставлять эти волшебные 4 байта в файл, предварительно отступив 4 байта назад в хекс-редакторе. таким образом, можно корректировать не только целые файлы, но и отдельные куски кода! Чтож, мы подделали crc32 - что дальше? Никто не стоит на месте.. Завтра кто-то сможет подделать MD5, потом кто-то придумает MD6.. Посмотрим.. |
Причём тут протрояненыый форум и контрольная сумма? Имхо контрольная сумма относится к файлу (одному!). Ну если ты имелла ввиду скрипт один (например на php) тогда да...
И вообще твоя статья очень смахивает на Криса Касперски (я уже читал) а вот кстате она: http://www.xakep.ru//magazine/xa/090/122/4.asp ЗЫ MD5 и MD6 подделать нельзя, но коллизии попытаться найти можно MD5(pass1)=MD5(pass2) |
-=lebed=-, честно говоря, я ее впервые вижу. Ту статью..
ПС: а то, что на форумах тоже система защиты же.. И смотрит контрольную сумму.. Хотя мне тут кое-кто сказал, что легче просто убрать проверку) |
Shnurovka, а что значит этот фрагмент кода?
Цитата:
|
Thanat0z, я, к сожалению, не кодер.. но исходники выложила для наглядности..
|
|
-=lebed=- это пример, если ты не понял! И во всем инете он аналогичен по сути!
|
Цитата:
ЗЫ Если честно я вообще не понимаю как можно писать что-то, в чём сама плохо разбираешься, значит не твоё, что печально... Скажи мне пожалуйста как вычислить контрольную сумму форума? |
жесть
|
-=lebed=-, мля. если честно то ты по сути только наезжаешь.. Это я вижу! а вот реально больше не вижу ничего! Я конечно слегка офигела от того, что статья в чем-то похожа.. потому что я перерывала весь инет неделю - по теме материала мало. Нашла практический пример, тут что-то есть там что-то етсь. То есть статья можно сказать практическая.. А то, что я ошиблась где-то. Не робот в конце концов.. и не все знаю.. к сожалению.. и мне надоело тут уже отписываться.. если честно! так что - если вдруг что.. ставь минусы - мне не жаль.. ЭТУ статью(что ты покзал) вижу впервые. Все что хотела - сказала! Все.
|
| Время: 05:05 |