![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]На алголисте есть алгоритм