Советую прочитать статьи в CRACKL@B:
http://www.cracklab.ru/art/Крутая защита или CRACKL@B CrackMe #1Исследование защит shareware-программТам много полезной информации. Чтобы защищать программы, надо немного самому уметь ломать программы. Или хотя бы знать на что обращать внимание, где слабые места и всё такое.
Вот ещё тебе кусок, для старта:
Код
(* Проверка правильности ввода строки *)
//uses
// SysUtils;
Type
BoolProc = function (s: string): boolean;
PBoolProc = ^BoolProc;
Const
HashSum: longint = 3412; // это, скорее всего, слабое место
var
str: string;
Function Hash (Key: string): Longint;
Var
I,
Sum:Integer;
Begin
Sum := 0;
For I := 1 To Length (Key) Do
Sum := Sum + (Ord (Key[I]) * (1 shl I));
Result := Sum;
End;
function Passed (ss: string): boolean;
begin
Result := (Hash (ss) = HashSum);
end;
procedure TestPsw (f: BoolProc);
var
b: boolean;
begin
b := f (str);
writeln ('Passed test: ', b);
end;
var
pp: pointer;
begin
write ('Enter password: '); readln (str);
pp := @Passed;
// *** Debugging:
// writeln (IntToHex(Longint(@Passed),8));
// writeln (IntToHex(Longint(pp),8));
// здесь надо сбить кракера с толку (самый наивный способ :-)
asm
inc PP //если изменить адрес вызываемой функции проверки, то произойдёт ошибка
dec PP //чтобы ошибка не произошла, здесь я возвращаю указатель обратно
end;
TestPsw (PP);
end.
В ней наверняка есть слабые места, но для начала сойдёт.