Фундаментальные основы хакерства

       

Как обнаружить отладку средствами Windows


В своей книге "Секреты системного программирования в Windows 95" Мэт Питтрек описал структуру информационного блока цепочки (Thread Information Block), рассказав о назначении многих недокументированных полей. Особый интерес для данной статьи представляет двойное слово, лежащие по смещению 0x20 от начала структуры TIB, содержащие контекст отладчика (если данный процесс отлаживается) или ноль в противном случае. Информационный блок цепочки доступен через селектор, загруженный в регистр FS, и без проблем может читаться прикладным кодом.

Если двойное слово FS:[0x20] не равно нулю – процесс находится под отладкой. Это настолько заманчиво, что некоторые программисты включили такую проверку в свои защиты, не обратив внимания на ее "недокументированность". В результате, их программы не смогли исполняться под Windows NT, поскольку, она хранит в этом поле не контекст отладчика, а идентификатор процесса, который никогда не бывает равным нулю, отчего защита ошибочно полагает, что находится под отладкой.

Это обстоятельство было подробно описано самим же Мэтом Питтреком в майском номере журнала "Microsoft Systems Journal" за 1996 год, где в статье "Under The Hood" он привел следующую структуру:

union             // 1Ch (NT/Win95 differences)

{

struct      // Win95 fields

{

WORD  TIBFlags;         // 1Ch

WORD  Win16MutexCount;  // 1Eh

DWORD DebugContext;     // 20h

DWORD pCurrentPriority; // 24h

DWORD pvQueue;          // 28h Message Queue selector

} WIN95;

struct      // WinNT fields

{

DWORD unknown1;         // 1Ch

DWORD processID;        // 20h

DWORD threadID;         // 24h

DWORD unknown2;         // 28h

} WINNT;

} TIB_UNION2;

Листинг 226

Этот случай в очередной раз подтвердил – не стоит без особой необходимости использовать недокументированные особенности, – как правило, они приносят больше проблем, чем пользы.



Содержание раздела