Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Вниз

Подсчёт контрольной суммы.   Найти похожие ветки 

 
boalse ©   (2005-06-22 10:16) [0]

Задача. Имеется exe, который при запуске должен считать свою контрольную сумму и сравнивать её с уже прошитой в нём цифрой. Если эти значения не совпадают, программа прекращает работу. Вопрос. Как можно подсчитать эту контрольную сумму. Просто считать размер файла в байтах? Есть ли какие нибудь другие способы? Хотелось бы с реализацией, потому как не представляю как подсчитывать что-то в exe. Понимаю, что это не даст полноценной защиты, однако хочется доставить побольше гемороя хакерам, заодно и сразу отсечь хакеров-ламеров.


 
TUser ©   (2005-06-22 10:38) [1]

Нет, не размер файла. Тут главная трудность будет в том, что при расчете контрольной суммы само ее значение (записанное в exe) будет влиять на результат. Когда-то это здесь обсуждали, и если не ошибаюсь, сошлись на том, что надо считать контрольную сумму не всего exe, а конкретного критического учатска кода, который может быть потенциально переделан хакером.


 
boalse ©   (2005-06-22 10:41) [2]

Ну тогда как подсчитать контрольную сумму критического участка? Можно простенький пример?


 
Рамиль ©   (2005-06-22 10:46) [3]

Можно XOR ом байты сложить.


 
Игорь Лан   (2005-06-22 10:46) [4]

Используй какой-нибудь упаковщик. У большинства упаковщиков есть такая опция.


 
boalse ©   (2005-06-22 10:56) [5]


> Можно XOR ом байты сложить.


Хе-хе, а как эти байты складывать? Как их выколупывать из ехе-шника?


> Используй какой-нибудь упаковщик. У большинства упаковщиков
> есть такая опция.


AsPack пойдёт?


 
TUser ©   (2005-06-22 10:57) [6]

Теорию можно посмотреть тут
http://embedded.ifmo.ru/embedded_old/ETC/REFERAT/crc/crc.htm

Пример (из головы)

const ValidSum: word = 125; // тут храним правильное значение

...

procedure Critical;
begin
 ...
end;

procedure EndProc;
begin
 // Пустая процедура сразу после Critical
end;

function CRC: word;
var w: ^word;
begin
 w:=@Critical;
 result:=w^;
 while w <> @EndProc do begin
   w:=pointer(integer(w)+4);
   if (integer(@EndProc)-integer(w)) < 4 then
     w:=pointer(integer(w)-(4-(integer(@EndProc)-integer(w))));
   result:=result xor w^;
   end;
end;

function Check;
begin
 if CRC <> ValidSum then
   Application.Terminate;
end;

Учти, что функция Check является узким местом всего этого произведения, т.к. компилятор преобразует ее в нечто такое
call @CRC;
cmp ax, [ValidSum]
jz куда-то,
а хавкер будет менять это самое jz. Фактически, это для него просто еще один лишний геморрой.


 
boalse ©   (2005-06-22 11:03) [7]

TUser, спасибо, буду учить матчасть!


> Фактически, это для него просто еще один лишний геморрой.


Для меня тоже. Только пусть он сначала найдёт эту cmp!


 
Игорь Лан   (2005-06-22 11:04) [8]

>>AsPack пойдёт?

Не знаю есть ли у него такая опция, смотри в хельпе. Я юзал petite.exe, нормально работает, только жмет медленно.


 
TUser ©   (2005-06-22 11:07) [9]

Найти-то он ее найдет.


 
TUser ©   (2005-06-22 11:08) [10]

По поводу упаковшиков - это стандартный способ, а против станлартных способов защиты есть стандартные способы взлома.


 
boalse ©   (2005-06-23 05:48) [11]


> TUser ©   (22.06.05 10:57) [6]


Пример  не работает. Вечный цикл получается. А что делает функция Integer? В справке написанно, что это тип, а про функцию - ничего.


 
AlexKniga ©   (2005-06-23 10:10) [12]

boalse ©   (23.06.05 05:48) [11]
Учи матчасть! С такими знаниями CRC двух слов не сосчитаешь.


 
AlexKniga ©   (2005-06-23 10:10) [13]

Почитай про приведение типов.


 
uny ©   (2005-06-23 20:03) [14]

md5 лучше! длиннее:)
рабочий исходник с примером, всё вместе 16 кб
http://www.fichtner.net/delphi/md5.delphi.phtml


 
SammIk ©   (2005-06-23 22:13) [15]

Нда, тяжолый случай).
Если контролировать критический участок, то его(критический участок)
Искать становится легче).
Лучше ничего не считать, а скажем использовать баиты(ворды\дворды)
Этокго критического участка, как(ну... скажем) константы при
каких либо вычислениях.
Тоды, если прога сломана(поменян баит или 2), то она(прога) считать результыт будет не правильно.
Вот это есть гемор)
-------
Или, если уж сильно хочется считать хеш, то можно его считануть, и
опять же заюзать результат в критических вычислениях.
Упаковщики, если прога деиствительно кому-то нужна, сымаются быстро.


 
Fredy314 ©   (2005-06-24 00:08) [16]


> Или, если уж сильно хочется считать хеш, то можно его считануть,
> и
> опять же заюзать результат в критических вычислениях.
> Упаковщики, если прога деиствительно кому-то нужна, сымаются
> быстро.


Интересная идея.

call @CRC;
cmp ax, [ValidSum]
jz куда-то,
а хавкер будет менять это самое jz. Фактически, это для него просто еще один лишний геморрой.

а если  в @CRC;
будет и  jz куда-то, учитываться
в смысле две взаимосвязаных системы
проверяют другдруга и при ошибках делают чёнибудь кривое?



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.039 c
1-1119938713
drakena
2005-06-28 10:05
2005.07.18
Обработка KeyDown


9-1112811575
HPR
2005-04-06 22:19
2005.07.18
DelphiX и краевой альфаблендинг


8-1111501721
neiromantik
2005-03-22 17:28
2005.07.18
Stream Read Error


5-1091092638
Mellon
2004-07-29 13:17
2005.07.18
cm_mousewheel


4-1117085498
Logo
2005-05-26 09:31
2005.07.18
нажатие клавиш в DOS приложении





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский