首页
社区
课程
招聘
[求助]SSDT_HOOK函数NtGetContextThread
发表于: 2011-7-10 12:48 7290

[求助]SSDT_HOOK函数NtGetContextThread

2011-7-10 12:48
7290
SSDT_HOOK函数NtGetContextThread 直接返回STATUS_UNSUCCESSFUL 是不是会蓝屏错误的

我HOOk了下  蓝掉了  不知道是我程序问题还是 本身这个直接返回 STATUS_UNSUCCESSFUL 就

会蓝掉

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
2
贴代码看看呗
2011-7-10 13:05
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
void ReGetContextThread();       
ULONG NtGetContextThreadAddr;
typedef NTSTATUS (WINAPI * _NtGetContextThreadAddr)(HANDLE hThread,PCONTEXT pContext);
_NtGetContextThreadAddr MyNtGetContextThread;

__declspec(naked) void CloseProtect()
{
        _asm
        {
                cli
                push eax
                mov  eax,cr0
                and  eax,not 10000h                           
                      mov  cr0,eax
                pop  eax
                retn
        }
       
}

__declspec(naked) void ReProtect()
{
        _asm
        {
                        push eax
                        mov  eax,cr0
                        or   eax,10000h   
                        mov  cr0,eax
                        pop  eax
                        sti  
                        retn
        }
}

__declspec (naked) NTSTATUS uNtGetConThread(HANDLE hThread,PCONTEXT pContext)
{
        __asm jmp NtGetContextThreadAddr
}

NTSTATUS WINAPI MNtGetContextThread(HANDLE hThread,PCONTEXT pContext)
{
        if(strcmp((char *)((ULONG)pEp+0x174),"dnf.exe")==0)
        {
                pEp=PsGetCurrentProcess();
                KdPrint(("%s 访问NtGetContextThread  \n",(ULONG)pEp+0x174));
               
                return STATUS_UNSUCCESSFUL;
        }

        return uNtGetConThread(hThread,pContext);
}

void ReGetContextThread()
{
        //获取SSDT表中  编号 85
        NtGetContextThreadAddr=*((ULONG *)((ULONG)(KeServiceDescriptorTable->ServiceTableBase)+85*4));
       
        //++++++++++执行SSDT HOOK ++++++++++++
        //获取函数的SSDT地址
        SSDT_ADDR=(ULONG)(KeServiceDescriptorTable->ServiceTableBase)+85*4;
       
        MyNtGetContextThread=MNtGetContextThread;
       
        //去保护
        CloseProtect();
       
        *((ULONG *)SSDT_ADDR)=(ULONG)MyNtGetContextThread;
       
        //恢复保护
        ReProtect();
}
2011-7-10 13:49
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
4
dnf.exe  是不是游戏检测到什么
2011-7-10 19:29
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
硬件断点。。。
2011-7-10 20:12
0
游客
登录 | 注册 方可回帖
返回
//