WSARecv Detour钩子密码
WSARecv Detour hook crypt
我正在为好友游戏服务器编写一个数据包加密。客户端使用ws2_32 recv/send,但服务器使用WSARecv/WSASend。
我已经设法加密/解密了send/recv/WSASend,但WSARecv似乎不可能。我使用了与recv相同的方法,但似乎不起作用。
int WINAPI MyWSARecv(SOCKET socket, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags,LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
{
LPWSABUF buffers = lpBuffers;
int ret = pWSARecv(socket, buffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine);
cryptPacket(buffers->buf, buffers->len);
lpBuffers = buffers;
return ret;
}
任何想法都将不胜感激。
需要考虑的一些事情。
在调用cryptPacket
函数之前,实际上并没有检查pWASRecv
的返回值。在对迂回挂钩如何使用套接字代码做出任何其他假设之前,您需要先从该修复程序开始。如果调用指示错误,则可能没有很好地定义buffers->len
将是什么或这些缓冲区中将是什么。
此外,您可能会假设套接字已初始化为同步的。如果套接字是为重叠I/O初始化的,那么lpOverlapped
和lpCompletionRoutine
参数将变得非常相关。您可能需要挂接完成例程或WSAGetOverlappedResult
来实际截取套接字数据。
最后,请允许我提出另一种办法。运行一个"代理套接字",而不是试图"绕过"套接字API调用。也就是说,当创建服务器套接字时(通过对"套接字"的调用),您将其更改为在其他端口上侦听。然后,您创建一个单独的侦听套接字,在原始端口上进行侦听。当传入连接进入您的套接字时,你可以通过一个单独的"代理"连接到游戏服务器正在监听的实际端口。你可以在客户端套接字上有一个只调用send
和recv
的专用线程,根据需要加密/解密数据。
相关文章:
- c++中的oop(密码生成)
- 密码登录程序将永远循环并显示不正确的结果
- OpenSSL没有共享密码
- Cryptopp:获取密码输入的填充字符串
- 密码长度验证 (c++)
- C++ win32 如何使密码字段可选并启用复制和粘贴?
- 仿射密码解密,输出大小写不同
- 替换密码:哪一个?
- 无法使用 openssl 服务器,因为密码已过时...什么的...ERR_SSL_VERSION_OR_CIPHER_MISMATCH
- 如何使用 c++ 在 sqlite3 中打开受密码保护的数据库?
- 根据用户名和密码 Qt C++重新访问数据库值
- C++密码问题
- 无法在 Cocos2dx 中使用受密码保护的 zip 文件
- 如何使用librdkafka设置明文协议(无SASL)的用户名和密码?
- 如何将凯撒密码的元素从字符串更改为字符串
- 如何在C++的凯撒密码程序中包含空格?
- 运行密钥密码解密知道密钥?
- 如何在 c++ 中将密码和用户名保存到 .txt 文件中.如果用户尝试登录,我仍然希望能够检索它们
- 当PSO细粒度策略对使用AdsGetObject MSDN API的Windows操作系统生效时,如何获取用户密码到期日
- WSARecv Detour钩子密码