看流星社区

 找回密码
 注册账号
查看: 2090|回复: 0

WIN7X64自定义硬断

[复制链接]

该用户从未签到

发表于 2017-6-3 11:03:33 | 显示全部楼层 |阅读模式
我只是 截了 我代码中的 关键片段~至于 详细的 你们自己想
控制是否 恢复DR的是 DR7和dbgactive这两个 或者patch相关字节~
VOID T_KiRestoreDebugRegisterState(){

    PEPROCESS Process=NULL;
    PETHREAD Thread=NULL;
    PPROCESS_List PlIST = NULL;;
    PTHREAD_dr_List TList = NULL;
    ULONG64 UDR = NULL;
    PLARGE_INTEGER PDR = &UDR;
   
    Thread = PsGetCurrentThread();
    if (Thread!=NULL)
    {
        Process = IoThreadToProcess(Thread);



        if (Process != NULL){

            PlIST = Dr_FindProcessList(Process);
            if (PlIST != NULL)
            {

                TList = Dr_FindThreadContextByThreadList(PlIST, Thread);
                if (TList != NULL)
                {
                    PDR->LowPart = TList->Dr0;
                    PDR->HighPart = 0x00000000;
                    __writedr(0, UDR);
                  
                    PDR->LowPart = TList->Dr1;
                    PDR->HighPart = 0x00000000;
                    __writedr(1, UDR);
                  
                    PDR->LowPart = TList->Dr2;
                    PDR->HighPart = 0x00000000;
                    __writedr(2, UDR);

                    PDR->LowPart = TList->Dr3;
                    PDR->HighPart = 0x00000000;
                    __writedr(3, UDR);

                    PDR->LowPart = TList->Dr6;
                    PDR->HighPart = 0x00000000;
                    __writedr(6, UDR);

                    PDR->LowPart = TList->Dr7;
                    PDR->HighPart = 0x00000000;
                    __writedr(7, UDR);
                }


            }

                }


    }




   
    return 0;
}



if (contex->Dr7 != NULL)
                {
                    *(UCHAR*)(Thread + 0x3) = 0x40;

                }

                mycontex.Dr0 = contex->Dr0;
                mycontex.Dr1 = contex->Dr1;
                mycontex.Dr2 = contex->Dr2;
                mycontex.Dr3 = contex->Dr3;
                mycontex.Dr6 = contex->Dr6;
                mycontex.Dr7 = contex->Dr7;
                mycontex.EFlags = contex->EFlags;
                contex->Dr0 = ((PLARGE_INTEGER)(&pframe->Dr0))->LowPart;
                contex->Dr1 = ((PLARGE_INTEGER)(&pframe->Dr1))->LowPart;
                contex->Dr2 = ((PLARGE_INTEGER)(&pframe->Dr2))->LowPart;
                contex->Dr3 = ((PLARGE_INTEGER)(&pframe->Dr3))->LowPart;
                contex->Dr6 = ((PLARGE_INTEGER)(&pframe->Dr6))->LowPart;
            //    contex->Dr7 = ((PLARGE_INTEGER)(&pframe->Dr7))->LowPart;
            //    contex->EFlags = pframe->EFlags;



实现 内核切用户层恢复DR
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-19 17:23

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表