ОС - Windows XP SP2, компьютер - Notebook Toshiba Satellite L40-14B. Проблема в следующем: вне зависимости от того, установлен ли флаг "IsDebuggerPresent" в настройках плагина HideDebugger, байт по адресу 7ffdd002 всегда остается 01. Кто-нибудь сталкивался? В принципе, я уже написал скрипт, устанавливающий этот байт в 0, но все-таки интересно узнать, это баг, или проблемы совместимости? Кстати, HideDebugger.dll удаляется и переносится во время работы отладчика. Это показывает, что она вообще не загружается?
в логе Olly должны быть строки Hide Debugger v1.2.4 Copyright (c) 2004-2006 by Asterix что говорит об успешной загрузке, если нет сообщений плагина об ошибках рекомендую проверить на чистом OllyDbg 1.10 с офсайта при одном установленном HideDebugger
Нет, дело именно в кривой версии отладчика. У меня был ollydbgxp. Там кнопочки в XP стиле . Я же тогда не знал, что они так сильно различаются в работе. Я всего только и сделал, что скачал с офсайта отладчик и заменил экзешник. И все заработало
А данный плагин работает под windows7? Пробую уже часа 2, байт для функции IsDebuggerPresent никак не хочет менять. Пересобирал библиотеку, результат тот же. OllyDBG чистая, пробовал версии 1.10 и 1.08 с оффициального сайта. Даже попробовал на скорую руку отладить OllyDBG с помощью той же олли, байт похоже считывает, хотя уверенности нет, адреса не проверял.
Код (Text): ProcessDebugObjectHandle equ 30 STATUS_PORT_NOT_SET equ 0C0000353H QueryDebugger proc uses ebx esi edi DebuggerPID:PHANDLE Local HandleInformation[sizeof(SYSTEM_HANDLE_INFORMATION) + 4]:BYTE Local SystemInformation:PVOID, SystemInformationLength:ULONG Local DebugHandle:HANDLE invoke ZwQueryInformationProcess, NtCurrentProcess, ProcessDebugObjectHandle, addr DebugHandle, sizeof(HANDLE), NULL test eax,eax jnz Exit mov SystemInformation,eax invoke ZwQuerySystemInformation, SystemHandleInformation, addr HandleInformation, sizeof(SYSTEM_HANDLE_INFORMATION) + 4, addr SystemInformationLength cmp eax,STATUS_INFO_LENGTH_MISMATCH jne Close cmp SystemInformationLength,NULL je Close add SystemInformationLength,50*sizeof(SYSTEM_HANDLE_INFORMATION) invoke ZwAllocateVirtualMemory, NtCurrentProcess, addr SystemInformation, 0, addr SystemInformationLength, MEM_COMMIT, PAGE_READWRITE test eax,eax jnz Close invoke ZwQuerySystemInformation, SystemHandleInformation, SystemInformation, SystemInformationLength, Eax test eax,eax mov edx,SystemInformation jnz Error mov ebx,fs:[TEB.Cid.UniqueProcess] mov ecx,dword ptr [edx] mov eax,DebugHandle add edx,4 lea esi,dword ptr [ecx*(sizeof(SYSTEM_HANDLE_INFORMATION)/2)] mov edi,edx assume edx:PSYSTEM_HANDLE_INFORMATION Next: cmp [edx].ProcessId,ebx jne @f cmp [edx].Handle,ax je Objext @@: add edx,sizeof(SYSTEM_HANDLE_INFORMATION) loop Next NotFound: mov eax,STATUS_NOT_FOUND jmp Error Objext: cld mov eax,[edx].Object lea ecx,dword ptr [esi*2] @@: repne scasd jecxz NotFound test edi,1111B jnz @b cmp SYSTEM_HANDLE_INFORMATION.ProcessId[edi - sizeof(SYSTEM_HANDLE_INFORMATION) + 4],ebx je @b mov edx,SYSTEM_HANDLE_INFORMATION.ProcessId[edi - sizeof(SYSTEM_HANDLE_INFORMATION) + 4] mov ecx,DebuggerPID xor eax,eax mov dword ptr [ecx],edx Error: push eax invoke ZwFreeVirtualMemory, NtCurrentProcess, addr SystemInformation, addr SystemInformationLength, MEM_RELEASE pop eax Close: push eax invoke ZwClose, DebugHandle pop eax Exit: ret QueryDebugger endp
Проверил на Windows 7 32-х битной с различной аппаратной конфигурацией, бит не сбрасывается. Тот же самый Ollydbg с той же самой dll на Windows XP отлично работает. Хотелось бы узнать в чем же все-таки причина, функции вроде не менялись с 2000. P.S. klzlk спасибо за код, многое из него узнал, хотя еще не все, что мог
Windows 7 Prof SP1- тоже бит не сбрасывается. Ставил чистую Ollydbg. HideDebugger v1.2.4 Олли в логах пишет следующее