DLL劫持三:inline hook JMP实例 (UDP recvfrom)
2013-08-30 17:34
211 查看
核心代码从网上找的,但原始函数调用一直有问,经过分析 整理并测试成功。
以上代码在进程内调用有效,也支持进程内DLL方式,实际调用时使用代码
inhook("Ws2_32.dll","recvfrom",(DWORD) Mine_RecvFrom);
就可以了,DLL的话在DllMain中直接加载。
#include <stdio.h> #include<windows.h> #pragma comment( lib, "Ws2_32.lib" ) DWORD OldProtect2; byte pData[10]; //保留原始函数的调用 FARPROC FunAddr; //生成新的函数调用 typedef int ( WINAPI RecvFromFN)( SOCKET s, char *buf, int len, int flags, sockaddr *from, int *fromlen); RecvFromFN* pfnOrigRecvFrom ; void inhook(char* path,char* FunctionName,DWORD NewAddr) { if(FunAddr!=0) return ; HMODULE ModuleHandle= LoadLibraryA(path); FunAddr = GetProcAddress(ModuleHandle,FunctionName); VirtualProtect(FunAddr,5,PAGE_EXECUTE_READWRITE,&OldProtect); ZeroMemory(pData,10); RtlMoveMemory(pData,FunAddr,5); long b; b=NewAddr-((long)FunAddr+5); byte a[5]; a[0]=0xE9; RtlMoveMemory(&a[1],&b,4); WriteProcessMemory(GetCurrentProcess(),FunAddr,a,5,NULL); pData[5]=0xE9; pData[6]=0; pData[7]=0; pData[8]=0; pData[9]=0; b=(long)FunAddr+5-(long)(pData+10); WriteProcessMemory(GetCurrentProcess(),pData+6,&b,4,NULL); FreeLibrary(ModuleHandle); //下面这两行用于调用原始函数 pfnOrigRecvFrom = (RecvFromFN*) (DWORD) (pData); VirtualProtect(pfnOrigRecvFrom,10,PAGE_EXECUTE_READWRITE,&OldProtect2); } void unhook(void) { if(FunAddr==0) return ; WriteProcessMemory(GetCurrentProcess(),FunAddr,pData,5,NULL); VirtualProtect(FunAddr,5,OldProtect,NULL); FunAddr=0; ZeroMemory(pData,10); VirtualProtect(pfnOrigRecvFrom,10,OldProtect2,NULL); //恢复原始函数指针 } int WINAPI Mine_RecvFrom(SOCKET s, char *buf, int len, int flags, sockaddr *from, int *fromlen) { int tmpRet = pfnOrigRecvFrom(s,buf,len,flags,from,fromlen); sockaddr_in * pSin = (sockaddr_in *) from; //显示接收数据长度,来源IP和端口 fprintf(stdout,"Recv Data Size:%d From:%s:%d.\n",tmpRet, inet_ntoa(pSin->sin_addr),ntohs(pSin->sin_port)); return tmpRet; }
以上代码在进程内调用有效,也支持进程内DLL方式,实际调用时使用代码
inhook("Ws2_32.dll","recvfrom",(DWORD) Mine_RecvFrom);
就可以了,DLL的话在DllMain中直接加载。
相关文章推荐
- ring3 inline hook例子
- SSDT Hook的妙用-对抗ring0 inline hook
- SSDT Hook的妙用-对抗ring0 inline hook
- Inline hook ImmGetCompositionStringW获取中文输入
- 过XX保护之 InLine Hook
- Windows内核API HOOK 之 Inline Hook
- IAT HOOK、EAT HOOK和Inline Hook
- Inline Hook(ring3)的简单C++实现方法
- SSDT Hook的妙用-对抗ring0 inline hook
- 一个基于xposed和inline hook的一代壳脱壳工具
- Inline hook ImmGetCompositionStringW获取中文输入
- IAT HOOK、EAT HOOK和Inline Hook
- Android Arm Inline Hook
- inline hook
- Inline hook ImmGetCompositionStringW获取中文输入
- 2017/4/22inlinehook学习
- inline hook
- 360内核 inline Hook 分析
- Android Arm Inline Hook
- Windows下Hook API技术 inline hook