Форум: "Потрепаться";
Текущий архив: 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