- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
windows 驱动编写之TDI层实现特定TCP/UDP端口的数据加密
?一 、windows 网络体系结构及 TDI 简介 :
?
? 根据前辈们对MSDN的研究,找到一张相对完整的windows网络体系结构图
?
从图中可以看出,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版本如下 :
代码:
#include ntddk.h
VOID DriverUnload(PDRIVER_OBJECT driver)
{
? DbgPrint(“driver unloading...”) ;
}
NTSTATUS DrivereEntry( PDRIVER_OBJECT ?driver , PUNICODE_STRING reg_path )
{
? DbgPrint(“hello world”) ; ?
?
? //卸载函数
? driver-DriverUnload = DriverUnload ;
? return STATUS_SUCCESS ;?
}
驱动程序的编译 :
? wdk提供用于编译驱动源码的build工具。然而除程序员编写的源程序外,编译一个驱动工程还需要两个额外的文件,即makefile与SOURCES文件,其中,makefile对于所有的工程都是通用的,而SOURCES文件需要手动指定要编译的文件列表以及生成的目标文件。例如,以下是一个典型的SOURCES文件内容 :
TARGETNAME=hello
TARGETTYPE=DRIVER
SOURCES=hello.c
? 编写完这些文件后,便可进入命令行,利用wdk的build工具对其进行编译。注:编译过程中,注意目标机选项应与当前平台相符合。
?
? 驱动程序的运行环境、装载及调试信息打印查看:
? 为避免给正在使用的操作系统造成不必要的伤害,驱动程序编写及测
您可能关注的文档
- Windows Server 2003 IIS设置完全篇.doc
- Windows Mobile 刷机教程.doc
- Windows NT组网技术.ppt
- Windows Phone 云应用开发实践之(二)Windows Live SDK.doc
- Windows Server 2003 服务器安全设置教程.doc
- Windows Server 2003IIS权限设置.doc
- Windows Server 2003 企业版系统安装的硬件要求和安装操作步骤.doc
- windows Server 2003中IIS的安装与配置,常见问题解决.doc
- Windows Server 2003 安全基线-V1.0.doc
- Windows Server 2003 Raid1(镜像)卷的创建及故障恢复.doc
文档评论(0)