Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];

Вниз

Filter-hook Driver   Найти похожие ветки 

 
volser   (2005-01-03 18:43) [0]

У меня нет опита написания драйверов. Прочитав в ДДК о Filter-hook Driver я так и не понял как его делать. Там приводится пример:

#define PROT_TCP   6

// Drop all TCP packets

PF_FORWARD_ACTION
DropTcpPackets(
       unsigned char   *PacketHeader,
       unsigned char   *Packet,
       unsigned int    PacketLength,
       unsigned int    RecvInterfaceIndex,
       unsigned int    SendInterfaceIndex,
       IPAddr          RecvLinkNextHop,
       IPAddr          SendLinkNextHop
       )
{
   if (PacketHeader->iph_protocol == PROT_TCP)
   {
       return PF_DROP;
   }
   return PF_FORWARD;
}



Че с ним делать? Как его откомпилировать? И как его зарегистрировать?


 
Eraser ©   (2005-01-03 23:14) [1]

Если бы всё было так просто ))) Программирование драйверов это всё равно что программирование под другую ОС- другой API, другие функции, только язык программирования тот же ))
Покупай книгу по написанию драйверов, уже есть на русском!


 
volser   (2005-01-04 12:30) [2]

А есть ли что-то в електронном виде? Желательно на русском


 
Eraser ©   (2005-01-05 01:50) [3]

Очень мало...
Советую http://sysinternals.com/, хоть там и конкретной инфы не очень много, зато много прог, которые используют драйвер- чудеса техники )))


 
AlterEgo of WondeRu ©   (2005-01-05 16:38) [4]

у Подгорецкого на сайте видел программирование WDM-драйверов www.podgoretsky.com

это мой код, работает прилично, объяснять не буду:

.386
.model flat, stdcall
option casemap:none

include inc\ntstatus.inc
include inc\ntddk.inc
include inc\ntoskrnl.inc
include inc\pfhook.inc
include inc\Strings.mac
include inc\native.inc
include inc\wdm.inc

includelib lib\ntoskrnl.lib
includelib lib\ntdll.lib
includelib lib\wdm.lib

set_hook PROTO  :PacketFilterExtensionPtr

.const
uszFilterDevName dw "\","D","e","v","i","c","e","\","I","P","F","I","L","T","E","R","D","R","I","V","E","R",0
uszDeviceName  dw "\","D","e","v","i","c","e","\","I","P","H","O","O","K","E","R",0
uszSymbolicLinkName dw "\","D","o","s","D","e","v","i","c","e","s","\","I","P","H","O","O","K","E","R", 0

IOCTL_GET_VERSION  equ CTL_CODE(FILE_DEVICE_UNKNOWN, 800h, METHOD_BUFFERED, FILE_ANY_ACCESS)

.data

hook_nfo PF_SET_EXTENSION_HOOK_INFO <>

isb      IO_STATUS_BLOCK <>
fileobj  PFILE_OBJECT NULL
myirp    PIRP NULL
devobj   PDEVICE_OBJECT ?
incer    DWORD 0
source1  DWORD 0
dest1    DWORD 0
counter  DWORD 0
type_    BYTE ?

usSymbolicLinkName UNICODE_STRING <>
usDeviceName UNICODE_STRING <>
usFilterDevName UNICODE_STRING <>

cb   DWORD ?
p     PVOID ?
dwNumModules DWORD ?
pMessage DWORD ?
mas     BYTE 1000h dup(0)

.code

;-----------------------------------------------------------------
DispatchCreateClose proc pDeviceObject:PDEVICE_OBJECT, pIrp:PIRP
       mov eax, pIrp
assume eax:ptr _IRP
mov [eax].IoStatus.Status, STATUS_SUCCESS
and [eax].IoStatus.Information, 0
assume eax:nothing

fastcall IofCompleteRequest, pIrp, IO_NO_INCREMENT

mov eax, STATUS_SUCCESS
ret

DispatchCreateClose endp

;------------------------------------------------------------------
DispatchControl proc uses esi edi ebx pDeviceObject:PDEVICE_OBJECT, pIrp:PIRP

local status          : NTSTATUS
local dwBytesReturned : DWORD

;int 3
and dwBytesReturned, 0

mov esi, pIrp
assume esi:ptr _IRP

IoGetCurrentIrpStackLocation esi
mov edi, eax
assume edi:ptr IO_STACK_LOCATION

.if [edi].Parameters.DeviceIoControl.IoControlCode == IOCTL_GET_VERSION
 mov eax, [esi].AssociatedIrp.SystemBuffer

 ;.if counter !=0
   invoke CopyMemory,eax, addr mas, 10h
 ;.endif

 push counter
 pop dword ptr [eax]

 push source1
 pop  dword ptr [eax+4]

 push dest1
 pop  dword ptr [eax+8]

 mov dl,type_
 mov byte ptr [eax+12],dl

 mov dwBytesReturned,13

 mov status, STATUS_SUCCESS
.else
 mov status, STATUS_INVALID_DEVICE_REQUEST
.endif

assume edi:nothing

push status
pop [esi].IoStatus.Status

push dwBytesReturned
pop [esi].IoStatus.Information

assume esi:nothing

fastcall IofCompleteRequest, esi, IO_NO_INCREMENT

mov eax, status
ret

DispatchControl endp

;------------------------------------------------------------------
DriverUnload proc pDriverObject:PDRIVER_OBJECT
;int 3

