找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 6136|回复: 3

WIN7X64定位PsTerminateProcess

[复制链接]

78

主题

190

回帖

9

精华

贵宾会员

积分
15605
发表于 2015-8-1 21:09:34 | 显示全部楼层 |阅读模式
大家对PspTerminateProcess这玩意不陌生吧,这玩意在pjf的《进程终止的内幕》提到过。而搜索PspTerminateProcess的方法我觉得很恶心人,其实根本不用那么麻烦,先搞到NtTerminateJobObject,找到PspTerminateAllProcessesInJob,然后就可以找到PspTerminateProcess了,如图所示:
P1.PNG
P2.PNG
这并不是本文的重点,重点是:在x64下,没有名为PspTerminateProcess的函数!当输入了uf nt!PspTerminateProcess指令后,WinDbg的输出显示不能解析指令!
  1. lkd> uf nt!PspTerminateProcess
  2. Couldn't resolve error at 'nt!PspTerminateProcess'
复制代码

本人声明一下绝对不是符号文件的问题!
如果你认为输入了uf nt!PspTerminateProcess提示未找到函数就认为这种函数不存在,你就错了!它只是换了个名字罢了!
那么换了什么名字呢?我们先查看NtTerminateJobObject的反汇编代码:
  1. lkd> uf nt!NtTerminateJobObject
  2. nt!NtTerminateJobObject:
  3. fffff800`01ae2890 4c8bdc          mov     r11,rsp
  4. fffff800`01ae2893 49895b08        mov     qword ptr [r11+8],rbx
  5. fffff800`01ae2897 57              push    rdi
  6. fffff800`01ae2898 4883ec40        sub     rsp,40h
  7. fffff800`01ae289c 65488b042588010000 mov   rax,qword ptr gs:[188h]
  8. fffff800`01ae28a5 498363e800      and     qword ptr [r11-18h],0
  9. fffff800`01ae28aa 4c8b05d729fdff  mov     r8,qword ptr [nt!PsJobType (fffff800`01ab5288)]
  10. fffff800`01ae28b1 448a88f6010000  mov     r9b,byte ptr [rax+1F6h]
  11. fffff800`01ae28b8 8bfa            mov     edi,edx
  12. fffff800`01ae28ba 498d5318        lea     rdx,[r11+18h]
  13. fffff800`01ae28be 498953e0        mov     qword ptr [r11-20h],rdx
  14. fffff800`01ae28c2 ba08000000      mov     edx,8
  15. fffff800`01ae28c7 c744242044666c74 mov     dword ptr [rsp+20h],746C6644h
  16. fffff800`01ae28cf e80c7c0900      call    nt!ObReferenceObjectByHandleWithTag (fffff800`01b7a4e0)
  17. fffff800`01ae28d4 8bd8            mov     ebx,eax
  18. fffff800`01ae28d6 85c0            test    eax,eax
  19. fffff800`01ae28d8 781b            js      nt!NtTerminateJobObject+0x65 (fffff800`01ae28f5)

  20. nt!NtTerminateJobObject+0x4a:
  21. fffff800`01ae28da 488b4c2460      mov     rcx,qword ptr [rsp+60h]
  22. fffff800`01ae28df 4533c0          xor     r8d,r8d
  23. fffff800`01ae28e2 8bd7            mov     edx,edi
  24. [color=Red]fffff800`01ae28e4 e8d7000000      call    nt!PspTerminateAllProcessesInJob (fffff800`01ae29c0)[/color]
  25. fffff800`01ae28e9 488b4c2460      mov     rcx,qword ptr [rsp+60h]
  26. fffff800`01ae28ee e84dbbdaff      call    nt!ObfDereferenceObject (fffff800`0188e440)
  27. fffff800`01ae28f3 8bc3            mov     eax,ebx

  28. nt!NtTerminateJobObject+0x65:
  29. fffff800`01ae28f5 488b5c2450      mov     rbx,qword ptr [rsp+50h]
  30. fffff800`01ae28fa 4883c440        add     rsp,40h
  31. fffff800`01ae28fe 5f              pop     rdi
  32. fffff800`01ae28ff c3              ret
复制代码

注意到“fffff800`01ae28e4 e8d7000000      call    nt!PspTerminateAllProcessesInJob (fffff800`01ae29c0)”这行标记了红色的代码了没?又是熟悉的函数,看看反汇编代码吧。
  1. lkd> uf nt!PspTerminateAllProcessesInJob
  2. nt!PspTerminateAllProcessesInJob:
  3. fffff800`01ae29c0 48895c2408      mov     qword ptr [rsp+8],rbx
  4. fffff800`01ae29c5 48896c2410      mov     qword ptr [rsp+10h],rbp
  5. fffff800`01ae29ca 4889742418      mov     qword ptr [rsp+18h],rsi
  6. fffff800`01ae29cf 57              push    rdi
  7. fffff800`01ae29d0 4154            push    r12
  8. fffff800`01ae29d2 4155            push    r13
  9. fffff800`01ae29d4 4156            push    r14
  10. fffff800`01ae29d6 4157            push    r15
  11. fffff800`01ae29d8 4883ec20        sub     rsp,20h
  12. fffff800`01ae29dc 65488b342588010000 mov   rsi,qword ptr gs:[188h]
  13. fffff800`01ae29e5 448bf2          mov     r14d,edx
  14. fffff800`01ae29e8 4533ff          xor     r15d,r15d
  15. fffff800`01ae29eb 33d2            xor     edx,edx
  16. fffff800`01ae29ed 458ae8          mov     r13b,r8b
  17. fffff800`01ae29f0 488bd9          mov     rbx,rcx
  18. fffff800`01ae29f3 418aef          mov     bpl,r15b
  19. fffff800`01ae29f6 e80dffffff      call    nt!PsGetNextJobProcess (fffff800`01ae2908)
  20. fffff800`01ae29fb 493bc7          cmp     rax,r15
  21. fffff800`01ae29fe 0f854c210f00    jne     nt! ?? ::NNGAKEGL::`string'+0x48d20 (fffff800`01bd4b50)

  22. nt!PspTerminateAllProcessesInJob+0x44:
  23. fffff800`01ae2a04 488b5c2450      mov     rbx,qword ptr [rsp+50h]
  24. fffff800`01ae2a09 488b742460      mov     rsi,qword ptr [rsp+60h]
  25. fffff800`01ae2a0e 408ac5          mov     al,bpl
  26. fffff800`01ae2a11 488b6c2458      mov     rbp,qword ptr [rsp+58h]
  27. fffff800`01ae2a16 4883c420        add     rsp,20h
  28. fffff800`01ae2a1a 415f            pop     r15
  29. fffff800`01ae2a1c 415e            pop     r14
  30. fffff800`01ae2a1e 415d            pop     r13
  31. fffff800`01ae2a20 415c            pop     r12
  32. fffff800`01ae2a22 5f              pop     rdi
  33. fffff800`01ae2a23 c3              ret

  34. nt! ?? ::NNGAKEGL::`string'+0x48d20:
  35. fffff800`01bd4b50 488bf8          mov     rdi,rax
  36. fffff800`01bd4b53 41bf01000000    mov     r15d,1

  37. nt! ?? ::NNGAKEGL::`string'+0x48d29:
  38. fffff800`01bd4b59 4484bf3c040000  test    byte ptr [rdi+43Ch],r15b
  39. fffff800`01bd4b60 0f8593000000    jne     nt! ?? ::NNGAKEGL::`string'+0x48dc9 (fffff800`01bd4bf9)

  40. nt! ?? ::NNGAKEGL::`string'+0x48d36:
  41. fffff800`01bd4b66 418bd6          mov     edx,r14d
  42. fffff800`01bd4b69 488bcf          mov     rcx,rdi
  43. [color=Red]fffff800`01bd4b6c e8af550600      call    nt!PsTerminateProcess (fffff800`01c3a120)[/color]
  44. fffff800`01bd4b71 85c0            test    eax,eax
  45. fffff800`01bd4b73 0f8880000000    js      nt! ?? ::NNGAKEGL::`string'+0x48dc9 (fffff800`01bd4bf9)

  46. nt! ?? ::NNGAKEGL::`string'+0x48d49:
  47. fffff800`01bd4b79 66ff8ec4010000  dec     word ptr [rsi+1C4h]
  48. fffff800`01bd4b80 488d4b38        lea     rcx,[rbx+38h]
  49. fffff800`01bd4b84 418ad7          mov     dl,r15b
  50. fffff800`01bd4b87 e8f458cbff      call    nt!ExAcquireResourceExclusiveLite (fffff800`0188a480)
  51. fffff800`01bd4b8c 4484bf3c040000  test    byte ptr [rdi+43Ch],r15b
  52. fffff800`01bd4b93 7538            jne     nt! ?? ::NNGAKEGL::`string'+0x48d9d (fffff800`01bd4bcd)

  53. nt! ?? ::NNGAKEGL::`string'+0x48d65:
  54. fffff800`01bd4b95 f04409bf3c040000 lock or dword ptr [rdi+43Ch],r15d
  55. fffff800`01bd4b9d 4584ed          test    r13b,r13b
  56. fffff800`01bd4ba0 7407            je      nt! ?? ::NNGAKEGL::`string'+0x48d79 (fffff800`01bd4ba9)

  57. nt! ?? ::NNGAKEGL::`string'+0x48d72:
  58. fffff800`01bd4ba2 4401bbcc000000  add     dword ptr [rbx+0CCh],r15d

  59. nt! ?? ::NNGAKEGL::`string'+0x48d79:
  60. fffff800`01bd4ba9 8383c8000000ff  add     dword ptr [rbx+0C8h],0FFFFFFFFh
  61. fffff800`01bd4bb0 750d            jne     nt! ?? ::NNGAKEGL::`string'+0x48d8f (fffff800`01bd4bbf)

  62. nt! ?? ::NNGAKEGL::`string'+0x48d82:
  63. fffff800`01bd4bb2 4533c0          xor     r8d,r8d
  64. fffff800`01bd4bb5 33d2            xor     edx,edx
  65. fffff800`01bd4bb7 488bcb          mov     rcx,rbx
  66. fffff800`01bd4bba e8413acbff      call    nt!KeSetEvent (fffff800`01888600)

  67. nt! ?? ::NNGAKEGL::`string'+0x48d8f:
  68. fffff800`01bd4bbf 488bd7          mov     rdx,rdi
  69. fffff800`01bd4bc2 488bcb          mov     rcx,rbx
  70. fffff800`01bd4bc5 e8429af6ff      call    nt!PspFoldProcessAccountingIntoJob (fffff800`01b3e60c)
  71. fffff800`01bd4bca 418aef          mov     bpl,r15b

  72. nt! ?? ::NNGAKEGL::`string'+0x48d9d:
  73. fffff800`01bd4bcd 488d4b38        lea     rcx,[rbx+38h]
  74. fffff800`01bd4bd1 e85ac3cbff      call    nt!ExReleaseResourceLite (fffff800`01890f30)
  75. fffff800`01bd4bd6 664401bec4010000 add     word ptr [rsi+1C4h],r15w
  76. fffff800`01bd4bde 7519            jne     nt! ?? ::NNGAKEGL::`string'+0x48dc9 (fffff800`01bd4bf9)

  77. nt! ?? ::NNGAKEGL::`string'+0x48db0:
  78. fffff800`01bd4be0 488d4650        lea     rax,[rsi+50h]
  79. fffff800`01bd4be4 483900          cmp     qword ptr [rax],rax
  80. fffff800`01bd4be7 7410            je      nt! ?? ::NNGAKEGL::`string'+0x48dc9 (fffff800`01bd4bf9)

  81. nt! ?? ::NNGAKEGL::`string'+0x48db9:
  82. fffff800`01bd4be9 33c0            xor     eax,eax
  83. fffff800`01bd4beb 663986c6010000  cmp     word ptr [rsi+1C6h],ax
  84. fffff800`01bd4bf2 7505            jne     nt! ?? ::NNGAKEGL::`string'+0x48dc9 (fffff800`01bd4bf9)

  85. nt! ?? ::NNGAKEGL::`string'+0x48dc4:
  86. fffff800`01bd4bf4 e8b7cbc5ff      call    nt!KiCheckForKernelApcDelivery (fffff800`018317b0)

  87. nt! ?? ::NNGAKEGL::`string'+0x48dc9:
  88. fffff800`01bd4bf9 488bd7          mov     rdx,rdi
  89. fffff800`01bd4bfc 488bcb          mov     rcx,rbx
  90. fffff800`01bd4bff e804ddf0ff      call    nt!PsGetNextJobProcess (fffff800`01ae2908)
  91. fffff800`01bd4c04 488bf8          mov     rdi,rax
  92. fffff800`01bd4c07 33c0            xor     eax,eax
  93. fffff800`01bd4c09 483bf8          cmp     rdi,rax
  94. fffff800`01bd4c0c 0f8547ffffff    jne     nt! ?? ::NNGAKEGL::`string'+0x48d29 (fffff800`01bd4b59)

  95. nt! ?? ::NNGAKEGL::`string'+0x48de2:
  96. fffff800`01bd4c12 e9edddf0ff      jmp     nt!PspTerminateAllProcessesInJob+0x44 (fffff800`01ae2a04)
复制代码

看到没?!PspTerminateProcess其实没有消失,它只是改了名叫PsTerminateProcess!反汇编一下这个函数,发现它是老套的调用PspTerminateThreadByPointer方式!
  1. lkd> uf nt!PsTerminateProcess
  2. nt!PsTerminateProcess:
  3. fffff800`01c3a120 48895c2408      mov     qword ptr [rsp+8],rbx
  4. fffff800`01c3a125 4889742410      mov     qword ptr [rsp+10h],rsi
  5. fffff800`01c3a12a 57              push    rdi
  6. fffff800`01c3a12b 4883ec20        sub     rsp,20h
  7. fffff800`01c3a12f 65488b1c2588010000 mov   rbx,qword ptr gs:[188h]
  8. fffff800`01c3a138 4c8bd1          mov     r10,rcx
  9. fffff800`01c3a13b be01000000      mov     esi,1
  10. fffff800`01c3a140 66ff8bc4010000  dec     word ptr [rbx+1C4h]
  11. fffff800`01c3a147 0f0d8940040000  prefetchw [rcx+440h]
  12. fffff800`01c3a14e 8b8140040000    mov     eax,dword ptr [rcx+440h]

  13. nt!PsTerminateProcess+0x34:
  14. fffff800`01c3a154 8bc8            mov     ecx,eax
  15. fffff800`01c3a156 83c908          or      ecx,8
  16. fffff800`01c3a159 f0410fb18a40040000 lock cmpxchg dword ptr [r10+440h],ecx
  17. fffff800`01c3a162 75f0            jne     nt!PsTerminateProcess+0x34 (fffff800`01c3a154)

  18. nt!PsTerminateProcess+0x44:
  19. fffff800`01c3a164 a808            test    al,8
  20. fffff800`01c3a166 7408            je      nt!PsTerminateProcess+0x50 (fffff800`01c3a170)

  21. nt!PsTerminateProcess+0x48:
  22. fffff800`01c3a168 41b903000000    mov     r9d,3
  23. fffff800`01c3a16e eb10            jmp     nt!PsTerminateProcess+0x60 (fffff800`01c3a180)

  24. nt!PsTerminateProcess+0x50:
  25. fffff800`01c3a170 448bce          mov     r9d,esi
  26. fffff800`01c3a173 b905000000      mov     ecx,5
  27. fffff800`01c3a178 0fbae01e        bt      eax,1Eh
  28. fffff800`01c3a17c 440f42c9        cmovb   r9d,ecx

  29. nt!PsTerminateProcess+0x60:
  30. fffff800`01c3a180 448bc2          mov     r8d,edx
  31. fffff800`01c3a183 498bca          mov     rcx,r10
  32. fffff800`01c3a186 488bd3          mov     rdx,rbx
  33. [color=Red]fffff800`01c3a189 e8122cf0ff      call    nt!PspTerminateAllThreads (fffff800`01b3cda0)[/color]
  34. fffff800`01c3a18e 8bf8            mov     edi,eax
  35. fffff800`01c3a190 6601b3c4010000  add     word ptr [rbx+1C4h],si
  36. fffff800`01c3a197 7518            jne     nt!PsTerminateProcess+0x91 (fffff800`01c3a1b1)

  37. nt!PsTerminateProcess+0x79:
  38. fffff800`01c3a199 488d4b50        lea     rcx,[rbx+50h]
  39. fffff800`01c3a19d 483909          cmp     qword ptr [rcx],rcx
  40. fffff800`01c3a1a0 740f            je      nt!PsTerminateProcess+0x91 (fffff800`01c3a1b1)

  41. nt!PsTerminateProcess+0x82:
  42. fffff800`01c3a1a2 6683bbc601000000 cmp     word ptr [rbx+1C6h],0
  43. fffff800`01c3a1aa 7505            jne     nt!PsTerminateProcess+0x91 (fffff800`01c3a1b1)

  44. nt!PsTerminateProcess+0x8c:
  45. fffff800`01c3a1ac e8ff75bfff      call    nt!KiCheckForKernelApcDelivery (fffff800`018317b0)

  46. nt!PsTerminateProcess+0x91:
  47. fffff800`01c3a1b1 488b5c2430      mov     rbx,qword ptr [rsp+30h]
  48. fffff800`01c3a1b6 488b742438      mov     rsi,qword ptr [rsp+38h]
  49. fffff800`01c3a1bb 8bc7            mov     eax,edi
  50. fffff800`01c3a1bd 4883c420        add     rsp,20h
  51. fffff800`01c3a1c1 5f              pop     rdi
  52. fffff800`01c3a1c2 c3              ret
  53. lkd> uf nt!PspTerminateAllThreads
  54. nt!PspTerminateAllThreads:
  55. fffff800`01b3cda0 488bc4          mov     rax,rsp
  56. fffff800`01b3cda3 48895808        mov     qword ptr [rax+8],rbx
  57. fffff800`01b3cda7 48896810        mov     qword ptr [rax+10h],rbp
  58. fffff800`01b3cdab 48897018        mov     qword ptr [rax+18h],rsi
  59. fffff800`01b3cdaf 44894820        mov     dword ptr [rax+20h],r9d
  60. fffff800`01b3cdb3 57              push    rdi
  61. fffff800`01b3cdb4 4154            push    r12
  62. fffff800`01b3cdb6 4155            push    r13
  63. fffff800`01b3cdb8 4156            push    r14
  64. fffff800`01b3cdba 4157            push    r15
  65. fffff800`01b3cdbc 4883ec20        sub     rsp,20h
  66. fffff800`01b3cdc0 0fbaa1400400000d bt      dword ptr [rcx+440h],0Dh
  67. fffff800`01b3cdc8 458bf1          mov     r14d,r9d
  68. fffff800`01b3cdcb 458be8          mov     r13d,r8d
  69. fffff800`01b3cdce 488bea          mov     rbp,rdx
  70. fffff800`01b3cdd1 488bf9          mov     rdi,rcx
  71. fffff800`01b3cdd4 0f82bbd20700    jb      nt! ?? ::NNGAKEGL::`string'+0x17ac0 (fffff800`01bba095)

  72. nt!PspTerminateAllThreads+0x3a:
  73. fffff800`01b3cdda 4c8b7d70        mov     r15,qword ptr [rbp+70h]
  74. fffff800`01b3cdde 33d2            xor     edx,edx
  75. fffff800`01b3cde0 488bcf          mov     rcx,rdi
  76. fffff800`01b3cde3 e8b8feffff      call    nt!PspGetPreviousProcessThread (fffff800`01b3cca0)
  77. fffff800`01b3cde8 8b5c2468        mov     ebx,dword ptr [rsp+68h]
  78. fffff800`01b3cdec 488bf0          mov     rsi,rax
  79. fffff800`01b3cdef 410fb6c6        movzx   eax,r14b
  80. fffff800`01b3cdf3 83e001          and     eax,1
  81. fffff800`01b3cdf6 03c0            add     eax,eax
  82. fffff800`01b3cdf8 33c3            xor     eax,ebx
  83. fffff800`01b3cdfa 83e002          and     eax,2
  84. fffff800`01b3cdfd 33d8            xor     ebx,eax
  85. fffff800`01b3cdff 410fb6c6        movzx   eax,r14b
  86. fffff800`01b3ce03 d1e8            shr     eax,1
  87. fffff800`01b3ce05 83e001          and     eax,1
  88. fffff800`01b3ce08 33c3            xor     eax,ebx
  89. fffff800`01b3ce0a 83e001          and     eax,1
  90. fffff800`01b3ce0d 33d8            xor     ebx,eax
  91. fffff800`01b3ce0f 410fb6c6        movzx   eax,r14b
  92. fffff800`01b3ce13 c1e802          shr     eax,2
  93. fffff800`01b3ce16 83e001          and     eax,1
  94. fffff800`01b3ce19 c1e002          shl     eax,2
  95. fffff800`01b3ce1c 33c3            xor     eax,ebx
  96. fffff800`01b3ce1e 83e004          and     eax,4
  97. fffff800`01b3ce21 4885f6          test    rsi,rsi
  98. fffff800`01b3ce24 0f84b3d20700    je      nt! ?? ::NNGAKEGL::`string'+0x17b08 (fffff800`01bba0dd)

  99. nt!PspTerminateAllThreads+0x8a:
  100. fffff800`01b3ce2a 33d8            xor     ebx,eax
  101. fffff800`01b3ce2c 4533e4          xor     r12d,r12d
  102. fffff800`01b3ce2f 488bce          mov     rcx,rsi
  103. fffff800`01b3ce32 f6c301          test    bl,1
  104. fffff800`01b3ce35 0f8576d20700    jne     nt! ?? ::NNGAKEGL::`string'+0x17adc (fffff800`01bba0b1)

  105. nt!PspTerminateAllThreads+0x9b:
  106. fffff800`01b3ce3b 4c8bf6          mov     r14,rsi
  107. fffff800`01b3ce3e e8ad40d5ff      call    nt!ObfReferenceObject (fffff800`01890ef0)

  108. nt!PspTerminateAllThreads+0xa3:
  109. fffff800`01b3ce43 483bf5          cmp     rsi,rbp
  110. fffff800`01b3ce46 0f85ba000000    jne     nt!PspTerminateAllThreads+0x166 (fffff800`01b3cf06)

  111. nt!PspTerminateAllThreads+0xac:
  112. fffff800`01b3ce4c 488bd6          mov     rdx,rsi
  113. fffff800`01b3ce4f 488bcf          mov     rcx,rdi
  114. fffff800`01b3ce52 e849feffff      call    nt!PspGetPreviousProcessThread (fffff800`01b3cca0)
  115. fffff800`01b3ce57 488bf0          mov     rsi,rax
  116. fffff800`01b3ce5a 4885c0          test    rax,rax
  117. fffff800`01b3ce5d 75e4            jne     nt!PspTerminateAllThreads+0xa3 (fffff800`01b3ce43)

  118. nt!PspTerminateAllThreads+0xbf:
  119. fffff800`01b3ce5f 33d2            xor     edx,edx

  120. nt!PspTerminateAllThreads+0xc1:
  121. fffff800`01b3ce61 488bcf          mov     rcx,rdi
  122. fffff800`01b3ce64 e83f8afeff      call    nt!PsGetNextProcessThread (fffff800`01b258a8)
  123. fffff800`01b3ce69 488bf0          mov     rsi,rax
  124. fffff800`01b3ce6c 483bc5          cmp     rax,rbp
  125. fffff800`01b3ce6f 0f85d9000000    jne     nt!PspTerminateAllThreads+0x1ae (fffff800`01b3cf4e)

  126. nt!PspTerminateAllThreads+0xd5:
  127. fffff800`01b3ce75 493bf6          cmp     rsi,r14
  128. fffff800`01b3ce78 0f8511010000    jne     nt!PspTerminateAllThreads+0x1ef (fffff800`01b3cf8f)

  129. nt!PspTerminateAllThreads+0xde:
  130. fffff800`01b3ce7e 488bce          mov     rcx,rsi
  131. fffff800`01b3ce81 e8ba15d5ff      call    nt!ObfDereferenceObject (fffff800`0188e440)
  132. fffff800`01b3ce86 498bce          mov     rcx,r14
  133. fffff800`01b3ce89 e8b215d5ff      call    nt!ObfDereferenceObject (fffff800`0188e440)
  134. fffff800`01b3ce8e 448b742468      mov     r14d,dword ptr [rsp+68h]

  135. nt!PspTerminateAllThreads+0xf3:
  136. fffff800`01b3ce93 f6c302          test    bl,2
  137. fffff800`01b3ce96 0f8520d20700    jne     nt! ?? ::NNGAKEGL::`string'+0x17ae7 (fffff800`01bba0bc)

  138. nt!PspTerminateAllThreads+0xfc:
  139. fffff800`01b3ce9c 41f6c608        test    r14b,8
  140. fffff800`01b3cea0 7420            je      nt!PspTerminateAllThreads+0x122 (fffff800`01b3cec2)

  141. nt!PspTerminateAllThreads+0x102:
  142. fffff800`01b3cea2 488d8f78010000  lea     rcx,[rdi+178h]
  143. fffff800`01b3cea9 0f0d09          prefetchw [rcx]
  144. fffff800`01b3ceac 488b01          mov     rax,qword ptr [rcx]
  145. fffff800`01b3ceaf 4883e0fe        and     rax,0FFFFFFFFFFFFFFFEh
  146. fffff800`01b3ceb3 488d50fe        lea     rdx,[rax-2]
  147. fffff800`01b3ceb7 f0480fb111      lock cmpxchg qword ptr [rcx],rdx
  148. fffff800`01b3cebc 0f8526d20700    jne     nt! ?? ::NNGAKEGL::`string'+0x17b13 (fffff800`01bba0e8)

  149. nt!PspTerminateAllThreads+0x122:
  150. fffff800`01b3cec2 493bff          cmp     rdi,r15
  151. fffff800`01b3cec5 0f85e7000000    jne     nt!PspTerminateAllThreads+0x212 (fffff800`01b3cfb2)

  152. nt!PspTerminateAllThreads+0x12b:
  153. fffff800`01b3cecb 4181fc22010000  cmp     r12d,122h
  154. fffff800`01b3ced2 0f8434d20700    je      nt! ?? ::NNGAKEGL::`string'+0x17b37 (fffff800`01bba10c)

  155. nt!PspTerminateAllThreads+0x138:
  156. fffff800`01b3ced8 4883bff001000000 cmp     qword ptr [rdi+1F0h],0
  157. fffff800`01b3cee0 0f851dd20700    jne     nt! ?? ::NNGAKEGL::`string'+0x17b2e (fffff800`01bba103)

  158. nt!PspTerminateAllThreads+0x146:
  159. fffff800`01b3cee6 488b5c2450      mov     rbx,qword ptr [rsp+50h]
  160. fffff800`01b3ceeb 488b6c2458      mov     rbp,qword ptr [rsp+58h]
  161. fffff800`01b3cef0 488b742460      mov     rsi,qword ptr [rsp+60h]
  162. fffff800`01b3cef5 418bc4          mov     eax,r12d
  163. fffff800`01b3cef8 4883c420        add     rsp,20h
  164. fffff800`01b3cefc 415f            pop     r15
  165. fffff800`01b3cefe 415e            pop     r14
  166. fffff800`01b3cf00 415d            pop     r13
  167. fffff800`01b3cf02 415c            pop     r12
  168. fffff800`01b3cf04 5f              pop     rdi
  169. fffff800`01b3cf05 c3              ret

  170. nt!PspTerminateAllThreads+0x166:
  171. fffff800`01b3cf06 f6c304          test    bl,4
  172. fffff800`01b3cf09 0f8588000000    jne     nt!PspTerminateAllThreads+0x1f7 (fffff800`01b3cf97)

  173. nt!PspTerminateAllThreads+0x16f:
  174. fffff800`01b3cf0f 488d8e30040000  lea     rcx,[rsi+430h]
  175. fffff800`01b3cf16 0f0d09          prefetchw [rcx]
  176. fffff800`01b3cf19 488b01          mov     rax,qword ptr [rcx]
  177. fffff800`01b3cf1c 4883e0fe        and     rax,0FFFFFFFFFFFFFFFEh
  178. fffff800`01b3cf20 488d5002        lea     rdx,[rax+2]
  179. fffff800`01b3cf24 f0480fb111      lock cmpxchg qword ptr [rcx],rdx
  180. fffff800`01b3cf29 0f8595000000    jne     nt!PspTerminateAllThreads+0x224 (fffff800`01b3cfc4)

  181. nt!PspTerminateAllThreads+0x18f:
  182. fffff800`01b3cf2f 83cb08          or      ebx,8

  183. nt!PspTerminateAllThreads+0x192:
  184. fffff800`01b3cf32 f6c308          test    bl,8
  185. fffff800`01b3cf35 0f8411ffffff    je      nt!PspTerminateAllThreads+0xac (fffff800`01b3ce4c)

  186. nt!PspTerminateAllThreads+0x19b:
  187. fffff800`01b3cf3b 4533c0          xor     r8d,r8d
  188. fffff800`01b3cf3e 418bd5          mov     edx,r13d
  189. fffff800`01b3cf41 488bce          mov     rcx,rsi
  190. [color=Red]fffff800`01b3cf44 e8cfd40100      call    nt!PspTerminateThreadByPointer (fffff800`01b5a418)[/color]
  191. fffff800`01b3cf49 e9fefeffff      jmp     nt!PspTerminateAllThreads+0xac (fffff800`01b3ce4c)

  192. nt!PspTerminateAllThreads+0x1ae:
  193. fffff800`01b3cf4e f6c304          test    bl,4
  194. fffff800`01b3cf51 0f851effffff    jne     nt!PspTerminateAllThreads+0xd5 (fffff800`01b3ce75)

  195. nt!PspTerminateAllThreads+0x1b7:
  196. fffff800`01b3cf57 0fbaa64804000010 bt      dword ptr [rsi+448h],10h
  197. fffff800`01b3cf5f 0f8210ffffff    jb      nt!PspTerminateAllThreads+0xd5 (fffff800`01b3ce75)

  198. nt!PspTerminateAllThreads+0x1c5:
  199. fffff800`01b3cf65 488d8e30040000  lea     rcx,[rsi+430h]
  200. fffff800`01b3cf6c 0f0d09          prefetchw [rcx]
  201. fffff800`01b3cf6f 488b01          mov     rax,qword ptr [rcx]
  202. fffff800`01b3cf72 4883e0fe        and     rax,0FFFFFFFFFFFFFFFEh
  203. fffff800`01b3cf76 488d50fe        lea     rdx,[rax-2]
  204. fffff800`01b3cf7a f0480fb111      lock cmpxchg qword ptr [rcx],rdx
  205. fffff800`01b3cf7f 0f84f0feffff    je      nt!PspTerminateAllThreads+0xd5 (fffff800`01b3ce75)

  206. nt!PspTerminateAllThreads+0x1e5:
  207. fffff800`01b3cf85 e88a6cd6ff      call    nt!ExfReleaseRundownProtection (fffff800`018a3c14)
  208. fffff800`01b3cf8a e9e6feffff      jmp     nt!PspTerminateAllThreads+0xd5 (fffff800`01b3ce75)

  209. nt!PspTerminateAllThreads+0x1ef:
  210. fffff800`01b3cf8f 488bd6          mov     rdx,rsi
  211. fffff800`01b3cf92 e9cafeffff      jmp     nt!PspTerminateAllThreads+0xc1 (fffff800`01b3ce61)

  212. nt!PspTerminateAllThreads+0x1f7:
  213. fffff800`01b3cf97 8a864c040000    mov     al,byte ptr [rsi+44Ch]
  214. fffff800`01b3cf9d 33c9            xor     ecx,ecx
  215. fffff800`01b3cf9f 2480            and     al,80h
  216. fffff800`01b3cfa1 3c80            cmp     al,80h
  217. fffff800`01b3cfa3 0f94c1          sete    cl
  218. fffff800`01b3cfa6 c1e103          shl     ecx,3
  219. fffff800`01b3cfa9 33cb            xor     ecx,ebx
  220. fffff800`01b3cfab 83e108          and     ecx,8
  221. fffff800`01b3cfae 33d9            xor     ebx,ecx
  222. fffff800`01b3cfb0 eb80            jmp     nt!PspTerminateAllThreads+0x192 (fffff800`01b3cf32)

  223. nt!PspTerminateAllThreads+0x212:
  224. fffff800`01b3cfb2 4181fd04000140  cmp     r13d,40010004h
  225. fffff800`01b3cfb9 0f850cffffff    jne     nt!PspTerminateAllThreads+0x12b (fffff800`01b3cecb)

  226. nt!PspTerminateAllThreads+0x21f:
  227. fffff800`01b3cfbf e92fd10700      jmp     nt! ?? ::NNGAKEGL::`string'+0x17b1e (fffff800`01bba0f3)

  228. nt!PspTerminateAllThreads+0x224:
  229. fffff800`01b3cfc4 e82b6cd6ff      call    nt!ExfAcquireRundownProtection (fffff800`018a3bf4)
  230. fffff800`01b3cfc9 84c0            test    al,al
  231. fffff800`01b3cfcb 0f855effffff    jne     nt!PspTerminateAllThreads+0x18f (fffff800`01b3cf2f)

  232. nt!PspTerminateAllThreads+0x231:
  233. fffff800`01b3cfd1 f00fbaae4804000010 lock bts dword ptr [rsi+448h],10h
  234. fffff800`01b3cfda 0f92c0          setb    al
  235. fffff800`01b3cfdd 0fb6c8          movzx   ecx,al
  236. fffff800`01b3cfe0 c1e104          shl     ecx,4
  237. fffff800`01b3cfe3 33cb            xor     ecx,ebx
  238. fffff800`01b3cfe5 83e110          and     ecx,10h
  239. fffff800`01b3cfe8 33d9            xor     ebx,ecx
  240. fffff800`01b3cfea 83e3f7          and     ebx,0FFFFFFF7h
  241. fffff800`01b3cfed e940ffffff      jmp     nt!PspTerminateAllThreads+0x192 (fffff800`01b3cf32)

  242. nt! ?? ::NNGAKEGL::`string'+0x17ac0:
  243. fffff800`01bba095 4c8d81e0020000  lea     r8,[rcx+2E0h]
  244. fffff800`01bba09c 488bd1          mov     rdx,rcx
  245. fffff800`01bba09f 488d0d0addfcff  lea     rcx,[nt! ?? ::NNGAKEGL::`string' (fffff800`01b87db0)]
  246. fffff800`01bba0a6 e845280500      call    nt!PspCatchCriticalBreak (fffff800`01c0c8f0)
  247. fffff800`01bba0ab 90              nop
  248. fffff800`01bba0ac e9292df8ff      jmp     nt!PspTerminateAllThreads+0x3a (fffff800`01b3cdda)

  249. nt! ?? ::NNGAKEGL::`string'+0x17adc:
  250. fffff800`01bba0b1 e88a43cdff      call    nt!ObfDereferenceObject (fffff800`0188e440)
  251. fffff800`01bba0b6 90              nop
  252. fffff800`01bba0b7 e9d72df8ff      jmp     nt!PspTerminateAllThreads+0xf3 (fffff800`01b3ce93)

  253. nt! ?? ::NNGAKEGL::`string'+0x17ae7:
  254. fffff800`01bba0bc 4839bd10020000  cmp     qword ptr [rbp+210h],rdi
  255. fffff800`01bba0c3 0f85d32df8ff    jne     nt!PspTerminateAllThreads+0xfc (fffff800`01b3ce9c)

  256. nt! ?? ::NNGAKEGL::`string'+0x17af4:
  257. fffff800`01bba0c9 4533c0          xor     r8d,r8d
  258. fffff800`01bba0cc 418bd5          mov     edx,r13d
  259. fffff800`01bba0cf 488bcd          mov     rcx,rbp
  260. [color=Red]fffff800`01bba0d2 e84103faff      call    nt!PspTerminateThreadByPointer (fffff800`01b5a418)[/color]
  261. fffff800`01bba0d7 90              nop
  262. fffff800`01bba0d8 e9bf2df8ff      jmp     nt!PspTerminateAllThreads+0xfc (fffff800`01b3ce9c)

  263. nt! ?? ::NNGAKEGL::`string'+0x17b08:
  264. fffff800`01bba0dd 41bc22010000    mov     r12d,122h
  265. fffff800`01bba0e3 e9b42df8ff      jmp     nt!PspTerminateAllThreads+0xfc (fffff800`01b3ce9c)

  266. nt! ?? ::NNGAKEGL::`string'+0x17b13:
  267. fffff800`01bba0e8 e8279bceff      call    nt!ExfReleaseRundownProtection (fffff800`018a3c14)
  268. fffff800`01bba0ed 90              nop
  269. fffff800`01bba0ee e9cf2df8ff      jmp     nt!PspTerminateAllThreads+0x122 (fffff800`01b3cec2)

  270. nt! ?? ::NNGAKEGL::`string'+0x17b1e:
  271. fffff800`01bba0f3 33d2            xor     edx,edx
  272. fffff800`01bba0f5 488bcf          mov     rcx,rdi
  273. fffff800`01bba0f8 e823a30600      call    nt!DbgkClearProcessDebugObject (fffff800`01c24420)
  274. fffff800`01bba0fd 90              nop
  275. fffff800`01bba0fe e9c82df8ff      jmp     nt!PspTerminateAllThreads+0x12b (fffff800`01b3cecb)

  276. nt! ?? ::NNGAKEGL::`string'+0x17b2e:
  277. fffff800`01bba103 493bff          cmp     rdi,r15
  278. fffff800`01bba106 0f84da2df8ff    je      nt!PspTerminateAllThreads+0x146 (fffff800`01b3cee6)

  279. nt! ?? ::NNGAKEGL::`string'+0x17b37:
  280. fffff800`01bba10c 488bcf          mov     rcx,rdi
  281. fffff800`01bba10f e8bcfd0700      call    nt!PspDoHandleSweepSingle (fffff800`01c39ed0)
  282. fffff800`01bba114 4533e4          xor     r12d,r12d
  283. fffff800`01bba117 e9ca2df8ff      jmp     nt!PspTerminateAllThreads+0x146 (fffff800`01b3cee6)
复制代码

所以,本文的主题是:Win64下PspTerminateProcess改名为PsTerminateProcess了!
起这个标题的目的是为了让大家不知道主题是什么从而点进来以增加访问量的{:soso_e113:}

评分

参与人数 1水晶币 +80 收起 理由
Tesla.Angela + 80 文章不错,修改了标题并且移动到技术区。.

查看全部评分

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2015-8-3 08:43:28 | 显示全部楼层
我一直以为PspTerminateProcess是一个杜撰的函数。原来是真的存在啊。

顺带,这个发现不错,先从SSDT找到NtTerminateJobObject,然后从NtTerminateJobObject的末尾倒数两个CALL找到PspTerminateAllProcessesInJob,然后从PspTerminateAllProcessesInJob开头数两个CALL就能找到PsTerminateProcess。

另外,最稳定的方案,兼容2000到WIN10的,是APC法。两个重点:
1.修改ETHREAD的FLAG的那个偏移可以从PsIsSystemThread里动态获得。甚至可以直接PATCH这个函数达到目的,这样子就连修改线程FLAG的步骤都免去了。
2.枚举线程用PsLookupThreadByThreadId+IoThreadToProcess。

30

主题

693

回帖

0

精华

钻石会员

积分
2815
发表于 2015-8-3 09:46:48 | 显示全部楼层
好帖子 顶一下 共同进步

78

主题

190

回帖

9

精华

贵宾会员

积分
15605
 楼主| 发表于 2015-8-6 14:21:45 | 显示全部楼层
我一直以为PspTerminateProcess是一个杜撰的函数。原来是真的存在啊。

目测你是因为uf nt!NtTerminateProcess的时候发现并没有调用PspTerminateProcess。。。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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