[求助]自写函数 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去了