09.03.2000 AntiSoftIce [ULTRAS]
Итак в этой статье пойдет речь об противодействии 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