· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.A&O —› CRC

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Июн 18, 2004 22:57:21

bogrus
Да, именно этим и придется заниматься.

Funbit
Разве можно посчитать crc кусками, а потом посчитать общую crc? там же зависимоть в одну сторону...


Дата: Июн 18, 2004 23:09:37

dShell

Я привёл аналогию изменения поля CheckSum в PE заголовке .
Потом оно пересчитываеться за миллисекунду , поищи как это делает например PE Explorer , PE Tools ...


Дата: Июн 19, 2004 01:09:55 · Поправил: Funbit

dShell
CRC32 штука последовательная,

допустим нужно посчитать CRC32 от строки "AAAABBBBCCCC",
что мы будем иметь в цикле расчета стоя на позиции первой буквы C ? мы будем иметь промежуточный DWORD, который зависит от символов, предшествующих букве С. все, больше ни от чего этот DWORD не зависит. таким образом заменив мэджик константу (-1 обычно) в начале CRC32, мы можем сунуть в ф-цию расчета CRC32 массив "CCCC", а получим CRC32 такой, как-будто мы подсчитали его от всей строки "AAAABBBBCCCC"...

запутанно, но если пару раз прочитать, понять можно :)


Дата: Июн 19, 2004 02:02:26

И вообще, если это делать для защиты от модификации, то для КОНКРЕТНОГО кода очень маловероятно что найдется такое CRC.
Выход, на мой взгляд, только один: изменять частичку bytes_1 или bytes_2 -- т.е. создать что то вроде вспомогательного "балласта".
А тогда что мешает взломщику изменить этот "балласт"?
Или вопрос чисто теоретический и до практики дело не дойдет?)

Пытался выразить свою мыслю как мог ;)

Кстати, чему равна средняя вероятность того, что для конкретного кода найдется такое n-битное CRC?
2-n
???


Дата: Июн 19, 2004 02:10:57 · Поправил: B_108

Ошибся,
мы берем одно начальное значение CRC, считаем CRC2=crc(bytes_1 + CRC + bytes_2)

Вероятность того, что CRC=CRC2 2-n

Но у нас 2n попыток...

Или меня не туда прет ;)
Спать пора.


Дата: Июн 19, 2004 02:26:54

Какая-то фантастика

но получается вероятность НЕУДАЧИ

(1-2^(-n))^(2^n)


Дата: Июн 19, 2004 02:44:58

Во всяком случае функция

f(n)=(1 - 2-n)2^n

при увеличении n также возрастает.

Это обнадеживает.

ЗЫ Похоже я сам себе пишу и сам себе же отвечаю...


Дата: Июн 21, 2004 21:31:22 · Поправил: dShell

B_108
Извиняюсь, что не приходил - сессия штука убийственная :-) но 4 по алгебре того стоит :))
Насчет балласта - вроде, как я помню, у ехе в башке есть пару байт под crc - собствевенная нужды доси. Но реально их никто не юзает. Появилась идея таким вот образом получить боле менее факт измененния проги. а балласт можно еидать уже после всех секций.
Балласт - некоторое число байт, которое никто не запрещает увеличивать в разумных пределах. Четкой математика написать пока не могу. Но сверх упрощенная модель подбора (когда crc не в башке а вонце файла):

[начальный файл][i байт][2^32 - crc]
Считаем CRC' == crc("[начальный файл]"), чтобы ускорить процес.
В самом начале пытаемся обойтись без балласта (i == 0).
Если не нашли crc, считаем CRC'' == crc(перебираем 256 вариантов с одним i-байтом.
...
не факт что остановимся :-( но по принципу Дирихле, нам должна достаться хотя бы одна клетка.


Дата: Июн 22, 2004 00:47:03

dShell
не факт что остановимся :-( но по принципу Дирихле, нам должна достаться хотя бы одна клетка
пошел учить :)
я матику еще не сдавал :)

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.084