-
-
[旧帖]
[原创]TDI Object hook
0.00雪花
-
发表于:
2010-6-17 13:42
4177
-
[旧帖] [原创]TDI Object hook
0.00雪花
申请邀请码,文章一
在防火墙或者某些特殊场合,需要拦截udp或者tcp,可能是按进程来拦截,可能是按ip或者端口来拦截。
这里发一段TDI层hook udp的代码,是object hook,非dispatch hook,tcp或者udp的dispatch hook通常是通过InterlockedExchange交换出tcp或者udp的dispatch函数,网上资料容易找到,这里不做探讨。
这篇文章没有包括全部代码,但是整个思路已经说清,再说看雪的兄弟们都这么聪明,我偷点懒你们也能整明白。有些函数和变量的命名,纯属娱乐。
object hook,每种IRP都要处理,这是跟dispatch hook不同的地方,当然重点是放在IRP_MJ_INTERNAL_DEVICE_CONTROL的处理上。
1、DriverEntry中,设置IRP_MJ_INTERNAL_DEVICE_CONTROL处理例程入口:
//pDriverObject是入口传入的驱动对象
pDriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = TDI_DispatchInternalDeviceControl;
pDriverObject->MajorFunction[IRP_MJ_CREATE] = TDI_DispatchCreate;//如果需要处理本地地址时,IRP_MJ_CREATE的处理是个关键的地方,本文不做细究
status = HookUdpDevice(pDriverObject);
if (!NT_SUCCESS(status))
{
//KdPrint(("monitor.sys: Failed to hook udp device\n"));
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课