免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 各类编程 > 利用ndis中间层驱动实施通信拦截与自阻塞(3)

利用ndis中间层驱动实施通信拦截与自阻塞(3)

时间:2012-02-13 18:26来源:未知 整理:寂涯网络 点击:


2.2接收分组数据包的原则 
PtReceive和PtReceivePacket函数接收NDIS数据包的方式不同。虽然不同接收函数接收 数据包内容的方法不相同,但是整个分析工作的工作原理却相同。系统采用修改的社如^“6 函数捕获数据包。RtReceive函数原型显示如下:
PtReceive ( 
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE MacReceiveContext,
IN PVOID HeaderBuffer,
IN UINT HeaderBufferSize,
IN PVOID LookAheadBuffer,
IN UNIT LookAheadBufferSize,
IN UINT PacketSize);

参数LookaheadBufferSize指定lookaheadbuffer的字节大小。如果网络数据包大小小于 或等于参数值,则表明参数lookaheadbuffer[包含整个网络的所有信息。以下即为获取网络 数据包的底层驱动程序的程序代码:
Packet = NdisGetReceivedPacket4 (pAdapt_>BindingHandle, MacReceiveContext); 根据以上代码得知,如果参数返回值为空,则表明底层不能提供完整的网络数据包。相 反,如果返回值不为空,则意味着底层提供了完整的网络数据包。如果恶意代码模式确实存 在,那么该系统工作流程则由网络数据包接收端、初始类、未认证数据以及重分析构成。整 个过程类似于流水线模式.小端口驱动程序层调用NdisMIndicateReceive或NdisffithIndicateReceive函数通知协议驱动层:小端口驱动程序接收数据包数据。PtReceive或PtReceivePacket函数调 用NdisGetReceivedPacket函数来接收完整的数据包;在这种情况下, NdisMIndicateReceivePacket函数通知NDIS调用相应的上层PtReceive例程。但是,如果 PtReceive或PtReceivePacket函数接收到的数据包不完整,那么必须调用 NdisMEthIndicateReceive函数通知NDIS。调用MPReturnPacket和NdisReturnPacket函数来 释放在小端口和协议层的临时数据包和资源。如果PtReceive/PtReceivePacket用 NdisGetReceivedPacket函数接收到的数据包不完整,而由小端口层接收完整的数据包,小 端口层将使用舰1311£让11^10&16尺6061¥60^^1616函数通知冊18,同时用?七尺6061¥60^^16七6 通知协议层已经接收到完整的数据包3七81^^1^[6^&1&函数会提出复制小端口驱动层接收 到的数据的请求。如果即13一3141^一3%0£33返回值,则表示所请求的数据已被转移。相反, 如果_13一3141^」^勵1呢返回值,那么表示请求已被异步处理。在小端口驱动层接收到完 整的数据包后,况181^^仙[6『0&1&0(^^1616函数将被调用。如果pttransferdatacomplete由小端口驱动程序发送到协议层驱动层,那么表示整个过程完成。

图3 包拦截与通道阻塞的架构设计

ndis模型支持混合网络传输ndis驱动程序,称之为仰13中间层驱动程序。该驱动程序介于传输驱动程序和仰13驱动程序之间。对于仰13驱动程序而言,仰13中间层驱动程序则像是 传输驱动程序;对传输驱动程序而言,仰13中间层驱动程序则像是NDIS驱动程序。在本节中, 作者阐述了使用NDIS中间层驱动程序拦截和阻止架构。图4显示了拦截和阻塞的流程图。NDIS 中间层驱动程序拦截系统中输入和输出的所有网络通信。并将截获到的网络数据包传送到扫 描和检测模块,同时将其与一系列预先定义的恶意代码或恶意软件签名进行比较。如果网络 通信数据与签名数据相匹配,则阻塞该网络通信,而其它的网络通信则继续正常传输。
 
所有的网络通信首先由拦截机制进行拦截。在拦截过程中,整个网络的数 据包以十六进制格式转存到日志文件中。创建日志文件的目的就是要查看整个网络活动过 程。扫描和检测机制将执行模式匹配函数。此函数将用预先定义的唯一的签名字符串与截获 到的网络通信数据进行比较,字符串中每个字符都代表部分恶意代码。这里我们采用伽尸算 法用来观察字符串何时出现不匹配。伽?算法按从左到右的顺序查找恶意代码签名样式。它看起来与暴力破解算法相似,但是腸卩算法要更加智能化。
如果模式匹配,即13中间层驱动程序将立即取消对该网络通信的拦截。 函数用于丢弃网络数据包,如下所示:
DbgPrint ( “Signature Match Success,,);
++j;
if(T[j]::’ \0,){
DbgPrint( “myndis blocking - malicious traffic detected” ); return STATUS_DROP;
如果模式不匹配,则允许网络通信通过系统。为了用记录能力提供腸13中间层驱动程序, 那么记录网络活动的日志文件则必不可少。日志记录器的报告能够显示源正地址、源端口、 目的^地址、目的端口号、数据包有效载荷以及拒绝请求的原因。生成的所有报告都以乂!^ 文件形式存储。日志文件示例参考图5。使用基于驱动层使用2双&*^^^6函数建立乂1^文件 的技术实现。然而,无论是ZwReadFile函数还是ZwffriteFile函数都可以用来读写文件。下 面显示了日志文件中创建的函数的部分源代码:

本页地址 http://www.jybase.net/biancheng/20120213769.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com