Шифрования 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;


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