利用hook拦截封包原理

利用hook拦截封包原理

ID:14116026

大小:41.00 KB

页数:14页

时间:2018-07-26

利用hook拦截封包原理_第1页
利用hook拦截封包原理_第2页
利用hook拦截封包原理_第3页
利用hook拦截封包原理_第4页
利用hook拦截封包原理_第5页
资源描述:

《利用hook拦截封包原理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、利用HOOK拦截封包原理利用HOOK拦截封包原理截获API是个很有用的东西,比如你想分析一下别人的程序是怎样工作的。这里我介绍一下一种我自己试验通过的方法。首先,我们必须设法把自己的代码放到目标程序的进程空间里去。WindowsHook可以帮我们实现这一点。SetWindowsHookEx的声明如下:HHOOKSetWindowsHookEx(intidHook,//hooktypeHOOKPROClpfn,//hookprocedureHINSTANCEhMod,//handletoapplicationinstanceDWORDdwThreadId//threadidentifier

2、);具体的参数含义可以翻阅msdn,没有msdn可谓寸步难行。这里Hook本身的功能并不重要,我们使用它的目的仅仅只是为了能够让Windows把我们的代码植入别的进程里去。hookType我们任选一种即可,只要保证是目标程序肯定会调用到就行,这里我用的是WH_CALLWNDPROC。lpfn和hMod分别指向我们的钩子代码及其所在的dll,dwThreadId设为0,表示对所有系统内的线程都挂上这样一个hook,这样我们才能把代码放到别的进程里去。之后,我们的代码就已经进入了系统内的所有进程空间了。必须注意的是,我们只需要截获我们所关心的目标程序的调用,因此还必须区分一下进程号。我们自己

3、的钩子函数中,第一次运行将进行最重要的API重定向的工作。也就是通过将所需要截获的API的开头几个字节改为一个跳转指令,使其跳转到我们的API中来。这是最关键的部分。这里我想截三个调用,ws2_32.dll中的send和recv、user32.dll中的GetMessageA。DWORDdwCurrentPID=0;HHOOKhOldHook=NULL;DWORDpSend=0;DWORDpRecv=0;GETMESSAGEpGetMessage=NULL;BYTEbtNewBytes[8]={0x0B8,0x0,0x0,0x40,0x0,0x0FF,0x0E0,0};DWORDdwOl

4、dBytes[3][2];HANDLEhDebug=INVALID_HANDLE_value;LRESULTCALLBACKCallWndProc(intnCode,WPARAMwParam,LPARAMlParam){DWORDdwSize;DWORDdwPIDWatched;HMODULEhLib;if(dwCurrentPID==0){dwCurrentPID=GetCurrentProcessId();HWNDhwndMainHook;hwndMainHook=::FindWindow(0,"MainHook");dwPIDWatched=::SendMessage(hwndMa

5、inHook,(WM_USER+100),0,0);hOldHook=(HHOOK)::SendMessage(hwndMainHook,(WM_USER+101),0,0);if(dwCurrentPID==dwPIDWatched){hLib=LoadLibrary("ws2_32.dll");pSend=(DWORD)GetProcAddress(hLib,"send");pRecv=(DWORD)GetProcAddress(hLib,"recv");::ReadProcessMemory(INVALID_HANDLE_value,(void*)pSend,(void*)dwOl

6、dBytes[0],sizeof(DWORD)*2,&dwSize);*(DWORD*)(btNewBytes+1)=(DWORD)new_send;::WriteProcessMemory(INVALID_HANDLE_value,(void*)pSend,(void*)btNewBytes,sizeof(DWORD)*2,&dwSize);::ReadProcessMemory(INVALID_HANDLE_value,(void*)pRecv,(void*)dwOldBytes[1],sizeof(DWORD)*2,&dwSize);*(DWORD*)(btNewBytes+1)=

7、(DWORD)new_recv;::WriteProcessMemory(INVALID_HANDLE_value,(void*)pRecv,(void*)btNewBytes,sizeof(DWORD)*2,&dwSize);hLib=LoadLibrary("user32.dll");pGetMessage=(GETMESSAGE)GetProcAddress(hLib,"GetMessageA");::ReadProcessM

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。