首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

inline hook一点有关问题

2012-04-30 
inline hook一点问题今天在写R3下的inline hook的时候,想hookCreateProcessInternalW这个函数,反汇编得到

inline hook一点问题
今天在写R3下的inline hook的时候,想hookCreateProcessInternalW这个函数,反汇编得到这个函数的第一条指令是push指令,所以修改前5个字节,最后的程序使得能够执行到自己的钩子,但是在钩子中执行原来的CreateProcessInternalW的时候出问题了,程序崩溃。我的MyCreateProcessInternalW函数如下:

C/C++ code
BOOL WINAPI MyCreateProcessInternalW(    HANDLE hToken,    LPCTSTR lpApplicationName,     LPTSTR lpCommandLine,     LPSECURITY_ATTRIBUTES lpProcessAttributes,    LPSECURITY_ATTRIBUTES lpThreadAttributes,     BOOL bInheritHandles,     DWORD dwCreationFlags,    LPVOID lpEnvironment,     LPCTSTR lpCurrentDirectory,     LPSTARTUPINFO lpStartupInfo,     LPPROCESS_INFORMATION lpProcessInformation ,  PHANDLE hNewToken  ){      MessageBox(NULL,"MyCreateProcessInternalW","",MB_OK);      //恢复API头5个字节       if(!WriteProcessMemory( INVALID_HANDLE_VALUE, (void*)RealCreateProcessInternalW,(void*)OldBytes,5, NULL))        printf("write error!\n");     //调用正确函数[color=#FF0000],(这句程序崩溃) [/color]     BOOL Flag=(BOOL)(PFNCreateProcessInternalW)RealCreateProcessInternalW(hToken,lpApplicationName,        lpCommandLine,lpProcessAttributes,        lpThreadAttributes,bInheritHandles,        dwCreationFlags,lpEnvironment,        lpCurrentDirectory,lpStartupInfo,        lpProcessInformation,hNewToken);    printf("OK!\n");    //写入跳转语句,继续hook      WriteProcessMemory( INVALID_HANDLE_VALUE, (void *)RealCreateProcessInternalW,(void*)NewBytes,5, NULL);      return Flag;  }  

我的OldBytes,和NewBytes是这样获得的:
C/C++ code
    HMODULE hHand= LoadLibrary("Kernel32.dll");    RealCreateProcessInternalW=(PFNCreateProcessInternalW)GetProcAddress(hHand,"CreateProcessInternalW");    if(ReadProcessMemory(INVALID_HANDLE_VALUE,(void *)RealCreateProcessInternalW,OldBytes,5,NULL)==0)      {          printf("ReadProcessMemory error\n");          return;      }  

C/C++ code
*(DWORD*)(NewBytes + 1) = (DWORD)MyCreateProcessInternalW-(DWORD)RealCreateProcessInternalW-5; 

请写过inline API HOOK的大牛帮忙看一看。

[解决办法]
Ring 3下inline hook? 你知道在内核中修改cr0控制寄存器就可以随便写只读内存了,ring 3下没有这么大的权力。
[解决办法]
有问题的代码没发出来

热点排行