Сейчас на форуме: asfa, bartolomeo, hgdagon (+6 невидимых)

 eXeL@B —› Программирование —› CRC
Посл.ответ Сообщение


Ранг: 138.1 (ветеран)
Активность: 0.090
Статус: Участник
Одепт ЭкзэЛаба

Создано: 10 мая 2006 23:36
· Личное сообщение · #1

Вопрос мой таков,как проверить CRC отдельного участка кода?Допустим есть такой код:


-/-/-/-/
popad
jmp oep
-/-/-/-/-

Как проверить его на целостность?



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 10 мая 2006 23:39
· Личное сообщение · #2

g-l-u-k
Простейший метод - посчитай сумму всех байтов. Хочешь надёжнее, подвигай эти байты туда-сюда перед сложением.



Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 10 мая 2006 23:39
· Личное сообщение · #3

Протектор пишешь?




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 10 мая 2006 23:42
· Личное сообщение · #4

Проерить код на целостность можно дохрена какими способами, тем же упомянутым CRC32, MD5, наконец самопальным алго.



Ранг: 253.9 (наставник)
Активность: 0.130
Статус: Участник

Создано: 11 мая 2006 00:15
· Личное сообщение · #5

rmn пишет:
Протектор пишешь?

имхо, если аффтар пишет прот и задает такой вопрос - здесь явно что-то не то...

-----
MicroSoft? Is it some kind of a toilet paper?





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 11 мая 2006 02:12
· Личное сообщение · #6

Tim пишет:
имхо, если аффтар пишет прот и задает такой вопрос - здесь явно что-то не то...


Да ладно - от Солода, в своё время, такие вопросы в фидо приходили...



Ранг: 133.0 (ветеран)
Активность: 0.060
Статус: Участник

Создано: 11 мая 2006 06:18
· Личное сообщение · #7

Есть у nice крекми на эту тему....

А CRC проверить... возьми готовые алгоритмы, это будет самое простое. Есть кажется в книгах Пирогова примеры. Да и в гугле полно примеров реализации.




Ранг: 264.0 (наставник), 5thx
Активность: 0.210
Статус: Участник
Vanilla Sky

Создано: 11 мая 2006 09:40
· Личное сообщение · #8

кхе-кхе, я, конечно, дико извиняюсь, но быть может найдёшь что-то стоящее в туторе про СРС в 10-м паке T-53 Tutorials, соответствующая тема есть на форуме.



Ранг: 145.8 (ветеран)
Активность: 0.070
Статус: Участник
www.int3.net

Создано: 11 мая 2006 11:20 · Поправил: NG
· Личное сообщение · #9

g-l-u-k пишет:
Вопрос мой таков,как проверить CRC отдельного участка кода?

вот так:
if(CRC32(lpData, nSize) == originalCRC32) {
cout << "ok" << endl;
} else {
cout << "preved!!!" << endl;
}




Ранг: 44.7 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 11 мая 2006 11:30
· Личное сообщение · #10

NG пишет:
вот так:
if(CRC32(lpData, nSize) == originalCRC32) {
cout << "ok" << endl;
} else {
cout << "preved!!!" << endl;
}


тут вместо CRC32 можешь вставить свою функцию некализионного хеширования (типа биективного отображения последовательности байтов в число)



Ранг: 43.0 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 11 мая 2006 12:03
· Личное сообщение · #11

Keo пишет:
типа биективного отображения

а что это означает?



Ранг: 145.8 (ветеран)
Активность: 0.070
Статус: Участник
www.int3.net

Создано: 11 мая 2006 13:04
· Личное сообщение · #12

nikitosk пишет:
а что это означает?

это означает, что функция одновременно инъективна и сюръективна.

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



Ранг: 186.8 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 11 мая 2006 16:43 · Поправил: MoonShiner
· Личное сообщение · #13

NG, не умничай Отображение последовательности байтов в число влегкую может быть биекцией типа xy ab cd... -> 01 xy ab cd... (например, FF 15 -> 01 FF 15) Тока вот нахера - это я не понял=) ЦРЦ, как справедливо считает ЫНГЕ, в идеале должна являться сюрьекцией. Ну и с коллизиями замут. Ваще - учить матчасть по методам подсчета контрольных сумм



Ранг: 42.4 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 11 мая 2006 17:18
· Личное сообщение · #14

Мне объясняли, что CRC считается любой хеш-функцией. А если уж совсем не заморачиваться - то просто XOR всех байтов.




Ранг: 138.1 (ветеран)
Активность: 0.090
Статус: Участник
Одепт ЭкзэЛаба

Создано: 11 мая 2006 19:49
· Личное сообщение · #15

Спасибо,буду разбираться



Ранг: 145.8 (ветеран)
Активность: 0.070
Статус: Участник
www.int3.net

Создано: 11 мая 2006 20:15
· Личное сообщение · #16

killsniper пишет:
Мне объясняли, что CRC считается любой хеш-функцией.

любая циклическая =)
советую классику почитать, да.




Ранг: 138.1 (ветеран)
Активность: 0.090
Статус: Участник
Одепт ЭкзэЛаба

Создано: 11 мая 2006 22:33
· Личное сообщение · #17

Поиск по форуму рулит,нашёл то что нужно:

CRC32 proc lenWORD, dataWORD
push esi
push ecx
push edx

mov esi, data
mov ecx, len
xor edx, edx
xor eax,eax
dec eax


CRC32calc:
mov dl, byte ptr [esi]
xor dl, al
shr eax, 8
xor eax, dword ptr [hashtab + 4*edx]
inc esi
dec ecx
jnz CRC32calc

not eax

pop edx
pop ecx
pop esi
ret

CRC32 endp


inittable proc ; динамическое заполнение таблицы
push ebx
lea edx,hashtab ; указатель на выдел. память
xor ebx,ebx
initl:
xor eax,eax
mov al,bl
xor cx,cx
entryloop:
test eax,1
jz nobit
shr eax,1
xor eax,0EDB88320h
jmp entrygon
nobit:
shr eax,1
entrygon:
inc cx
test cx,8
jz entryloop
mov dword ptr [ebx*4+edx],eax
inc bx
test bx,256
jz initl


pop ebx

ret

inittable endp


 eXeL@B —› Программирование —› CRC
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати