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

[]自写函数 HOOK NtOpenProcess 和 NtOpenTread 蓝屏的几个小问题

2012-09-04 
[求助]自写函数 HOOK NtOpenProcess 和 NtOpenTread 蓝屏的几个问题在TP的HOOK NtOpenProcess前直接跳到自

[求助]自写函数 HOOK NtOpenProcess 和 NtOpenTread 蓝屏的几个问题
在TP的HOOK NtOpenProcess前 直接跳到自己写的函数判断 这样写加载了以后 用OD附加的时候 什么进程都看不到了 


代码:

C/C++ code
VOID _declspec(naked) MyNtOpenProcess(){    processEPROCESS=IoGetCurrentProcess();//获得调用者的EPROCESS  RtlInitAnsiString(&p_str1,(PCSZ)processEPROCESS+0x174);//将调用者的进程名保存到str1里  RtlInitAnsiString(&p_str2,DNF_EXE);//将DNF进程名保存到str2里  if(RtlCompareString(&p_str1,&p_str2,true)==0)  {    __asm    {      pushad      pushfd      push dword ptr [ebp-38h]      push dword ptr [ebp-24h]      push p_ReturnAddress      mov  eax,p_ReturnAddress      jmp  eax      popad      popfd    }  }   else   {     __asm     {      pushad      pushfd       push dword ptr [ebp-38h]       push dword ptr [ebp-24h]       push p_ReturnAddress       mov  eax,ObOpenObjectByPointerAddress       jmp  eax      popad      popfd      }   }}



这个加载了以后 打开OD就蓝屏

代码:
C/C++ code
VOID _declspec(naked) MyNtOpenThread(){  pEPROCESS=IoGetCurrentProcess();//获得调用者的EPROCESS  RtlInitAnsiString(&str1,(PCSZ)pEPROCESS+0x174);//将调用者的进程名保存到str1里  RtlInitAnsiString(&str2,DNF_EXE);//将DNF进程名保存到str2里  if(RtlCompareString(&str1,&str2,true)==0)  {    __asm    {        pushad        pushfd        push dword ptr [ebp-38h]        push dword ptr [ebp-24h]        push p_ReturnAddress_Thread        mov  eax,p_ReturnAddress_Thread        jmp  eax        popad        popfd    }  }  else  {    __asm    {        pushad        pushfd        push dword ptr [ebp-38h]        push dword ptr [ebp-24h]        push p_ReturnAddress_Thread        mov  eax,ObOpenObjectByPointerAddress_Thread        jmp  eax        popad        popfd    }  }}




这个两个只要是加载以后再卸载 一定蓝屏 卸载蓝屏是不是因为卸载的时候没有还原之前修改的代码

但是为什么跳到自己的函数里之后,OD什么进程都看不到了那? 而且HOOK NtOpenThread之后,开OD就蓝屏 


卸载的时候把之前修改的代码改回去应该就可以了吧?

但是为什么OD什么进程都看不到了那?

[解决办法]
你钩的是NtOpenProcess
为什么后面跳到ObOpenObjectByPointerAddress去了

热点排行