Итак в этой статье пойдет речь об противодействии SoftIce...
Метод первый
~~~~~~~~~~~~
Этот метод я нашел на www.winfiles.com он очень простой...
Пробует открыть SoftIce имя драйвера (SICE, SIWVID for Win9x, NTICE for WinNT)
с помощью api функций CreateFileA.
example:
push offset Win95 ; \\.\SICE
call CreateFileA
cmp eax,-001
je nosi
Пример на C:
BOOL IsSoftIce95Loaded()
{
HANDLE hFile;
hFile = CreateFile( "\\\\.\\SICE", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if( hFile != INVALID_HANDLE_VALUE )
{
CloseHandle(hFile);
return TRUE;
}
return FALSE;
}
Метод второй
~~~~~~~~~~~~
Итак второй метод, этот метод можно использовать в ring0 и ring3 или других
преложений VxDCall.
example:
mov eax, Device_ID ; 202h for SICE or 7a5Fh for SIWVID VxD ID
mov edi, Device_Name ; only used if no VxD ID (useless in our case ;-)
VMMCall Get_DDB
mov [DDB], ecx ; ecx=DDB or 0 if the VxD is not installed
Метод третий
~~~~~~~~~~~~
Третий метод, этот программа ищет магическое число 0F386h возвращает
(in ax) все system debugger.
Вызывает int 41h, функцию 4Fh.
example:
mov ax,4fh
int 41h
cmp ax, 0F386
jz SoftICE_detected
Метод четвертый
~~~~~~~~~~~~~~~
Четвертый метод, этот код ищет, ID SoftICE VxD через int 2Fh/1684h.
Ниже описаны два примера.
example:
xor di,di
mov es,di
mov ax, 1684h
mov bx, 7a5Fh ; VxD ID of SIWVID
int 2fh
mov ax, es ; ES:DI -> VxD API entry point
add ax, di
test ax,ax
jnz SoftICE_Detected
example2:
Это очень похожий на выше указанный пример.
xor di,di
mov es,di
mov ax, 1684h
mov bx, 0202h ; VxD ID of winice
int 2Fh
mov ax, es ; ES:DI -> VxD API entry point
add ax, di
test ax,ax
jnz SoftICE_Detected
Метод пятый
~~~~~~~~~~~
Этот метод ищет сигнатуру BoundsChecker в SoftICE.
mov ebp, 04243484Bh ; 'BCHK'
mov ax, 04h
int 3
cmp al,4
jnz SoftICE_Detected
[ULTRAS] 2000
|