invoke set_hook,NULL
invoke IoDeleteSymbolicLink, addr usSymbolicLinkName
mov eax, pDriverObject
invoke IoDeleteDevice, (DRIVER_OBJECT PTR [eax]).DeviceObject
       
       invoke ExFreePool, p
       invoke DbgPrint, $CTA0("SystemModules: Memory at address %08X released\n"), p

    ret
DriverUnload endp

;---------------------------------------------------------------------
DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING

local pDeviceObject      : PVOID
local status             : NTSTATUS

    ;int 3

    and cb, 0
    invoke ZwQuerySystemInformation, SystemModuleInformation, addr p, 0, addr cb
    .if cb != 0
        invoke ExAllocatePool, NonPagedPool, cb
        .if eax != NULL
            mov p, eax
       
            invoke DbgPrint, $CTA0("SystemModules: %u bytes of paged memory allocted at address %08X\n"), cb, p
       
        .endif
    .endif

       invoke RtlInitUnicodeString, addr usDeviceName, offset uszDeviceName
invoke RtlInitUnicodeString, addr usSymbolicLinkName, offset uszSymbolicLinkName
invoke RtlInitUnicodeString, addr usFilterDevName, offset uszFilterDevName

;установка хука!
mov eax,offset hookproc
invoke set_hook, eax

.if eax != STATUS_SUCCESS
        ret
       .endif

mov status, STATUS_DEVICE_CONFIGURATION_ERROR

invoke IoCreateDevice,pDriverObject,0, addr usDeviceName,FILE_DEVICE_UNKNOWN,0,TRUE,addr pDeviceObject

 .if eax == STATUS_SUCCESS
        invoke IoCreateSymbolicLink, addr usSymbolicLinkName, addr usDeviceName
        .if eax == STATUS_SUCCESS
            mov eax, pDriverObject
            assume eax:PTR DRIVER_OBJECT
            mov [eax].MajorFunction[IRP_MJ_CREATE*(sizeof PVOID)],offset DispatchCreateClose
     mov [eax].MajorFunction[IRP_MJ_CLOSE*(sizeof PVOID)],offset DispatchCreateClose
     mov [eax].MajorFunction[IRP_MJ_DEVICE_CONTROL*(sizeof PVOID)],  offset DispatchControl
            mov [eax].DriverUnload,offset DriverUnload
            assume eax:nothing
            mov status, STATUS_SUCCESS
        .else
            invoke IoDeleteDevice, pDeviceObject
        .endif
    .endif

mov eax, status
;mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
    ret

DriverEntry endp

;--------------------------------------------------------------------------
set_hook proc hook_fn:PacketFilterExtensionPtr
local status             : NTSTATUS

invoke IoGetDeviceObjectPointer,addr usFilterDevName,STANDARD_RIGHTS_ALL,addr fileobj,addr devobj

mov status,eax  
       .if eax != STATUS_SUCCESS
        jmp exit
       .endif

       mov eax,hook_fn
       mov hook_nfo.ExtensionPointer,eax
     
       invoke IoBuildDeviceIoControlRequest,IOCTL_PF_SET_EXTENSION_POINTER(),devobj, addr hook_nfo,
           sizeof hook_nfo, NULL, 0, FALSE, NULL,addr isb

mov myirp,eax

       .if eax == NULL
        mov status ,STATUS_INSUFFICIENT_RESOURCES
        jmp exit
       .endif

       invoke IoCallDriver,devobj,myirp

       mov myirp,NULL


 
AlterEgo of WondeRu ©   (2005-01-05 16:39) [5]

       mov eax,STATUS_SUCCESS
       ret
exit:

.if fileobj!=NULL
 invoke ObDereferenceObject,fileobj
.endif

mov eax,status
ret

set_hook endp

;------------------------------------------------------------------------
hookproc proc PacketHeader:DWORD, Packet:DWORD, PacketLength:WORD,
       RecvInterfaceIndex:WORD,SendInterfaceIndex:WORD,RecvLinkNextHop:DWORD,
       SendLinkNextHop:DWORD

;int 3

mov eax, PacketHeader
       assume eax: ptr IPHeader

mov edx,[eax].iph_src
       mov source1,edx

mov edx,[eax].iph_dest  
mov dest1,edx
       
mov dl,byte ptr [eax].iph_protocol
mov type_,dl

.if counter >= 0fffffff0h
    mov counter,0
.else
    inc counter
.endif

       assume eax:nothing

       mov eax,PF_FORWARD
ret
hookproc endp

;------------------------------------------------------------------------
end DriverEntry


 
AlterEgo of WondeRu ©   (2005-01-05 16:43) [6]

а можно и через NDIS-драйвер попробовать!


 
volser   (2005-01-05 22:44) [7]

Eraser
прикольный сайт. Спасибо!

AlterEgo of WondeRu
А нету случайно чего то в этом роде, только на сях?


 
AlterEgo of WondeRu ©   (2005-01-05 23:53) [8]

volser   (05.01.05 22:44) [7]
в DDK есть этот пример, получше поищи! там должен быть файл pfhook.h включен в проект!


 
volser   (2005-01-06 17:51) [9]

Извини, но я в упор не нахожу. У меня DDK 2000. Если не сложно, укажи путь к примеру.
 Спасибо!



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.045 c
14-1108977953
gfd
2005-02-21 12:25
2005.03.13
Где создать форум?


14-1108834039
Vaitek
2005-02-19 20:27
2005.03.13
3 задачи


10-1085988322
Глеб
2004-05-31 11:25
2005.03.13
Экспорт таблицы в Word


1-1109669135
Новичек
2005-03-01 12:25
2005.03.13
Как работает PostMessage.


3-1108024003
REA
2005-02-10 11:26
2005.03.13
SQL Запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский