Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CRC


ИванИванычч ©   (2005-01-31 14:52:00) 

Такой вопрос: как можно подсчитать crc процедуры!! и в момент выполнения программы проверить этот самый crc?


Defunct   (2005-01-31 19:47:00) [1]

ИванИванычч   (31.01.05 14:52)  

16-ти разрядный CRC расчитывается циклически по полиному:
х16+х12+х5+1

1. Расчитайте CRC кода и выведите его на экран.
2. Запомните его в программе как константу.
3. Расчитывайте CRC в процессе работы программы и сравнивайте с сохраненной константой.

сделайте цикл:
SaveCRC/CalculatedCRC : Word

{$R-}
for i := 1 to SavedCRC - CalculatedCRC do
 asm
   Push Eax
 end;

подвесит программу намертво при несовпадении CRC.


GuAV   (2005-01-31 19:13:00) [2]

Digitman ©   (31.01.05 15:30) [12]
при позизионно-зависимом коде процедуры ты наверняка не получишь совпадения


Если программа - ехе файл со стандартным ImageBase то совпадение наверняка получится, т.к. код ехе не перемещается, более того у многих ехе отсутсвует секция .reloc что не сказывается на их работоспособность.


default   (2005-01-31 18:01:00) [3]

k@rt ©   (31.01.05 17:51) [13]
хеш-функция


k@rt   (2005-01-31 17:51:00) [4]

А что такое CRC? =)


Digitman   (2005-01-31 15:30:00) [5]


> ИванИванычч   (31.01.05 15:27) [11]


только не вздумай сравнивать полученную в ран-тайм CRC c той что была расчитана для соответствующего процедуре фрагмента исп.файла

при позизионно-зависимом коде процедуры ты наверняка не получишь совпадения


ИванИванычч   (2005-01-31 15:27:00) [6]

> jack128 ©  (31.01.05 15:25) [10]
Огромнейшее спасибо за помощь


jack128   (2005-01-31 15:25:00) [7]

function SameFunc: Integer;
begin
...
end;

procedure Dummy;
begin
end;

...
 SameFuncSize := Integer(@Dummy) - Integer(@SameProc);
Теперь у тя есть указатель на область памяти (@SameFunc) и её размер(SameFuncSize) алгоритм расчета СRС уже говрили где искать..


BiN   (2005-01-31 15:18:00) [8]

ИванИванычч   (31.01.05 15:07) [4]

Точка входа- определить не проблема


Конечно не проблема, а вот ты попробуй точку, а точнее, точки  выхода определить... Дизассемблер свой еще не пробовал писать?


Digitman   (2005-01-31 15:17:00) [9]


> ИванИванычч   (31.01.05 15:16) [7]


нет ну а резон-то какой ?
ну, предположим, подсчитал ты CRC - дальше-то что с полученным значением делать намерен ?


ИванИванычч   (2005-01-31 15:16:00) [10]

> супер-пупер защиту от взлома пишешь ?
Да нет, нужно для однйо программы сделать такую вещь :)


TUser   (2005-01-31 15:13:00) [11]

Точка входа есть @ИмяПроцедуры


Digitman   (2005-01-31 15:11:00) [12]


> ИванИванычч


супер-пупер защиту от взлома пишешь ?


ИванИванычч   (2005-01-31 15:07:00) [13]

Точка входа- определить не проблема


ИванИванычч   (2005-01-31 15:05:00) [14]

Там сейчас поискал, ничего толком не нашел.
Модет сможете подсказать как можно вычислить CRC конкретной процедуры, а не всего ЕХЕшника? Да + каким образом проверять CRC во время работы самой программы


Poirot   (2005-01-31 15:03:00) [15]

а на rsdn есть статьи как считать CRC дял проги, но вот для процедуры - это сложнее.. нать узнать точку входа в процедуру для начала:)


TUser   (2005-01-31 14:55:00) [16]

На алголисте есть алгоритм


Наверх

Титульная страница Поиск, карта сайта Написать письмо