Защита от SoftIce

Несколько добавок к стандартному дизайну
Delphi. Защита от SoftIce:

SoftIce – один из самых лучших отладчиков на планете. Этим дебаггером очень часто пользуются как начинающими так и опытными кракерами. От последних вряд ли какая защита поможет, а вот от начинающих мы в силе защититься. Обидно, когда ты написал какую-нибудь утилиту, а деньги на пиво не получил.

В этой статье я приведу код, который будет блокировать SoftIce95.

Во-первых проверь, прописан ли у тебя в разделе uses модуль windows. Прописан? Нет, так прописывай и поехали дальше…

Напишем функцию когда SoftIce загружен и выхода из системы. Затем, в конче кода, в разделе initialization совместим их.

Привожу код с комментариями:


interface

implementation

uses windows;

function isSoftIce95Loaded: boolean; // функция загрузки SoftIce
 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;

function winexit(flags:integer):boolean; // функция выхода из системы

// эта функция поможет 
//нам определить выходить ли из системы или продолжать работу программы
function Setprivilege (privilegename:string; enable:boolean):boolean; 
var
tpPrev, tp:TTokenPrivileges;
token: Thandle;
dwRetLen: Dword;
begin
result:= false;
openprocesstoken (GetCurrentProcess, token_adjust_privileges or token_query,token);
tp.privilegecount:=1;
if lookupprivilegeValue(nil, pchar(privilegename),tp.Privileges[0].luid) then begin
if enable then tp.privileges[0].attributes:=se_privilege_enabled
else tp.privileges[0].attributes:=0;
dwRetLen:=0;
result:=AdjustTokenPrivileges(token,false, tp, sizeof(tpprev),tpprev, dwretlen);
end;
closeHandle(token);
end;

begin 
if SetPrivilege ('SeShutdownPrivilege', true) then begin // если true то выходим из системы 
exitwindowsex(flags,0);
SetPrivilege('SeShutdownPrivilege', false); // иначе работаем дальше
end;
end;

initialization // начинаем сравнивать
if isSoftIce95Loaded then begin // если SoftIce95 загружен то
winexit (ewx_shutdown or ewx_force); // выходим из системы
halt;
end;

Ну вот и все, идем пить пиво :)

Я привел код для 95-ого SoftIce, но не забывай есть еще NT-ный

А от NT-ого тебе придется догадаться самому. Сразу говорю, поменять надо всего пару букв.

Если есть вопросы, задавай! Адрес тот же: crazy_script@mail.ru



Опубликовал admin
21 Май, Среда 2003г.
Основные исследователи внетелесного феномена


Программирование для чайников.