C++ Winsock recv hook 走弯路
C++ Winsock recv hook Detours
我想写一个.dll。我的目标应用程序是一个游戏并使用 winsock。 .dll 应该在控制台中写入游戏(目标应用程序)通过 winsock 中的 recv 函数接收的所有内容。我在 Visual Studio 2012 Professional 中创建了一个 C++ Win32 控制台应用程序,选择了 .dll 和空项目。
我的代码在main.cpp
#include <Windows.h>
#include <detours.h>
#include <winsock2.h>
#include <iostream>
using namespace std;
#pragma comment (lib, "detours")
typedef int (WINAPI *MyRecv) (SOCKET, char, int, int);
MyRecv OrigRecv = NULL;
int WINAPI RecvDetour(SOCKET s, char *buf, int len, int flags)
{
cout << *buf << " - " << len << endl;
return OrigRecv(s, *buf, len, flags);
}
BOOL APIENTRY DllMain(HINSTANCE module, DWORD Reason, LPVOID reserved)
{
switch (Reason)
{
case DLL_PROCESS_ATTACH:
cout << "Starting.." << endl;
OrigRecv = (MyRecv)DetourFunction((PBYTE)recv, (PBYTE)RecvDetour);
break;
case DLL_PROCESS_DETACH:
break;
}
}
我无法编译它。有一些错误。有人看到此代码中的错误吗?
非常感谢:)
MyRecv
被声明为错误。第二个参数需要是 char*
而不是 char
.
此外,您的绕道在接收缓冲区被填充之前输出它。您需要先调用原始 recv()
函数,然后才能输出它接收到的内容。另外,请务必考虑到数据不会以空值终止。
typedef int (WINAPI *MyRecv) (SOCKET, char*, int, int);
MyRecv OrigRecv = NULL;
int WINAPI RecvDetour(SOCKET s, char *buf, int len, int flags)
{
int ret = OrigRecv(s, buf, len, flags);
if (ret > 0)
cout.write(buf, ret) << " - " << ret << endl;
}
查看之前的问题:
Detour hook send/recv winsock
我想写一个.dll。我的目标应用程序是一个游戏并使用 winsock。 .dll 应该在控制台中写入游戏(目标应用程序)通过 winsock 中的 recv 函数接收的所有内容。我在 Visual Studio 2012 Professional 中创建了一个 C++ Win32 控制台应用程序,选择了 .dll 和空项目。
我的代码在main.cpp
#include <Windows.h>
#include <detours.h>
#include <winsock2.h>
#include <iostream>
using namespace std;
#pragma comment (lib, "detours")
typedef int (WINAPI *MyRecv) (SOCKET, char, int, int);
MyRecv OrigRecv = NULL;
int WINAPI RecvDetour(SOCKET s, char *buf, int len, int flags)
{
cout << *buf << " - " << len << endl;
return OrigRecv(s, *buf, len, flags);
}
BOOL APIENTRY DllMain(HINSTANCE module, DWORD Reason, LPVOID reserved)
{
switch (Reason)
{
case DLL_PROCESS_ATTACH:
cout << "Starting.." << endl;
OrigRecv = (MyRecv)DetourFunction((PBYTE)recv, (PBYTE)RecvDetour);
break;
case DLL_PROCESS_DETACH:
break;
}
}
我无法编译它。有一些错误。有人看到此代码中的错误吗?
非常感谢:)
MyRecv
被声明为错误。第二个参数需要是 char*
而不是 char
.
此外,您的绕道在接收缓冲区被填充之前输出它。您需要先调用原始 recv()
函数,然后才能输出它接收到的内容。另外,请务必考虑到数据不会以空值终止。
typedef int (WINAPI *MyRecv) (SOCKET, char*, int, int);
MyRecv OrigRecv = NULL;
int WINAPI RecvDetour(SOCKET s, char *buf, int len, int flags)
{
int ret = OrigRecv(s, buf, len, flags);
if (ret > 0)
cout.write(buf, ret) << " - " << ret << endl;
}
查看之前的问题:
Detour hook send/recv winsock