http://www.cnblogs.com/Jesses/articles/1636340.html
是按照这个方法,里面提出了导出函数的概念
谁解释下啊
原理是:用我自己的函数替换掉recv ,然后 在我的函数里跳去执行原函数
于是内联了下面几句汇编,但是崩溃?
对了,问下 recv 反汇编后,前面5字节是mov edi,edi;
push ebp;
mov ebp,esp;
这几句吗?不知道有没用对?但是不要这几句也不行
说什么什么 read 什么的 ,崩溃
int WINAPI hook_recv(SOCKET s, char FAR *buf, int len, int flags)
{
_asm
{
mov edi,edi;
push ebp;
mov ebp,esp;
mov eax,recv;
add eax,5;
jmp eax ;
}
return 0;
}
相关:
CULHook g_recv("wsock32.dll", "recv", (PROC)hook_recv);
CULHook::CULHook(LPSTR pszModName, LPSTR pszFuncName, PROC pfnHook)
{
bNewByte[0] = 0xE9 ;
LPVOID pNewFunEntry = (LPVOID)pfnHook ;
m_hModule = ::LoadLibrary(pszModName);
if(m_hModule == NULL)
{
m_pfnOrig = NULL;
return;
}
LPVOID pOldFunEntry = ::GetProcAddress(m_hModule, pszFuncName);
bNewByte[0] = 0xE9 ;
*((PDWORD)(&(bNewByte[1]))) = (DWORD)pNewFunEntry - (DWORD)pOldFunEntry - 5 ;
DWORD dwProtect, dwWriteByte, dwReadByte ;
VirtualProtect ( (LPVOID)pOldFunEntry, 5, PAGE_READWRITE, &dwProtect );
ReadProcessMemory ( GetCurrentProcess(), (LPVOID)pOldFunEntry, bOldByte, 5, &dwReadByte ) ;
WriteProcessMemory ( GetCurrentProcess(), (LPVOID)pOldFunEntry, bNewByte, 5, &dwWriteByte ) ;
VirtualProtect ( (LPVOID)pOldFunEntry, 5, dwProtect, NULL ) ;
}