Шифрования exe внешней утилитой между метками.

Здравствуйте, помогите пожалуйста сделать код для шифрования между метками внешней утилитой, пытаюсь сделать защиту как описано в данной статье http://www.delphikingdom.com/asp/vie...?catalogid=846 , написал саму процедуру, function CheckFileLabel, внешняя утилита находит метку в программе, я вот не могу понять как сделать шифрования между этими метками внешней утилитой, помогите чайнику
9 ответов

В статье все описано и даны 2 великолепных примера, а под конец даже проверка CRC. Что не ясно?


Втыкать в программу защиту, основанную на статье(тем более 2003 года)? Смело.


а в делфи 7й какого года? и что там очень много изменений? в основах программирования и алгоритмизации что-то поменялось? стандарты ИСО когда были приняты? так что вопрос не к месту


IvaniuS, он это к тому, что описанную в статье, защиту очень легко обойти.


IvaniuS, Человек_Борща прав, хотя я мысль не совсем точно передал(подредактировал). Ну, а если стандарты любите, криптографию и все новое - нынче модно с эллиптическими кривыми заморачиваться.


модно с эллиптическими кривыми заморачиваться
Каким боком это чудо к защите ПО?


была бы фантазия, можно хоть прерывания от кофеварки использовать для выбора вектора инициализации, который потом для дешифровки секции(части) кода присобачить.


Вот что и куда нужно добавить в эту процедуру:
function CheckFileLabel(FileName: string; strlabel: string; var point: LongInt): boolean;
var
 F: file;
 currarray: array [1..8] of byte;
 lookarray: array [1..8] of byte;
 i: integer;
begin
 Result := false;
 point := -1;
 //Load labels
 for i := 1 to 8 do
 begin
 lookarray[i] := HexToByte(strlabel[pos('H',UpperCase(strlabel)) - 2] + 
 strlabel[pos('H',UpperCase(strlabel)) - 1]);
 currarray[i] := 0;
 Delete(strlabel,1,pos('H',UpperCase(strlabel)));
 end;
 //Look for label
 AssignFile(F,FileName);
 FileMode := fmOpenRead;
 Reset(F,1);
 Seek(F,0);
 while not EOF(F) do
 begin
 for i := 1 to 7 do
 currarray[i] := currarray[i + 1];
 BlockRead(F,currarray[8],1);
 Result := true;
 for i := 1 to 8 do
 Result := Result and (currarray[i] = lookarray[i]);
 if Result then
 begin
 //point points to the last byte of label
 point := FilePos(F) - 1;
 break;
 end;
 end;
 CloseFile(F);
end;
Чтобы она шифровала вот таким методом:
var
 ptrAddr: Pointer; {Адрес процедуры CheckTrial}
 aByte: Byte; {Байт процедуры}
 dwOldProtect: DWORD;
begin
 ptrAddr := @CheckTrial;
 VirtualProtect(@CheckTrial, 4096, PAGE_READWRITE, @dwOldProtect);
 while ptrAddr <> @EndCheckTrial do
 begin
 Byte(ptrAddr^) := Byte(ptrAddr^) xor $25;
 aByte := Byte(ptrAddr^);
 Memo1.Lines.Add('0' + IntToHex(aByte, 2) + 'h');
 inc(Integer(ptrAddr));
 end;
end;


А вы статейку то дочитайте. И Все сразу будет понятно.