首现可以通过OllyDbg把程序的通讯过程进行一次分析,得到一些基础的数据,也大概能看出来逻辑流向。
这里使用了OllySocketTrace这个插件,引用
“The socket operations currently supported are: WSASocket, WSAAccept, WSAConnect, WSARecv, WSARecvFrom, WSASend, WSASendTo, WSAAsyncSelect, WSAEventSelect, WSACloseEvent, listen, ioctlsocket, connect, bind, accept, socket, closesocket, shutdown, recv, recvfrom, send and sendto.”
基本上常用的Socket都能够被记录下来,下载地址: http://bbs.pediy.com/showthread.php?t=71334
插件有打Log的功能,这里随便加载了程序能够看出大概的一些方式。
现在想要完成加密数据包还原,但是现在需要调试WSASend函数,虽然有思路但是细节实践起来还是挺麻烦的,这里先把前期的工作完成一下。
WSASend->WSPSend->NtDeviceIoControlFile->AFDSend(Tdi Client)->TcpSendData(Tdi Server)->TdiSend->TcpSend->IPTransmit(Network Layer)->SendIPPacket->下面进入链路层
数据流具体是怎么进行组装,逐层往下发,这个过程并不care。
对于这个部分不管HOOK哪个函数,最核心是要能抓住原始数据,根据协议,去修改对应的数据,至于后续是如何完成先不考虑,先通过调试来了解这个原始数据吧。
看了看wsock32.dll,ws2_32.dll都被调用到,这里根据OD的跟踪,主要调用了ws2_32.dll里面的WSARecv,WSARecvFrom,WSASend,WSASendTo。
01.int WSAAPI WSASend (
02. SOCKET s,
03. LPWSABUF lpBuffers,
04. DWORD dwBufferCount,
05. LPDWORD lpNumberOfBytesSent,
06. int iFlag