首页
社区
课程
招聘
[原创]TDI HOOK监控tcp连接源码+文档
发表于: 2011-8-11 17:59 22352

[原创]TDI HOOK监控tcp连接源码+文档

2011-8-11 17:59
22352
直接改的tdifw,精简掉乱七八糟的代码,一共500来行搞定,写了一个简单的文档
相信大家都可以看懂,呵呵

编译:VC6 + DDK2000(D:\NTDDK)
测试:加载驱动,执行一个tcp连接,debugview会有输出,如果没有输出,有可能是机器上的杀毒软件防火墙之类干扰造成
流程简介:
一、hook_tcpip函数
首先获取\\Driver\\Tcpip驱动设备的MajorFunction分发函数并替换成TdiHookDeviceDispatch。
二、在TdiHookDeviceDispatch中处理具体的IRP
主要有IRP_MJ_CREATE->tdi_create,
在此可以监控创建的TdiTransportAddress以及connection object
如果是创建tdi地址,设置irp完成函数tdi_create_addrobj_complete,通过tdi_dispatch_complete函数处理。

tdi_dispatch_complete处理流程如下:
创建一个自定义的TDI_SKIP_CTX上下文,里面记录了新的irp完成函数的参数,并设置当前irp完成函数为tdi_skip_complete
在tdi_skip_complete中
// call new completion
status = ctx->new_cr(ctx->new_devobj, Irp, ctx->new_context);

在tdi_create_addrobj_complete中参数Context是tdi_create时,通过TdiBuildInternalDeviceControlIrp创建的一个查询query_irp。
该IRP在tdi_create_addrobj_complete2时完成,此时已经获取到创建地址信息。由于具体的任务需要,我只需要获取tcp连接的src_port以及dst_port信息。
我们通过add_object_hash_pool将该地址信息添加到obj_hash表中,查询key为该地址obj。
add_object_hash_pool(g_hash_pool, (unsigned long)ctx->fileobj, obj_item);

接下来会创建tdi连接obj,类似地址obj,无需特殊处理

然后是TDI_ASSOCIATE_ADDRESS ->tdi_associate_address IRP,将开始创建的local地址和连接obj进行绑定。我们在hash表中,通过查询地址obj,获取先前记录的local地址信息,复制到新的obj_item中,该obj的key为连接obj地址。

最后是TDI_CONNECT ->tdi_connect处理,直接查询hash表即可获取该conn obj对应的local地址信息,并在调试输出中显示出来。

总体的流程如下:
Tdi_create->创建查询irp->
tdi_create_addrobj_complete->tdi_create_addrobj_complete2
->建立addr obj到local addr映射
TDI_ASSOCIATE_ADDRESS ->tdi_associate_address
->建立conn obj到local addr映射,通过addr obj为key查询hash obj_item
TDI_CONNECT ->tdi_connect
->通过conn obj为key查询hash obj_item获取地址信息并输出

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (18)
雪    币: 3107
活跃值: (1249)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
你潜水很久了。。。。。。。。。。
2011-8-11 19:03
0
雪    币: 12
活跃值: (767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我觉得那里面乱七八糟的代码太多,不适合新手
2011-8-11 19:13
0
雪    币: 73
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
有点混乱,觉得还是对照着书上的解释看会好点。
2011-8-11 20:49
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
还有很多东西没处理呢,继续完善吧。。。。。
2011-8-12 14:42
0
雪    币: 1149
活跃值: (833)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
6
和 file filter 中 create 里建 路径-对象 表,其他读写或者查询,输出相应的 东东,很类似....以实现监控
2011-8-12 14:59
0
雪    币: 27
活跃值: (90)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
7
boywhp,新建 文本文档 好像不见你了..
2011-8-12 16:43
0
雪    币: 52
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谁把我从新建文本文档里面踢啦~~!!~!~@#!#@~@#@~#
2011-8-12 16:47
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
9
好像是被踢了吧?哈哈
2011-8-12 18:05
0
雪    币: 212
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
新建文本文档???
2011-8-12 19:02
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
"新建文本文档"?组织代号 ?小弟不才!
2011-8-12 20:04
0
雪    币: 220
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
呵呵 不错 。
2011-8-14 01:38
0
雪    币: 437
活跃值: (110)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
13
支持一下楼主。
2011-8-14 06:47
0
雪    币: 693
活跃值: (108)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
14
多谢,学习了
2011-8-14 09:21
0
雪    币: 1602
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
360?能监控包大小?
2011-8-14 15:11
0
雪    币: 322
活跃值: (113)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
学习了,留个脚印
2011-8-16 12:59
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
17
找好久了,楼主大好人,大大的好人,非常感谢!
2012-2-9 21:46
0
雪    币: 859
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
很有技术含量。。
2012-2-9 22:22
0
雪    币: 130
活跃值: (61)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
tdifw不错,学习mark
2012-12-10 09:04
0
游客
登录 | 注册 方可回帖
返回
//