|
作者:Tesla.Angela
WINDOWS下进行网络通信无非就是使用WS2_32.DLL里的那一套函数,只不过在用户态下进行网络通信很容易被各种防火墙和HIPS拦截。而且各种ARK工具能轻易看出进程打开的端口,如果一个进程总是通过一个不知名的端口连接到一个或几个固定的IP,非常容易引起怀疑。我们的选择有两条路:1.通过HOOK来隐藏端口;2.直接把网络通信模板移至内核。今天我要讲的是方案2。在内核里进行网络连接,ARK看到的通信进程是SYSTEM,HIPS和防火墙一般也不会阻止SYSTEM进程的网络通信。
WINDOWS网络通信的模型目前有两种,一直是TDI,一种是WSK。前者从WIN2000就开始有了,但到了VISTA出现之后,微软说要废除它。第二种是VISTA之后出现的新模型,也是微软现在大力推荐使用的。考虑到NT5的用户数量大,而且TDI到现在(WIN8.1)还能使用。所以今天讲的是基于TDI的网络通信。
WINDOWS的网络通信模型很复杂,我第一次看的时候看的头晕脑胀的,但用简单的流程图来说就是:SOCKET_API -> NtDeviceIoControlFile -> AFD.SYS -> TDI.SYS -> TCPIP.SYS -> NDIS.SYS -> 网卡小端口驱动 -> HAL.DLL(直接IO)。当然,这个流程图是大大简化的,经过的驱动远远不止这么几个。如果要了解详情,推荐看《WINDOWS INTERNALS》。今天我讲的内核层网络通信,可以理解为直接发IRP给TDI.SYS进行网络通信。
使用方法:先打开EXE,然后用任意工具加载SYS,EXE就会接收到从驱动里传来的字符串FUCK。同时DEBUGVIEW会输出从EXE传入的字符串TEST。注意事项:运行EXE的机器和加载SYS的机器可以不是同一台,只需要把SYS的连接目标(127.0.0.1)改为EXE所在机器的IP即可。换句话说:EXE是服务端,SYS是客户端。最后声明:源码来自CheatEngine,有修改。
|
|