欢迎来到天天文库
浏览记录
ID:38254784
大小:22.66 KB
页数:19页
时间:2019-06-07
《SPI进行网络封包的截获》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、很多单机版的防火墙都是利用了SPI的技术来实现对网络封包的截获处理.[当然也有结合NDIS及IMD驱动的,不再本贴范围内:)],也可以通过SPI技术实现无进程的DLL木马.这里Winsock2SPI的原理在这就不多说了,网上多得是.以下仅为我前段时间学习SPI技术时的写的一些代码,望大家一起来研究讨论.以下分别为wskfilter.dll及nfilter.exe的代码,编译成功后将两个文件放在同一目录下,CMD下运行nfilter.exe便可以加载自己的LSP(分层服务提供者)来截获相关WINS
2、OCK API的调用了.当然如何处理需要在wskfilter.dll中进行控制,在此不作详述.///////////////////////////////////////////////////////////////////////////////////////////wskfilter.dllbymiyagi@2007.5.21//////wskfilter.cpp:DefinestheentrypointfortheDLLapplication.//开发思路://// 1)每个DL
3、L都必须有一个入口点,故通过DllMain这个缺省函数做为入口函数。该函数负责// DLL的初始化与结束的工作;// 1.1)在DllMain中,通过GetModuleFileName获取到当前调用该DLL的进程名称,以备后需;// 1.2)分别定义枚举服务提供者函数GetProvider(),释放服务提供者函数FreeProvider();// // 2)通过g_NextProcTable中保存的下层服务提供者的函数列表,来Hook咸兴趣的函数,并将//
4、 Hook的函数进行自定义处理,即实现了Winsock的过滤及监控处理;//// 3)WSPStartup是LSP必须导出的函数。同时在创建DLL工程后,先向工程中添加一个.def文件。// 即模块定义文件,声明所有要导出的函数;// 3.1)判断WSPStartup函数是否被调用LSP(分层服务者)调用的;// 3.2)枚举各协议服务提供者,找到LSP下层协议服务提供者的WSAPROTOCOL_INFOW结构;// 3.3)通过以上遍历得到的下层服务提供者(现存放
5、于NextProtocolInfo中)的GUID来确定其DLL// 的路径;// 3.4)通过函数WSCGetProviderPath()获取及ExpandEnvironmentStrings()扩展来得到下层服务// 提供者的DLL;// 路径,该路径是包含了环境变量的;// 3.5)加载下层服务提供者,即加载其下载服务提供者的DLL;// 3.6)通过自定义的一个指向WSPSTARTUP函数指针,来启动下一层服务提供者;//
6、3.7)调用下层服务提供者的WSPStartup函数,调用成功后其中lpProcTable变量将在后期进行// Hook时经常用到;// 3.8)通过修改传递给下层服务提供者的函数列表,Hook相关WSP函数;// /////////////////////////////////////////////////////////////////////////////////////// #defineUNICODE#define_UNICODE#include7、k2.h>#include#include#include#include"Debug.h"#pragmacomment(lib,"Ws2_32.lib") WSPUPCALLTABLEg_UpCallTable; WSPPROC_TABLEg_NextProcTable; TCHARg_szCurrentApp[MAX_PATH]; BOOLAPIENTRYDllMain(HANDLEhModule, 8、 DWORD ul_reason_for_call, LPVOIDlpReserved ){ switch(ul_reason_for_call) { //获取调用wskfilter.dll的进程名称; caseDLL_PROCESS_ATTACH: { ::GetModuleFileName(NULL,g_szCurrentApp,MAX_PATH); } break; } returnTRUE;} //枚举各协议的服务
7、k2.h>#include#include#include#include"Debug.h"#pragmacomment(lib,"Ws2_32.lib") WSPUPCALLTABLEg_UpCallTable; WSPPROC_TABLEg_NextProcTable; TCHARg_szCurrentApp[MAX_PATH]; BOOLAPIENTRYDllMain(HANDLEhModule,
8、 DWORD ul_reason_for_call, LPVOIDlpReserved ){ switch(ul_reason_for_call) { //获取调用wskfilter.dll的进程名称; caseDLL_PROCESS_ATTACH: { ::GetModuleFileName(NULL,g_szCurrentApp,MAX_PATH); } break; } returnTRUE;} //枚举各协议的服务
此文档下载收益归作者所有