首页
社区
课程
招聘
[原创]刚开始学习windows驱动,分享自己做的一个小东西的理解
发表于: 2015-4-18 00:36 17264

[原创]刚开始学习windows驱动,分享自己做的一个小东西的理解

2015-4-18 00:36
17264

标题:初试 windows 驱动编写之 --- TDI层实现特定TCP/UDP端口的数据加密

前言:此文章中相应叙述,很多是根据自己的理解而写出,如有不准确或者错误之处,希望各位前辈们不吝指出。

一 、windows 网络体系结构及 TDI 简介 :

  根据前辈们对MSDN的研究,找到一张相对完整的windows网络体系结构图(出自http://bbs.pediy.com/showthread.php?t=101794):


从图中可以看出,windows的网络结构大致分为五层:
  1. 网络应用层 , 提供供用户态程序调用的网络API(包括winsock , rpc 等 )。
  2. TDI 客户端层,内核模式的设备驱动程序,用于将上层的API请求转换成IRP,并发送给下层。
  3.TDI Transport Provider ,TDI传送者,这部分包含协议驱动程序,即,某个协议(TCP / UDP / IP 等)的具体实现。为上层 TDI Client 提供了5个设备对象,从而使用这些协议 。
  4. NDIS (Network Driver Interface Specification ),向上提供接口,供TDI 传输者和网卡驱动调用 。
  5. HAL , 硬件抽象层 。

  其中,TDI客户端以及TDI传送者之间,通过TDI接口,将上层的请求封装成IRP之后进行通信。

二、TDI层数据加密原理解析 :
TDI层加密,即将一个驱动程序挂接到TDI传输驱动程序Tcpip.sys所创建的三个设备对象之上,截获TDI客户和传输驱动程序之间的IRP通信。解析获取主功能码和次功能码,在对应的Dispatch例程中,可获取通信双方的IP地址,端口号,协议等五元组信息,对这些信息进行验证及筛选,将期望中的数据加密完成后,再将此IRP传递给所挂接的设备 。

  具体做法是,在IRP从TDI客户端传送到TDI传送者的过程中,通过HOOK技术,改变程序流程,使IRP先经过HOOK程序,经过处理后,再继续向下传送。TDI HOOK前后程序执行及IRP流动过程如下图(图片出自《基于TDI-HOOK和NDIS-HOOK的主机防火墙研究与实现 ----徐胜 》):


  那么,接下来的重点就在于,如何编写并加载自定义的TDI HOOK 驱动,并截取IRP ,从IRP中解析数据,解析数据并重新发送至TDI传输者(特定的协议设备对象)。

三、Windows NT 系列内核程序设计、编译、加载及运行:

  在《寒江独钓---windows内核安全编程》一书中,简单地将windows驱动程序模型分为两种 : 将一切能够在windows 2000到vista 上运行的,未调用WDF相关的内核API函数的驱动都称为传统型驱动(包括NT式和WDM),如果调用了WDF(Windows Driver Framework)相关的内核API则称为WDF驱动。
  而本文中所涉及到的TDI驱动,属于传统型驱动中的NT式驱动 。
  
  如果应用程序开发时需要使用SDK一样,内核程序开发则使用WDK(Windows Driver Kit),各个版本的wdk都可在msdn上下载得到。
  安装过程及环境变量等配置在此不再赘述。
  与win32程序的winmain()以及console程序的 main()函数类似,驱动程序为入口为DriverEntry(),NT驱动的hello world版本如下 :


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

收藏
免费 3
支持
分享
最新回复 (9)
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
2
支持一下,加油...
2015-4-18 01:06
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
顶楼主!继续努力!!!!
2015-4-18 08:33
0
雪    币: 49
活跃值: (58)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
感谢支持 ~
2015-4-18 09:45
0
雪    币: 49
活跃值: (58)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
2015-4-18 09:47
0
雪    币: 8188
活跃值: (2847)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
6
strlen。。。。。。。。。这种代码
2015-4-18 11:13
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
顶楼主!继续努力!!!!
2015-4-18 13:23
0
雪    币: 106
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
浅尝辄止
2015-4-27 12:05
0
雪    币: 27
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
还有个严重的问题要考虑吧,按数据流加密还是按数据块加密,按流的话效率怎么办?按块的话,解密时候怎么保证数据块完整性?
2015-4-27 13:19
0
雪    币: 49
活跃值: (58)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
不好意思,见笑了
2015-4-27 21:56
0
游客
登录 | 注册 方可回帖
返回
//