|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 8, 2003 21:47:35 Как перехватить ф-ии драйвера (наподобие перехвата апи под win32)? И вообще, реально ли это сделать? Например tcpip.sys. Заранее благодарен, SToweeSH. |
|
|
Дата: Ноя 9, 2003 00:30:56 В принципе, реально, конечно. Но для этого необходимо ОЧЕНЬ ПРИЛИЧНО разбираться в паписании драйверов... |
|
|
Дата: Ноя 9, 2003 14:28:22 >>ОЧЕНЬ ПРИЛИЧНО разбираться в написании драйверов... Это и так понятно. Мне интересен именно метод перехвата и сильно ли он отличается от методов перехвата для апи ф-ий. |
|
|
Дата: Ноя 9, 2003 15:13:13 Если API не системный сервис, то ничем не отличается. Пример можно посмотреть в DbgView (sysinternals.com) - он хучит ntoskrnl!DbgPrint. Дровина в ресурсах прячется. Для системных сервисов проще заменить адрес в таблице. Ищи в нете по ключевому слову KeServiceDescriptorTable - об этом много где есть. Кое что о системных сервисах есть в свежеопубликованной на этом сайте статье "Об упаковщиках в последний раз. Часть вторая". Volodya, видишь, я исправляюсь :-p |
|
|
Дата: Ноя 10, 2003 00:16:33 · Поправил: Grenader SToweeSH Я просто имел в виду, что ПЕРЕХВАТ сервисов - это просто. Также не составляет труда повесить хук и на любую функцию ядра (например, пишем туда "jmp наш_код", и т.д.). А вот что касается интерпретации полученных данных - вот тут надо разбираться :) Извини за некорректный ответ. |
|
|
Дата: Ноя 10, 2003 01:20:14 2Grenader: вопрос не про перехват ф-ий сервисов и не про перехват апи ф-ий (тем более) - это я и так отлично знаю. Я спрашивал именно про низкоуровневый перехват ф-ий драйвера. 2Four-F: спасибо за инфу. Только смогу ли я из своего драйвера перехватить запросы, посылаемые системному драйверу? (ndis, tcpip). |
|
|
Дата: Ноя 10, 2003 04:44:42 SToweeSH "низкоуровневый перехват ф-ий драйвера" - это перехват "запросов, посылаемых системному драйверу? (ndis, tcpip).", так? IoCallDriver и иже с ним - вот что в твоем случае нужно перехватывать. В обработчике анализируешь IRP и дальше вроде как все просто. "не про перехват апи ф-ий (тем более)" апи функции из ntoskrnl.exe - я про них говорил, а не про MessageBox :) |
|
|
Дата: Ноя 10, 2003 14:29:29 >>>"низкоуровневый перехват ф-ий драйвера" - это перехват "запросов, посылаемых системному драйверу? (ndis, tcpip).", так? Если нужен "легальный" способ, можно еще использовать драйвер-фильтр.Rajeev Nagar : Windows NT File System Internals. A Developer's Guide. http://anatolix.naumen.ru/win32books.htm |
|
|
Дата: Ноя 10, 2003 23:02:51 2Grenader: могешь на мыло описалово IoCallDriver скинуть (и ей подобных)? 2rcz: спасибо за линк. А можно подробней и про "нелегальный" способ? |
|
|
Дата: Ноя 11, 2003 17:32:07 "Нелегальный" способ - получаешь DRIVER_OBJECT нужного драйвера, В нем есть массив обработчиков (смещение 0x38) PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; Правишь их на себя. Только вызываемый код должен быть в пуле неподкачиваемой памяти. DRIVER_OBJECT можно получить так получаем PDEVICE_OBJECT *DeviceObject IoGetDeviceObjectPointer( IN PUNICODE_STRING ObjectName, IN ACCESS_MASK DesiredAccess, OUT PFILE_OBJECT *FileObject, OUT PDEVICE_OBJECT *DeviceObject ); в DEVICE_OBJECT по смещению 0x8 находится PDRIVER_OBJECT Идея такая. На практике не пробовал. А перехват через IoCallDriver. Вся его работа (после IofCallDricer вызывается IovpVerifierFlag) - .text:0041F5EA _IovpVerifierFlags proc near ; CODE XREF: sub_0_52FC9F+18p .text:0041F5EA ; sub_0_52FC9F+77p ... .text:0041F5EA push esi .text:0041F5EB mov esi, edx ; IRP .text:0041F5ED push edi .text:0041F5EE mov edi, ecx ; DEVICE_OBJECT .text:0041F5F0 dec byte ptr [esi+23h] ; Dec Current Location .text:0041F5F3 mov al, [esi+23h] .text:0041F5F6 xor ecx, ecx .text:0041F5F8 cmp al, cl .text:0041F5FA jg short loc_0_41F607 ; esi+60h - Stack Location .text:0041F5FC push ecx .text:0041F5FD push ecx .text:0041F5FE push ecx .text:0041F5FF push esi .text:0041F600 push 35h .text:0041F602 call KeBugCheckEx .text:0041F607 .text:0041F607 loc_0_41F607: ; CODE XREF: _IovpVerifierFlags+10j .text:0041F607 mov eax, [esi+60h] ; esi+60h - Stack Location .text:0041F60A push esi .text:0041F60B sub eax, 24h ; new stack .text:0041F60E push edi .text:0041F60F mov [esi+60h], eax ; set new stack location .text:0041F612 mov [eax+14h], edi ; PDEVICE_OBJECT .text:0041F615 mov ecx, [edi+8] ; DRIVER_OBJECT .text:0041F618 movzx eax, byte ptr [eax] .text:0041F61B call dword ptr [ecx+eax*4+38h] ; call MajorFunction[IRP_MJ_FUNCTION] .text:0041F61F pop edi .text:0041F620 pop esi .text:0041F621 retn |
|
|
Дата: Ноя 13, 2003 01:07:59 Спасибо, попробую. |
|
|
Дата: Ноя 13, 2003 18:08:36 Только поправочка. Небольшой касяк с символами вышел. Это не _IovpVerifierFlags :). |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.068 |