没事去看雪 发表于 2013-5-9 17:47:53

TP双击调试

1: 先用VirtualKD连接虚拟机,然后进入游戏

2: kd> bp KdDisableDebugger         (对KdDisableDebugger下断)

3: kd> eb KdDisableDebugger 0xc3                (直接修改函数头,让其返回,按F10)

返回后结果:
ee0abfca a16ccb0bee      mov   eax,dword ptr
ee0abfcf 8b0d68cb0bee    mov   ecx,dword ptr
ee0abfd5 56            push    esi
ee0abfd6 8b7028          mov   esi,dword ptr
ee0abfd9 57            push    edi
ee0abfda 8b782c          mov   edi,dword ptr
ee0abfdd 33f1            xor   esi,ecx
ee0abfdf 33f9            xor   edi,ecx
ee0abfe1 eb4b            jmp   TesSafe+0x702e (ee0ac02e)
ee0abfe3 803d6d820bee00cmp   byte ptr ,0
ee0abfea 7516            jne   TesSafe+0x7002 (ee0ac002)
ee0abfec 688a4d6e43      push    436E4D8Ah
ee0abff1 6876426e57      push    576E4276h
ee0abff6 e873caffff      call    TesSafe+0x3a6e (ee0a8a6e)
ee0abffb c6056d820bee01mov   byte ptr ,1
ee0ac002 85ff            test    edi,edi
ee0ac004 7404            je      TesSafe+0x700a (ee0ac00a)
ee0ac006 ffd7            call    edi                        //edi=KdDisableDebugger
ee0ac008 eb24            jmp   TesSafe+0x702e (ee0ac02e)       //返回后直接跳转
ee0ac00a 803d6e820bee00cmp   byte ptr ,0
ee0ac011 751b            jne   TesSafe+0x702e (ee0ac02e)
ee0ac013 6812010000      push    112h
ee0ac018 68e64d6e43      push    436E4DE6h
ee0ac01d 6873426e57      push    576E4273h
ee0ac022 e865caffff      call    TesSafe+0x3a8c (ee0a8a8c)
ee0ac027 c6056e820bee01mov   byte ptr ,1
ee0ac02e 803e00          cmp   byte ptr ,0                            //跳转至此,判断 >= 0   (esi为KdDebuggerEnabled可通过dd   KdDebuggerEnabled查看)   
ee0ac031 75b0            jne   TesSafe+0x6fe3 (ee0abfe3)          //第一处需要修改的地方 改为je
ee0ac033 5f            pop   edi
ee0ac034 5e            pop   esi
ee0ac035 c3            ret



4.kd> eb TesSafe+0x7031 0x74

5.kd> g
    还会断下,断下之后按F10

ee084112 a16c4b09ee             mov   eax,dword ptr
ee084117 8b402c                     mov   eax,dword ptr
ee08411a 3305684b09ee      xor   eax,dword ptr
ee084120 7404                        je      TesSafe+0x7126 (ee084126)
ee084122 ffd0                        call    eax                              //call KdDisableDebugger
ee084124 eb24                      jmp   TesSafe+0x714a (ee08414a)
ee084126 803d720209ee00cmp   byte ptr ,0
ee08412d 751b                  jne   TesSafe+0x714a (ee08414a)
ee08412f 6882010000          push    182h
ee084134 68e64d6e43         push    436E4DE6h
ee084139 6873426e57         push    576E4273h
ee08413e e849c9ffff            call    TesSafe+0x3a8c (ee080a8c)
ee084143 c605720209ee01mov   byte ptr ,1
ee08414a 8b0d640209ee    mov   ecx,dword ptr
ee084150 85c9                  test    ecx,ecx                                                                            //u ecx = KiDebugRoutine
ee084152 740f                  je      TesSafe+0x7163 (ee084163)
ee084154 a1680209ee      mov   eax,dword ptr
ee084159 85c0                  test    eax,eax                                                                            //u eax = KdpStub
ee08415b 7406                  je      TesSafe+0x7163 (ee084163)       //第二处需要修改的地方 改为jmp
ee08415d 3901                  cmp   dword ptr ,eax


ee084163 c3                      ret


伪代码
if(KiDebugRoutine != null && KdpStub != null)
{
    KiDebugRoutine= KdpStub;      //正常情况下 KiDebugRoutine= KdpTrap
}

6.kd> eb TesSafe+0x715f 0xeb






总结(使用下面3条命令就行):
eb KdDisableDebugger 0xc3
eb TesSafe+0x7031 0x74
eb TesSafe+0x715f 0xeb




346022142 发表于 2013-5-11 22:07:06

用VirtualKD 本来就能双机调试了为何还要去修改呢   亲   
页: [1]
查看完整版本: TP双击调试