[原创]驱动收发网络包
驱动实现收发网络包
功能:
1. 目前仅实现了tcp收发网络包,且不支持针对socket的各种属性配置。
2. 目前仅实现了客户端功能,服务器功能没有实现。
3. 虽然测试了xp,win7 32, win7 64 3个平台,但一些情况下会出现bug。
4. 后文会详细讲原理,虽然有这么多问题,但是如果想要完善它,剩下的只是体力活。
渔:
1. 通过阅读reactos的socket connect accept bind recv close等c语言网络接口的实现,发现所有的实现都是对设备\device\afd\Endpoint
操作码的再封装。于是猜想可以在驱动里面调用ZwCreateFile, ZwDeviceIoControl模拟对设备发送功能码的方式来实现网络操作。
2. r3写了一个HookDll(这个工程没有给源码,原因是里面的代码有很多带个人信息的注释,自己写一个也不难),Hook了ws2_32.dll里面的socket connect accept bind recv close等函数,以及ntdll里面的NtCreateFile, NtDeviceIoControl, NtCreateEvent。这样就能知道每一个
c接口的函数对应的nt函数的实现,并且将对应关系输出到txt。对应关系见附件win732.txt win764.txt xpsp3.txt。
3. 用2中得到的信息在驱动里面调用Zw函数就可以实现驱动收发网络包了。
4. 遇到bug时候的解决办法,当某一种c接口调用序列在驱动里面不能达到同样的效果的时候,用2中的HookDll抓捕这个序列的Nt函数序列(同时记录参数和返回值),驱动中照这些参数和返回值调用Zw接口即可。
5. 如果有些参数不明白来历,可以参考reactos;如果还没有,只有ida + f5了...
鱼:
代码见附件 nethacker.rar
PS:
这个工程有空会继续维护,争取做成一个可用,稳定,多系统支持的项目。欢迎给我报bug:646535763
