Форум: "Сети";
Текущий архив: 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