Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

АнтиКрэк или как защитить свою Дельфи программу

Обсудить статью на форуме

Хорошая подборка видеоуроков, инструментов крэкера, книг и статей - здесь.

Автор: FEUERRADER <feuerrader@nm.ru>

Я видел много статей, которые рассказывают о защите дельфи программ от таких горе-крэкеров, как, например, я, но они не были достаточно конкретны. В этой статье я попытаю дать всем желающим реальный код для защиты Ваших программных продуктов. Здесь собраны советы со всего РуНета!

Защита от 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.

В недалеком будущем наваяю еще подобную статейку, только о регистрациионной защите ваших программ, что более актульней, чем защита от отладчиков.



Все права защищены ©  2003 


Комментарий Bad_guy'я: шифрование строк в исходниках Дельфи действительно очень полезно, именно это позволяет избавиться от большого количества начинающих крэкеров, пытающихся добраться до процедуры проверки кода путем поиска ключевых строк "Зарегистрировано" и подобных, а вот определение активности именно отладчика SoftICE здесь упомянуто не очень удачно, ведь зачастую сейчас многие крэкеры переходят на альтернативные отладчики и все коды по определению SoftICE оказываются бесполезными - решением может быть определение именно процесса отладки, а не конкретного отладчика, хотя таких алгоритомв и мало, но они будут более полезны. К тому же, на мой взгляд, не желательно выдавать окно об обнаружении отладчика - лучше запустить таймер по которому секунд через 5 произойдет выход из программы, а окно лучше не выводить вообще, когда крэкер не видит с чем ему бороться - он и не будет ничего делать.


Обсуждение статьи: АнтиКрэк или как защитить свою Дельфи программу >>>


Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS