首页
论坛
课程
招聘
[原创]TDI HOOK监控tcp连接源码+文档
2011-8-11 17:59 20162

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

2011-8-11 17:59
20162
直接改的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获取地址信息并输出

[注意] 欢迎加入看雪团队!base上海,招聘安全工程师、逆向工程师多个坑位等你投递!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (18)
雪    币: 2140
活跃值: 活跃值 (404)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
zhouws 活跃值 2 2011-8-11 19:03
2
0
你潜水很久了。。。。。。。。。。
雪    币: 20
活跃值: 活跃值 (128)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
MagicFuzzX 活跃值 2011-8-11 19:13
3
0
我觉得那里面乱七八糟的代码太多,不适合新手
雪    币: 75
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
私仇之路 活跃值 2011-8-11 20:49
4
0
有点混乱,觉得还是对照着书上的解释看会好点。
雪    币: 35
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
MyTipfocus 活跃值 2011-8-12 14:42
5
0
还有很多东西没处理呢,继续完善吧。。。。。
雪    币: 1112
活跃值: 活跃值 (101)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
ycmint 活跃值 5 2011-8-12 14:59
6
0
和 file filter 中 create 里建 路径-对象 表,其他读写或者查询,输出相应的 东东,很类似....以实现监控
雪    币: 0
活跃值: 活跃值 (24)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
tihty 活跃值 2 2011-8-12 16:43
7
0
boywhp,新建 文本文档 好像不见你了..
雪    币: 52
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jguoguo 活跃值 2011-8-12 16:47
8
0
谁把我从新建文本文档里面踢啦~~!!~!~@#!#@~@#@~#
雪    币: 1034
活跃值: 活跃值 (69)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
boywhp 活跃值 12 2011-8-12 18:05
9
0
好像是被踢了吧?哈哈
雪    币: 207
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kisbuddy 活跃值 2011-8-12 19:02
10
0
新建文本文档???
雪    币: 41
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shuckstark 活跃值 2011-8-12 20:04
11
0
"新建文本文档"?组织代号 ?小弟不才!
雪    币: 220
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
广海混沌 活跃值 2011-8-14 01:38
12
0
呵呵 不错 。
雪    币: 421
活跃值: 活跃值 (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
tornodo 活跃值 1 2011-8-14 06:47
13
0
支持一下楼主。
雪    币: 681
活跃值: 活跃值 (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
zyqqyz 活跃值 1 2011-8-14 09:21
14
0
多谢,学习了
雪    币: 1602
活跃值: 活跃值 (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
panti 活跃值 2011-8-14 15:11
15
0
360?能监控包大小?
雪    币: 322
活跃值: 活跃值 (113)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
高军 活跃值 2011-8-16 12:59
16
0
学习了,留个脚印
雪    币: 49
活跃值: 活跃值 (16)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
邓韬 活跃值 9 2012-2-9 21:46
17
0
找好久了,楼主大好人,大大的好人,非常感谢!
雪    币: 859
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
林志玲 活跃值 2012-2-9 22:22
18
0
很有技术含量。。
雪    币: 124
活跃值: 活跃值 (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ouyangtian 活跃值 2012-12-10 09:04
19
0
tdifw不错,学习mark
游客
登录 | 注册 方可回帖
返回