Главная страница
    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.49 MB
Время: 0.042 c
1-1119614355
bns
2005-06-24 15:59
2005.07.18
TFileStream buffer


10-1096259081
saysu
2004-09-27 08:24
2005.07.18
Какая технология лучше для построения многозвенки


9-1112803576
Sis3
2005-04-06 20:06
2005.07.18
Как распечатать картинку созданную в OpenGl


14-1119355093
Cerberus
2005-06-21 15:58
2005.07.18
Критерии оценки.


3-1117704486
Kerim_
2005-06-02 13:28
2005.07.18
ADO - удаление записей из связанных таблиц





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский