文章目录

  • 前言
  • WFP入门介绍
    • WFP基本架构
    • 名词解释
    • 代码基本结构
  • 代码示例

前言

WFP Architecture - Win32 apps | Microsoft Learn是一个网络流量处理平台。WFP 由一组连接到网络堆栈的钩子和一个协调网络堆栈交互的过滤引擎组成。

本文使用WFP,实现了一个网络阻断的demo,以阻断访问指定站点的流量。代码比较复杂,本文不进行介绍。本文仅是一个WFP入门介绍

PS:如果不是内核驱动程序员,不建议使用WFP进行网络过滤开发,上手成本挺高。(我头铁。。)


WFP入门介绍

相关阅读:

  • 《windows内核安全与驱动开发》第15章 Windows过滤平台 (推荐,看完基本入门)

  • windows驱动-WFP框架介绍及其编程 | qwertwwwe

  • WFP Architecture - Win32 apps | Microsoft Learn (不推荐)

我没搞清这个架构具体是怎么回事,因为参考资料很少。因为我看不懂官方的文档,所以官方的文档很烂。但这不妨碍写代码,多找几个示例代码看看,照葫芦画瓢即可。


WFP基本架构

WFP的基本架构图如下:

整个WFP分为两部分:用户态和内核态。

挂载在内核钩子上的函数,必须通过驱动加载入内核。但是何时将这些函数挂载到钩子上,可以直接在驱动中实现,也可以在用户态控制。(目前可能看不懂这句话,不着急。实际写代码的时候,会区分出他们的优缺点。)(总的来说,本质都是这样:实现自定义的函数->将函数加载的内核hook上->数据流经过的时候,执行该函数


名词解释

首先,需要进行的是”名词解释“。框架为了描述方便,会自定义一些名词。这些名词以特定的方式组合起来,便是整个框架。这些名词的官方链接是:Object Model - Win32 apps | Microsoft Learn

  • 过滤器(Filter):当满足一组条件的时候,执行指定的动作。多个滤器之间,有位置和权重之分。过滤器也为钩子函数,提供上下文环境。(如果我们有知道nftables,会很容易理解这套流程:iptables和nftables的使用_大1234草的博客-CSDN博客_nftables和iptables)

  • Callout:是一组函数。数据流经过时,过滤器调用callout,执行callout中自定义的操作,然后标记放行还是阻断。callout有自己的ID。这样无论在内核还是用户空间,都可以通过ID挂载特定的callout。

  • Layer:表示网络流量处理中调用过滤器引擎的特定点。(不同的Layer,有不同的标识。比如我们想在TCP三次握手的某个过程中,进行网络阻断。我们可以将相应的callout放到对应的Layer中:TCP Packet Flows - Win32 apps | Microsoft Learn)

  • Sub-layer:layer的子组件。一个layer中可以创建不同的sub-layer,有权重之分(执行先后之分。比如我们权重高的sub-layer中,调用callout将也给数据流标记为阻塞,并设置为禁止修改。相同层的后面子层中的callou检查无修改权限后,直接return)。

  • Provider:略(代码中没用过,不知道)

  • Provider Context:略(代码中没用过,不知道)


代码基本结构

上面每个名词都有对应的数据结构,每个数据结构都有一组对应的操作函数。

接下来,需要将这些名词组合起来。下面是WFP API调用的整体结构

  1. 定义一个或多个callout,然后向过滤引擎注册callout(FwpsCalloutRegister函数)。

  2. 将这些callout,添加到过滤引擎中,其中指定callout运行所在的layer(FwpmCalloutAdd函数)。

  3. 设计一个或者多个子层,把子层添加到分层中(FwpmSubLayerAdd函数)。

  4. 设计过滤器,把呼出接口、子层、分层和过滤器关联起来,向过滤引擎添加过滤器(FwpmFilterAdd)(当流量经过layer的时候,执行相应的callout,如修改数据,最后标记为放行或者阻塞)。

建议在写代码时候,使用Transactions。比如上面是一套API,如果有一个执行失败,可以全部不生效。Transactions介绍,可参考:Object Management - Win32 apps | Microsoft Learn


代码示例

上面文字过程,可能写的很烂,难以让人明白。此时需要去看些demo代码,好理解这些概念。

  1. Windows-kernel-security-and-driver-development-CD/source/WfpSample at master · dybb8999/Windows-kernel-security-and-driver-development-CD · GitHub。这个是书上的对应代码,比较容易理解。(我自己也敲过一边,但是运行会导致系统退出,我没找到bug位置,不会win的驱动调试。。见:demo/16-wfp-demo at laboratory · da1234cao/demo · GitHub)

  2. GitHub - henrypp/simplewall: Simple tool to configure Windows Filtering Platform (WFP) which can configure network activity on your computer.。这个不推荐去看,代码有些复杂。但是可以安装运行,看看WFP的好玩之处。

  3. GitHub - junjiexing/libredirect: 使用WFP重定向socket链接。这个代码我完成看过一遍,也能跑起来。其重定向的原理是:先阻断流量;然后修改目标地址或端口;再放行流量。

  4. 阻断指定的域名访问。这是我写的代码。代码在内容上参考了第一个链接,在结构上参考了第三个链接。

复杂点的代码,不适合写成短篇文档。故,这里不介绍具体代码。下面是4中代码的运行截图。

我不建议写驱动的另一个原因是。win上驱动需要签名后才能安装。见:测试签名简介

WFP网络过滤驱动-限制网站访问相关推荐

  1. wfp 禁用ip_[原创]WFP网络过滤驱动——限制网站访问

    0x1前言 文中的注释有的来自微软官方的解释翻译,有的来自Windows内核安全与驱动开发书中的解释,也有的来自我个人的理解.代码功能是在Windows内核安全与驱动开发第15章中Wfpsample代 ...

  2. wfp 禁用ip_WFP网络过滤驱动——限制网站访问

    [md] 0x1前言 文中的注释有的来自微软官方的解释翻译,有的来自Windows内核安全与驱动开发书中的解释,也有的来自我个人的理解.代码功能是在Windows内核安全与驱动开发第15章中Wfpsa ...

  3. NDIS LWF网络过滤驱动开发(一):LWF简介及数据结构说明

    写在之前:换工作了,做Win驱动开发,还是网络过滤驱动.之前从未接触过这些,只是做着单机的桌面应用程序,所以一切是从头开始.从驱动到网络,很多的不懂,一步步走来,现在多少有些进展了,现在就总结下这段过 ...

  4. Win64 驱动内核编程-16.WFP网络监控驱动(防火墙)

    WFP驱动监控网络 WFP 是微软推出来替代 TDI HOOK.NDIS HOOK 等拦截网络通信的方案,WFP 的框架非常庞大,在 RING3 和 RING0 各有一套类似的函数,令人兴奋的是,即使 ...

  5. wfp 禁用ip_Win64 驱动内核编程-16.WFP网络监控驱动(防火墙)

    WFP驱动监控网络 WFP 是微软推出来替代TDI HOOK.NDIS HOOK等拦截网络通信的方案,WFP的框架非常庞大,在RING3和RING0各有一套类似的函数,令人兴奋的是,即使在R3使用WF ...

  6. (转)TDI FILTER 网络过滤驱动完全解析

    http://blog.csdn.net/charlesprince/article/details/5924376 TDI FILTER 过滤驱动的功能一般用来进行整个系统中的所有网络流量的分析,记 ...

  7. wfp网络过滤框架总结(一)

    一.基本术语定义 callout为扩展wfp性能提供的一个功能,由一系列call function和一个guid key组成,wfp内置了几个callouts.用户可以通过callout driver ...

  8. [x64驱动] - WFP网络监控驱动

    背景 WFP 是微软推出来替代 TDI HOOK.NDIS HOOK 等拦截网络通信的方案,WFP 的框架非常庞大,在 RING3 和 RING0 各有一套类似的函数,令人兴奋的是,即使在 R3 使用 ...

  9. Windows过滤驱动 WFP代码基本流程的剖析 bypass前期准备

    今天实际看一下,WFP的Callout驱动的代码.先从DriverEntry开始: 1,在DriverEntry需要创建驱动对象和设备对象,         1.1  由于不是PNP设备,需要设置创建 ...

最新文章

  1. Share Point 2013使用Windows PowerShell 获取,删除UserProFile
  2. php获取访问量文本形式,php利用用文本统计访问量的方法图文详解
  3. Node-RESTful
  4. Source Insight 4.0与3.5的区别
  5. Qt Creator IDE概述
  6. 使用腾讯bugly更新服务遇到的坑
  7. 一句话讲清楚GIL锁
  8. 使用模板来解决接口继承问题
  9. (1)安装----anaconda3下配置pyspark【单机】
  10. 百度播放器插件html,百度影音调用方法:网页控件使用教程说明
  11. 计算机组成和体系结构-Flynn分类法
  12. Stack的三种含义
  13. 最新Discuz【西瓜】微信登录插件
  14. 基于android手机实时监控ipcam视频之一:RTSP
  15. laravel-admin / Dcat admin 上传Excel并导入数据到数据库
  16. c语言位运算负数的实例_负数位运算的右移操作-C语言基础
  17. unreal 渲染讲的比较好的材料
  18. 苹果三代耳机_p360 AirPods Pro 苹果三代耳机
  19. 用blender和MakeHuman生成人体动画
  20. 想拿互联网大厂的前端offer, 除了技术,你还差什么?

热门文章

  1. 弧度在计算机上的符号,弧度怎么输入
  2. Java:外卖团购系统
  3. s9014 c331
  4. 服务器主板u3芯片配i3CP0,小块头大智慧 华硕U36配i3/i5精睿来袭
  5. 分享到豆瓣/QQ/开心网/人人网/百度/Google等代码
  6. Dijkstra 算法 实现
  7. 基于5G智慧路灯杆打造数字乡村
  8. python+ffmpeg切割视频
  9. Android开源滤镜 仿instagram
  10. grafana dashboard的导入导出