windows防火墙设计内容摘要:

_CHAIN]。 /* a list of dwCatalogEntryIds */ } WSAPROTOCOLCHAIN, FAR * LPWSAPROTOCOLCHAIN。 SPI原理 由于 SPI程序可以截获所有通过的报文,所以反倒成为很多木马监视用户流量或者进行进程保护的地方,例如 cic就会在此增加一个自己的 LSP。 所以反木马软件也有监控该注册表项的功能,图中为一个反木马软件对注册表项的监控。 通过工具 DumpSPI也可以查看详细信息。 SPI原理 另外一个监视所有可能自动启动程序的安全工具界面,也将SPI列为监视对象。 SPI原理 我们重点学习如何设计一个 Windows防火墙,该防火墙替换掉 TCP协议的基础服务提供者,然后运行安全功能,当安全功能运行完成后,再运行原有的 Winsock功能。 对于如何编写一个分层服务提供者,MSDN有例子文档,可以参考,原理接近。 工程名: MiniSPI  演示效果  实现流程介绍 4. 效果演示: 程序分为两个部分: ,为命令行程序,负责修改注册表,替换掉 TCP基础服务提供者的某些信息,使得 DLL。 DLL即注入 DLL,名称为,同时遵守SPI接口。 install程序流程: ,调用 CInstall类的InstallPriovider()方法,该方法负责修改注册表,达到注入新的 SPI DLL目的。 ,调用 CInstall类的RemoveProvider()方法,该方法恢复原来的注册表。 4. CInstall类方法介绍 InstallPriovider()流程: 1. IsInstalled()方法判断是否已经修改注册表,如果已经生成了新的注册表项:SYSTEM\\CurrentControlSet\\Services\\WinSock2\\MiniSpi就认为已经安装,那么退出。 2. 调用 EnumHookKey(FALSE),该方法遍历SYSTEM\\CurrentControlSet\\Services\\WinSock2\\Parameters\\Protocol_Catalog9\\Catalog_Entries下所有的基础服务提供者,判断是否 TCP/IP协议,如果是,则替换调注册表中 DLL名字为 ,并将原来的 DLL名字,保存到SYSTEM\\CurrentControlSet\\Services\\WinSock2\\MiniSpi下和 dwCatalogEntryId对应的值中。 4. CInstall类方法介绍 RemovePriovider()流程: 基本是 InstallProvider的逆过程,负责将原来的基础服务提供者的 DLL名字恢复。 注意 install程序仅仅修改了注册表,将原基础服务提供者的DLL指向 ,没有完成任何安全功能。 4. 效果演示 没有 Install之前的注册表: 4. 效果演示 Install之后的注册表: 4. : ,输出 WSPStartup函数,该函数负责初试化,该函数也是所有使用 Winsock程序首先调用的程序。 ()调用 GetHookProvider()得到原来的基础服务者的 DLL位置,然后装载,并调用其 WSPStartup(),然后得到Winsock的 lpProcTable,该 table指向所有的Winsock函数。 lpProcStartup中的 WSPSocket函数,并打印调试信息,即截获了 WSPSocket函数的调用。 4. int WSPAPI WSPStartup( WORD wVersionRequested, LPWSPDATA lpWSPData, LPWSAPROTOCOL_INFOW lpProtocolInfo, WSPUPCALLTABLE upcallTable, LPWSPPROC_TABLE lpProcTable) { OutputDebugString(_T(WSPStartup))。 TCHAR sLibraryPath[512]。 LPWS。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。