zoukankan      html  css  js  c++  java
  • HOOK IDT频繁蓝屏(Window 正确 HOOK IDT)

    环境 win7x64 Microsoft Windows [版本 6.1.7601]
    也是一个朋友 HOOK IDT 测试 问我IDT为啥老是蓝屏。结果是因为swapgs问题。 如果你知道swapgs作用。或者 在IDT swapgs起到的作用 就不用往下看了。

    给我朋友解释了 结果他还是不理解。。。所以写个文章吧。 希望可以帮到其他朋友

     我们先来分析下IDT的函数开发

       图1

        

       图2

        

        图3

        

          图1 是 KiDebugTrapOrFault 函数头内容 IDT 0x1

          图2 是 KiBreakpointTrap 函数头内容 IDT 0x3

          图3 是 KiPageFault 函数头内容 IDT 0x0E

          我们通过对比可以发现 函数头是一样的。

                   nt!KiPageFault:
        fffff800`03e77a00 55 push rbp
        fffff800`03e77a01 4881ec58010000 sub rsp,158h
        fffff800`03e77a08 488dac2480000000 lea rbp,[rsp+80h]
        fffff800`03e77a10 c645ab01 mov byte ptr [rbp-55h],1
        fffff800`03e77a14 488945b0 mov qword ptr [rbp-50h],rax
        fffff800`03e77a18 48894db8 mov qword ptr [rbp-48h],rcx
        fffff800`03e77a1c 488955c0 mov qword ptr [rbp-40h],rdx
        fffff800`03e77a20 4c8945c8 mov qword ptr [rbp-38h],r8
        fffff800`03e77a24 4c894dd0 mov qword ptr [rbp-30h],r9
        fffff800`03e77a28 4c8955d8 mov qword ptr [rbp-28h],r10
        fffff800`03e77a2c 4c895de0 mov qword ptr [rbp-20h],r11
        fffff800`03e77a30 f685f000000001 test byte ptr [rbp+0F0h],1   这里进行了判断   如果等于1 则跳转 不需要执行swapgs
        fffff800`03e77a37 7474 je nt!KiPageFault+0xad (fffff800`03e77aad)
        fffff800`03e77a39 0f01f8 swapgs

                  swapgs的作用是交换gs段基址 我们知道。在R3下 GS指向的是 TEB环境块(x86 是fs)   在R0下 GS指向 _KPCRB 当前CPU结构.

                  因此当R3触发了IDT中断的时候需要切换gs 才能继续执行。否则就会导致我们亲爱的 蓝大妈。 原理就是这样。 

                  那么我们HOOK IDT的时候。聪明的人应该已经想到 我们也需要使用函数头  下面是一个简单的 HOOK PageFault例子(IDT 0xE)

                  

    CODE
    DebugTrap proc
            push    rbp
            sub     rsp,158h
            lea     rbp,[rsp+80h]
            test    byte ptr [rbp+0F0h],1
            je LabelKernel
                swapgs
    LabelKernel:
    	     .......... //这里就是你自定义的一些代码
             test    byte ptr [rbp+0F0h],1
             je LabelKernelEnd
    	 swapgs
    LabelKernelEnd:
             add  rsp,158h
             pop rbp
    DebugTrap endp
    END
    

         好了。到此结束。。祝大家好运 Good Luck. 

             狂客原创,转载请注明。侵权必究 作者:狂客 QQ:214109721

  • 相关阅读:
    [JLOI2013]地形生成[组合计数]
    [Luogu1891]疯狂LCM[辗转相减法]
    [BZOJ3745][COCI2015]Norma[分治]
    [BZOJ4028][HAOI2015]公约数数列[分块+分析暴力]
    [BZOJ4476][JSOI2015]送礼物[分数规划+单调队列]
    【JZOJ4893】【NOIP2016提高A组集训第15场11.14】过河
    【JZOJ4890】【NOIP2016提高A组集训第14场11.12】随机游走
    【JZOJ4889】【NOIP2016提高A组集训第14场11.12】最长公共回文子序列
    【JZOJ4888】【NOIP2016提高A组集训第14场11.12】最近公共祖先
    【JZOJ4887】【NOIP2016提高A组集训第13场11.11】最大匹配
  • 原文地址:https://www.cnblogs.com/kuangke/p/9947295.html
Copyright © 2011-2022 走看看