Автор: FEUERRADER. Дата публикации: 05.08.2004
Я видел много статей, которые рассказывают о защите дельфи программ от таких горе-крэкеров, как, например, я, но они не были достаточно конкретны. В этой статье я попытаю дать всем желающим реальный код для защиты Ваших программных продуктов. Здесь собраны советы со всего РуНета!
Защита от Restorator, ResHacker, Exescope и др.: достаточно вставить несколько раз к событиям на нажатие кнопок или на событие формы OnCreate, такой код.
В примере, строка str-заксоренная нормальная строка с текстом. Чтобы получать заксоренные строки из нормальных, рекомендую создать простую программу-X0RER: Бросьте на форму 2 memo, 1 edit и кнопку. Для кнопки:
Всё, пишете в memo1 нормальную строку, в Edit1 число, на которое будет производиться XOR. Нажимаем кнопку и в memo2 заксоренный текст. А в программе делаете взамообратную процедуру, указанную выше. Главное, что всякие Рестораторы не распознают в формах нечитабельные символы, не относящиеся к алфавитным и циферным знакам. Поэтому при открытии в Рестораторе формы с заКСОРенными строчками он круто обламается. Попробуйте сами! Что самое удивительное, компилятор нисколько не ругается, что мы вставляем в string несимвольные данные.
Защита от отладчиков: что же сделать, чтобы обнаружить SoftIce, TRW2000. Предлагается использовать обнаружение во внешних криптерах, типа ASProtect, TElock, SVKP, BopCrypt и др. Но если крякер снимает "навесную защиту", то Вы лишаетесь анти-отладочных приемов! Как же этого избежать? Да просто вставить эти приемы в тех местах, например, где используются функциональные ограничения. ПРИЧЕМ, ОЧЕНЬ ВАЖНО, НИКОГДА не вставляйте ССЫЛКУ на процедуру проверки отладчика, а вставляйте целый код проверки снова и снова. Например:
!!!ТАК НЕ НАДО ДЕЛАТЬ!!!
!!!ТАК НАДО НАДО ДЕЛАТЬ!!!
Фишка в том, что крякер замучается патчить прогу. А вот сам код обнаружения SoftICE:
1 Способ.
2 Способ (универсальный). Для этого использутся точная копия функции NmSymIsSoftICELoaded из NMTRANS.DLL, которой пользуется "родной" Symbol Loader (loader32.exe), хотя, при желании, можно пользоватся непосредственно функциями из NMTRANS.DLL (последняя входит в сам SoftICE). Думаю, сообразите, как пользоваться этим кодом, можно как отдельным юнитом.
3 Способ. Ассемблерный код (не советую)
Этот способ следует использовать только в операционных системах Win9x.
В недалеком будущем наваяю еще подобную статейку, только о регистрациионной защите ваших программ, что более актульней, чем защита от отладчиков.
АнтиКрэк или как защитить свою Дельфи программу. Часть 1
Я видел много статей, которые рассказывают о защите дельфи программ от таких горе-крэкеров, как, например, я, но они не были достаточно конкретны. В этой статье я попытаю дать всем желающим реальный код для защиты Ваших программных продуктов. Здесь собраны советы со всего РуНета!
Защита от Restorator, ResHacker, Exescope и др.: достаточно вставить несколько раз к событиям на нажатие кнопок или на событие формы OnCreate, такой код.
var str:string;
i:integer;
str:=’њњ|xњxxxaњфxэxкxщгмxфxйxт’;
for i:=1 to length(str) do
str<i>:=Chr(Ord(str<i>) xor $AABDEE66);
form1.memo1.lines.text:=str;
В примере, строка str-заксоренная нормальная строка с текстом. Чтобы получать заксоренные строки из нормальных, рекомендую создать простую программу-X0RER: Бросьте на форму 2 memo, 1 edit и кнопку. Для кнопки:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
s:string;
begin
S:=memo1.text;
for i:=1 to length(S) do
s<i>:=Chr(Ord(S<i>) xor strtoint(edit1.text));
memo2.Text:=s;
end;
Всё, пишете в memo1 нормальную строку, в Edit1 число, на которое будет производиться XOR. Нажимаем кнопку и в memo2 заксоренный текст. А в программе делаете взамообратную процедуру, указанную выше. Главное, что всякие Рестораторы не распознают в формах нечитабельные символы, не относящиеся к алфавитным и циферным знакам. Поэтому при открытии в Рестораторе формы с заКСОРенными строчками он круто обламается. Попробуйте сами! Что самое удивительное, компилятор нисколько не ругается, что мы вставляем в string несимвольные данные.
Защита от отладчиков: что же сделать, чтобы обнаружить SoftIce, TRW2000. Предлагается использовать обнаружение во внешних криптерах, типа ASProtect, TElock, SVKP, BopCrypt и др. Но если крякер снимает "навесную защиту", то Вы лишаетесь анти-отладочных приемов! Как же этого избежать? Да просто вставить эти приемы в тех местах, например, где используются функциональные ограничения. ПРИЧЕМ, ОЧЕНЬ ВАЖНО, НИКОГДА не вставляйте ССЫЛКУ на процедуру проверки отладчика, а вставляйте целый код проверки снова и снова. Например:
!!!ТАК НЕ НАДО ДЕЛАТЬ!!!
Procedure SoftICEActive:boolean;
begin
...
код проверки
...
End;
procedure TForm1.OnlyForReggedUserButtonClick(Sender: TObject);
begin
if SoftIceActive=true then begin
ShowMessage(’SoftIce Active’);
Halt;
end else begin
...
нормальный код
...
end;
!!!ТАК НАДО НАДО ДЕЛАТЬ!!!
procedure TForm1.OnlyForReggedUserButtonClick(Sender: TObject);
begin
//код проверки активности SoftICE
if SoftIceActive=true then begin
ShowMessage(’SoftIce Active’);
Halt;
end else begin
...
нормальный код
...
end;
Фишка в том, что крякер замучается патчить прогу. А вот сам код обнаружения SoftICE:
1 Способ.
function SoftIce95: boolean;
var hfile: Thandle;
begin
result:=false;
hFile:=CreateFileA(’\\.\SICE’,
GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if(hfile<>INVALID_HANDLE_VALUE) then begin
CloseHandle(hfile);
result:=true;
end;
end;
2 Способ (универсальный). Для этого использутся точная копия функции NmSymIsSoftICELoaded из NMTRANS.DLL, которой пользуется "родной" Symbol Loader (loader32.exe), хотя, при желании, можно пользоватся непосредственно функциями из NMTRANS.DLL (последняя входит в сам SoftICE). Думаю, сообразите, как пользоваться этим кодом, можно как отдельным юнитом.
unit Security;
interface
uses Windows;
const nmtrans = ’NMTRANS.DLL’;
function IsSoftICELoaded: BOOL; stdcall;
function NmSymIsSoftICELoaded: BOOL; stdcall;
{$EXTERNALSYM NmSymIsSoftICELoaded}
function DevIO_ConnectToSoftICE: THANDLE; stdcall;
{$EXTERNALSYM DevIO_ConnectToSoftICE}
implementation
{$IFDEF _USE_NMTRANS_DLL}
function NmSymIsSoftICELoaded; external nmtrans name ’NmSymIsSoftICELoaded’;
function DevIO_ConnectToSoftICE; external nmtrans name ’DevIO_ConnectToSoftICE’;
{$ELSE}
function NmSymIsSoftICELoaded: BOOL;
var hf: THandle;
begin
Result := TRUE;
hf := DevIO_ConnectToSoftICE();
if hf<>INVALID_HANDLE_VALUE
then CloseHandle(hf)
else Result := FALSE;
end;
function DevIO_ConnectToSoftICE: THANDLE;
const
si_9x : PChar = ’\\.\SICE’#0#0;
si_nt : PChar = ’\\.\NTICE’#0#0;
begin
Result := CreateFileA(si_9x, $80000000, $3, nil, $3, $80, $0);
if Result<>INVALID_HANDLE_VALUE then Exit;
Result := CreateFileA(si_nt, $80000000, $3, nil, $3, $80, $0);
if Result<>INVALID_HANDLE_VALUE then Exit;
SetLastError($0A6580001);
end;
{$ENDIF}
function IsSoftICELoaded: BOOL;
begin
Result := NmSymIsSoftICELoaded;
end;
end.
3 Способ. Ассемблерный код (не советую)
00000000 : B4 43 MOV AH, 43h
00000002 : CD 68 INT 68h
00000004 : 66 3D 86 F3 CMP AX,0F386h
00000008 : 75 06 JNE 00000010
0000000A : ; Активен
0000000E : EB 04 JMP 00000012
00000010 : ; Не Активен
Этот способ следует использовать только в операционных системах Win9x.
В недалеком будущем наваяю еще подобную статейку, только о регистрациионной защите ваших программ, что более актульней, чем защита от отладчиков.
Комментарии |
отсутствуют |
Добавление комментария |