CheckRemoteDebuggerPresent

eXeL@B DVD

Материал из Справочник исследователя программ

Перейти к: навигация, поиск

Определяет, находится ли указанный процесс под отладкой

BOOL CheckRemoteDebuggerPresent(
 HANDLE hProcess,
 PBOOL pbDebuggerPresent
);

Содержание

Параметры

hProcess 
[in]  хэндл процесса. 
pbDebuggerPresent 
[in, out] Указатель на переменную, куда устанавливается TRUE, если процесс отлаживается или 
FALSE в  противном случае. 

Возвращаемое значение

Если функция завершается успешно, возвращаемое значение не равно нулю. Если функция завершается с ошибкой, возвращаемое значение равно нулю. Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.

Внутреннее устройство

7C85AAF2 >  8BFF            MOV EDI,EDI                              ; ntdll.7C910228
7C85AAF4    55              PUSH EBP
7C85AAF5    8BEC            MOV EBP,ESP
7C85AAF7    837D 08 00      CMP DWORD PTR SS:[EBP+8],0
7C85AAFB    56              PUSH ESI
7C85AAFC    74 35           JE SHORT 7C85AB33
7C85AAFE    8B75 0C         MOV ESI,DWORD PTR SS:[EBP+C]
7C85AB01    85F6            TEST ESI,ESI
7C85AB03    74 2E           JE SHORT 7C85AB33
7C85AB05    6A 00           PUSH 0
7C85AB07    6A 04           PUSH 4
7C85AB09    8D45 08         LEA EAX,DWORD PTR SS:[EBP+8]
7C85AB0C    50              PUSH EAX
7C85AB0D    6A 07           PUSH 7
7C85AB0F    FF75 08         PUSH DWORD PTR SS:[EBP+8]
7C85AB12    FF15 AC10807C   CALL DWORD PTR DS:[ntdll.ZwQueryInformationProcess]
7C85AB18    85C0            TEST EAX,EAX
7C85AB1A    7D 08           JGE SHORT 7C85AB24
7C85AB1C    50              PUSH EAX
7C85AB1D    E8 F7E8FAFF     CALL 7C809419
7C85AB22    EB 16           JMP SHORT 7C85AB3A
7C85AB24    33C0            XOR EAX,EAX
7C85AB26    3945 08         CMP DWORD PTR SS:[EBP+8],EAX
7C85AB29    0F95C0          SETNE AL
7C85AB2C    8906            MOV DWORD PTR DS:[ESI],EAX
7C85AB2E    33C0            XOR EAX,EAX
7C85AB30    40              INC EAX
7C85AB31    EB 09           JMP SHORT 7C85AB3C
7C85AB33    6A 57           PUSH 57
7C85AB35    E8 24E8FAFF     CALL 7C80935E
7C85AB3A    33C0            XOR EAX,EAX
7C85AB3C    5E              POP ESI
7C85AB3D    5D              POP EBP
7C85AB3E    C2 0800         RETN 8

Требования

Клиент         Требуется Windows Vista или Windows XP SP1.
Сервер         Требуется Windows Server "Longhorn" или Windows Server 2003.
Заголовок      Объявлен Winbase.h; включает Windows.h.
Библиотека     Использует Kernel32.lib.
DLL            Требуется Kernel32.dll.

Примеры

Delphi

procedure TForm1.FormCreate(Sender: TObject);
var
  Debug : LongBool;
begin
  Debug := False;
  if CheckRemoteDebuggerPresent(GetCurrentProcess(), Debug) then
    if Debug then
    begin
      ShowMessage('Debugger Present');
      Application.Terminate;
    end
end;

Обход проверки

004B32BE    833C24 00       CMP DWORD PTR SS:[ESP],0 <--------- должен быть 0
004B32C2    74 16           JE SHORT 004B32DA
004B32C4    B8 E8324B00     MOV EAX,004B32E8    
004B32C9    E8 524EFBFF     CALL 00468120
004B32CE    A1 8CB34B00     MOV EAX,DWORD PTR DS:[4BB38C]
004B32D3    8B00            MOV EAX,DWORD PTR DS:[EAX]
004B32D5    E8 BADEFFFF     CALL 004B1194
004B32DA    5A              POP EDX
004B32DB    C3              RETN
0012FEE4  01 00 00 00 6B 6B 4A 00  �...kkJ. <----------меняем 01 на 00
0012FEEC  1C FF 12 00 75 6B 4A 00  �я�.ukJ.
0012FEF4  08 FF 12 00 28 02 91 7C  �я�.(�‘|

Также обходится перехватом и последующей правкой результирующего значения функции ZwQueryInformationProcess.