// вы читаете...

Новости

Обход SoftIce’а



CD ib INT imm8 Interrupt vector number specified by immediate byte.)
Т.е. когда вызывается отслеживаемая функция, срабытвает прерывание и управление получает SoftIce. Что ж, давай проверим это утверждение. Для этого поставим бряк на MessageBox (bpx MessageBox) в нашем процессе и напишем следующий код:

function IsThereDebuggingProc(libname, procname:string; Range:integer):integer;
var ProcAddr:Pointer;
mh,i:integer;
begin
result:=0;
mh:=LoadLibrary(Pchar(libname));
if mh = 0 then exit;
ProcAddr:=GetProcAddress(mh, Pchar(procname));
if ProcAddr = nil then exit;
for i:=0 to Range do
if byte(Pointer((integer(ProcAddr)+i))^) = $0CC then
inc(result);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if IsThereDebuggingProc(‘user32.dll’, ‘MessageBoxA’,10)<>0 then
Caption:=’Debugging proc present’
else
Caption:=’There»s not debugging proc’;
end;

Теперь почти то же, но на ассемблере:
IsThereDebuggingProc proc libname:PCHAR, procname:PCHAR, Range: WORD
push libname
call LoadLibraryA
cmp eax, 0
je exit
push procname
push eax
call GetProcAddress
cmp eax, 0
je exit
mov cx, Range
continue:
cmp [eax], 0CCh
je UnderWatch
inc eax
loop continue
exit:
ret
UnderWatch:
mov eax, TRUE
ret
IsThereDebuggingProc endp

И на С:
BOOL IsThereDebuggingProc(char* libname, char* procname, int Range)
{
HINSTANCE mod = LoadLibraryA(libname);
if (mod==NULL) return 0;
PROC proca = GetProcAddress(mod, procname);
if(proca==NULL) return 0;
int i;
for (i=0; i<=Range; i++) if ((BYTE)(*(BYTE*)((int)proca+i))==0xCC) return TRUE;
return 0;
}
Далее я буду приводить код только на Дельфе, ибо главное метод, а не реализация :)
Функции IsThereDebuggingProc передаются имя библиотеки (libname), в которой расположена проверяемая функция, имя самой функции (procname) и количество байт, которые проверяем на наличие 0CCh (т.е. дебаггера), ведь бряк можно поставить и не на первую инструкцию! (например bpx MessageBoxA+8) Главное чтобы опкод 0CCh совпадал с началом инструкции, иначе мы просто изменим какую-нибудь часть инструкции и отслеживаемая программа просто упадёт.

Страницы: 1 2 3 4 5 6 7

Обсуждене

Отзывов нет на «Обход SoftIce’а»

Ваш отзыв

Рубрики