主题:请教高手!HOOK API 问题!!!!!!
这段代码是哪里有问题!!,收发数椐包总是不正常,,,
Byte dwOldBytes[2][2]//原来的API首字节
Byte btNewBytes[8]//指令代码
pSend pRecv API地址
//''''''
int _stdcall WSAAPI Mysend(IN SOCKET s,IN const char FAR * buf,IN int len,IN int flags)
{ DWORD dwSize;
int sendReturn;
//发送处理
.................略
................
::WriteProcessMemory(hProcess,(void *)pSend, (void *)dwOldBytes[0], sizeof(DWORD)*2, &dwSize ); //写入原来的地址
sendReturn= send(s, buf,len,flags);//这里,发不出去!????????
::WriteProcessMemory( hProcess, (void *)pSend, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize ); //写入我的函数地址
return(sendReturn);
}
//---------------------------------------------------------------------------
int _stdcall WSAAPI Myrecv(IN SOCKET s,OUT char FAR * buf,IN int len,IN int flags)
{ DWORD dwSize;
int recvReturn;
::WriteProcessMemory(hProcess,(void *)pRecv, (void *)dwOldBytes[1], sizeof(DWORD)*2, &dwSize );//写入原来的地址
recvReturn= recv(s, buf,len,flags);//这里,收也有问题!????????
::WriteProcessMemory( hProcess, (void *)pRecv, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize );//写入我的函数地址
//收包处理。。
.................略
................
return(recvReturn);
}
BOOL HookAPI()
{ HINSTANCE hModule;
DWORD dwIdOld;
hProcess = GetCurrentProcess();
hModule = LoadLibrary("WS2_32.dll");
if (hModule != 0)
{
pSend = (DWORD)GetProcAddress( hModule, "send" );
pRecv = (DWORD)GetProcAddress( hModule, "recv" );
::ReadProcessMemory( hProcess, (void *)pSend, (void *)dwOldBytes[0], sizeof(DWORD)*2, &dwSize );
*(DWORD *)( btNewBytes + 1 ) = (DWORD)Mysend; //跳转指令
::WriteProcessMemory( hProcess, (void *)pSend, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize );
::ReadProcessMemory( hProcess, (void *)pRecv, (void *)dwOldBytes[1], sizeof(DWORD)*2, &dwSize );
*(DWORD *)( btNewBytes + 1 ) = (DWORD)Myrecv; //跳转指令
::WriteProcessMemory( hProcess, (void *)pRecv, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize );
FreeLibrary(hModule);
}
return(true);
}
Byte dwOldBytes[2][2]//原来的API首字节
Byte btNewBytes[8]//指令代码
pSend pRecv API地址
//''''''
int _stdcall WSAAPI Mysend(IN SOCKET s,IN const char FAR * buf,IN int len,IN int flags)
{ DWORD dwSize;
int sendReturn;
//发送处理
.................略
................
::WriteProcessMemory(hProcess,(void *)pSend, (void *)dwOldBytes[0], sizeof(DWORD)*2, &dwSize ); //写入原来的地址
sendReturn= send(s, buf,len,flags);//这里,发不出去!????????
::WriteProcessMemory( hProcess, (void *)pSend, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize ); //写入我的函数地址
return(sendReturn);
}
//---------------------------------------------------------------------------
int _stdcall WSAAPI Myrecv(IN SOCKET s,OUT char FAR * buf,IN int len,IN int flags)
{ DWORD dwSize;
int recvReturn;
::WriteProcessMemory(hProcess,(void *)pRecv, (void *)dwOldBytes[1], sizeof(DWORD)*2, &dwSize );//写入原来的地址
recvReturn= recv(s, buf,len,flags);//这里,收也有问题!????????
::WriteProcessMemory( hProcess, (void *)pRecv, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize );//写入我的函数地址
//收包处理。。
.................略
................
return(recvReturn);
}
BOOL HookAPI()
{ HINSTANCE hModule;
DWORD dwIdOld;
hProcess = GetCurrentProcess();
hModule = LoadLibrary("WS2_32.dll");
if (hModule != 0)
{
pSend = (DWORD)GetProcAddress( hModule, "send" );
pRecv = (DWORD)GetProcAddress( hModule, "recv" );
::ReadProcessMemory( hProcess, (void *)pSend, (void *)dwOldBytes[0], sizeof(DWORD)*2, &dwSize );
*(DWORD *)( btNewBytes + 1 ) = (DWORD)Mysend; //跳转指令
::WriteProcessMemory( hProcess, (void *)pSend, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize );
::ReadProcessMemory( hProcess, (void *)pRecv, (void *)dwOldBytes[1], sizeof(DWORD)*2, &dwSize );
*(DWORD *)( btNewBytes + 1 ) = (DWORD)Myrecv; //跳转指令
::WriteProcessMemory( hProcess, (void *)pRecv, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize );
FreeLibrary(hModule);
}
return(true);
}