首页
社区
课程
招聘
[求助]新人一HOOK NtCreateThreadEx 就什么都干不了了
发表于: 2015-11-23 11:54 6876

[求助]新人一HOOK NtCreateThreadEx 就什么都干不了了

2015-11-23 11:54
6876
就在新的 NtCreateThreadEx 方法里面加了一句打印:
DbgPrintEx(DPFLTR_IHVDRIVER_ID, 2, "进入了新的NtCreateThreadEx\n");
然后就继续运行以前的NtCreateThreadEx,但是貌似HOOK后调用这个方法创建线程都没有成功。
下面是我的NtCreateThreadEx方法的结构,不知道对不对
typedef NTSTATUS (WINAPI *LPFUN_NtCreateThreadEx)
        (
        OUT PHANDLE hThread,
        IN ACCESS_MASK DesiredAccess,
        IN LPVOID ObjectAttributes,
        IN HANDLE ProcessHandle,
        IN LPTHREAD_START_ROUTINE lpStartAddress,
        IN LPVOID lpParameter,
        IN BOOL CreateSuspended,
        IN ULONG StackZeroBits,
        IN ULONG SizeOfStackCommit,
        IN ULONG SizeOfStackReserve,
        OUT LPVOID lpBytesBuffer
        );


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 324
活跃值: (60)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
我把调用约定改成__fastcall和__stdcall感觉卡卡的,打开文件夹,双机打不开,右键点打开才能打开。__cdecl貌似都直接不行。这个在x64系统下,感觉确实不是那么好HOOK。
2015-11-23 20:21
0
雪    币: 324
活跃值: (60)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
HOOK的代码是下载前辈的SSDT代码,感觉HOOK的有点问题,进入了自己的代码就是感觉调用HOOK前的NtCreateThreadEx出了问题
2015-11-24 08:22
0
雪    币: 324
活跃值: (60)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
逆了一下这个函数,比较奇怪,第一,这个函数的起始地址比较奇怪,没有对齐。可能这造成了堆栈没有平衡,新人也逆不出太多东西,只能往上面发一点,顺便结一下这个贴,以后等逆出来后在来发帖说明。

;rsp + 768h 第4个参数
;rsp + 770h 第5个参数
;rsp + 778h 第6个参数
;rsp + 780h 第7个参数
;rsp + 788h 第8个参数
;rsp + 790h 第9个参数
;rsp + 798h 第10个参数
;rsp + 7A0h 第11个参数

nt!NtCreateThreadEx:
fffff800`03f7a1f8 fff3            push    rbx
fffff800`03f7a1fa 56              push    rsi
fffff800`03f7a1fb 57              push    rdi
fffff800`03f7a1fc 4154            push    r12
fffff800`03f7a1fe 4155            push    r13
fffff800`03f7a200 4156            push    r14
fffff800`03f7a202 4157            push    r15
fffff800`03f7a204 4881ec10070000  sub     rsp,710h
kd> u
nt!NtCreateThreadEx+0x13:
fffff800`03f7a20b 488b05de07e9ff  mov     rax,qword ptr [nt!_security_cookie (fffff800`03e0a9f0)]
fffff800`03f7a212 4833c4          xor     rax,rsp
fffff800`03f7a215 4889842400070000 mov     qword ptr [rsp+700h],rax
fffff800`03f7a21d 4d8bf9          mov     r15,r9                                                                                                                                                                                                                                ;第4个参数赋值到r15                进程句柄ProcessHandle
fffff800`03f7a220 4d8bf0          mov     r14,r8                                                                                                                                                                                                                                ;第3个参数赋值到r14                对象属性ObjectAttributes
fffff800`03f7a223 448bea          mov     r13d,edx                                                                                                                                                                                                                        ;第2个参数赋值到r13d        ACCESS_MASK  DesiredAccess 32位
fffff800`03f7a226 488bf1          mov     rsi,rcx                                                                                                                                                                                                                                ;第1个参数赋值到rsi                线程句柄
fffff800`03f7a229 488bbc24a0070000 mov     rdi,qword ptr [rsp+7A0h]                                                                                                                                                        ;将第11个参数赋值给rdi
kd> u
nt!NtCreateThreadEx+0x39:
fffff800`03f7a231 33db            xor     ebx,ebx
fffff800`03f7a233 48899c24a0000000 mov     qword ptr [rsp+0A0h],rbx
fffff800`03f7a23b 33d2            xor     edx,edx
fffff800`03f7a23d 448d4338        lea     r8d,[rbx+38h]
fffff800`03f7a241 488d8c24a8000000 lea     rcx,[rsp+0A8h]
fffff800`03f7a249 e8422ad1ff      call    nt!memset (fffff800`03c8cc90)                                                                                                                                        ;将栈上rsp+0A8h处开辟一个大小为0x38 局部变量1 : rsp+0A8h
fffff800`03f7a24e 48899c24e0000000 mov     qword ptr [rsp+0E0h],rbx                                                                                                                                                        ;局部变量2 : rsp+0E0h
fffff800`03f7a256 33d2            xor     edx,edx
kd> u
nt!NtCreateThreadEx+0x60:
fffff800`03f7a258 41b8c8040000    mov     r8d,4C8h
fffff800`03f7a25e 488d8c24e8000000 lea     rcx,[rsp+0E8h]
fffff800`03f7a266 e8252ad1ff      call    nt!memset (fffff800`03c8cc90)                                                                                                                                        ;将栈上rsp+0E8h处开辟一个大小为0x4C8 局部变量3 : rsp+0E8h
fffff800`03f7a26b 448ba42480070000 mov     r12d,dword ptr [rsp+780h]                                                                                                                                                ;将参数7赋值给r12d  是DWORD
fffff800`03f7a273 41f7c4f0ffffff  test    r12d,0FFFFFFF0h                                                                                                                                                                                                ;如果参数7不为0FFFFFFF0h        ,则失败返回,错误码:0C00000F5h
fffff800`03f7a27a 0f85be5a0600    jne     nt! ?? ::NNGAKEGL::`string+0x37700 (fffff800`03fdfd3e)
fffff800`03f7a280 65488b042588010000 mov   rax,qword ptr gs:[188h]
fffff800`03f7a289 3898f6010000    cmp     byte ptr [rax+1F6h],bl                                                                                                                                                                ;bl为0
kd> u
nt!NtCreateThreadEx+0x97:
fffff800`03f7a28f 741e            je      nt!NtCreateThreadEx+0xb7 (fffff800`03f7a2af)
fffff800`03f7a291 488bce          mov     rcx,rsi
fffff800`03f7a294 488b0565cdf4ff  mov     rax,qword ptr [nt!MmUserProbeAddress (fffff800`03ec7000)]
fffff800`03f7a29b 483bf0          cmp     rsi,rax
fffff800`03f7a29e 480f43c8        cmovae  rcx,rax
fffff800`03f7a2a2 488b01          mov     rax,qword ptr [rcx]
fffff800`03f7a2a5 488901          mov     qword ptr [rcx],rax
fffff800`03f7a2a8 eb05            jmp     nt!NtCreateThreadEx+0xb7 (fffff800`03f7a2af)
kd> u
nt!NtCreateThreadEx+0xb2:
fffff800`03f7a2aa e9b7010000      jmp     nt!NtCreateThreadEx+0x26e (fffff800`03f7a466)
fffff800`03f7a2af 885c2470        mov     byte ptr [rsp+70h],bl                                                                                                                                                                        ;局部变量4 : rsp+70h bool
fffff800`03f7a2b3 488b842490070000 mov     rax,qword ptr [rsp+790h]                                                                                                                                                        ;参数9 QWORD
fffff800`03f7a2bb 4889842480000000 mov     qword ptr [rsp+80h],rax
fffff800`03f7a2c3 488b842498070000 mov     rax,qword ptr [rsp+798h]                                                                                                                                                        ;参数10 QWORD
fffff800`03f7a2cb 4889842488000000 mov     qword ptr [rsp+88h],rax
fffff800`03f7a2d3 488b842488070000 mov     rax,qword ptr [rsp+788h]                                                                                                                                                        ;参数8 QWORD
fffff800`03f7a2db 4889442478      mov     qword ptr [rsp+78h],rax
kd> u
nt!NtCreateThreadEx+0xe8:
fffff800`03f7a2e0 899c2490000000  mov     dword ptr [rsp+90h],ebx
fffff800`03f7a2e7 33d2            xor     edx,edx
fffff800`03f7a2e9 41b850010000    mov     r8d,150h
fffff800`03f7a2ef 488d8c24b0050000 lea     rcx,[rsp+5B0h]
fffff800`03f7a2f7 e89429d1ff      call    nt!memset (fffff800`03c8cc90)                                                                                                                                        ;局部变量5 : rsp+5b0h struct
fffff800`03f7a2fc 4885ff          test    rdi,rdi                                                                                                                                                                                                                                ;判断参数11是否为空
fffff800`03f7a2ff 7454            je      nt!NtCreateThreadEx+0x15d (fffff800`03f7a355)
fffff800`03f7a301 65488b042588010000 mov   rax,qword ptr gs:[188h]
kd>
nt!NtCreateThreadEx+0x112:
fffff800`03f7a30a 4c8d8c24b0050000 lea     r9,[rsp+5B0h]
fffff800`03f7a312 41b801000000    mov     r8d,1
fffff800`03f7a318 8a90f6010000    mov     dl,byte ptr [rax+1F6h]
fffff800`03f7a31e 488bcf          mov     rcx,rdi
fffff800`03f7a321 e816f1ffff      call    nt!PspBuildCreateProcessContext (fffff800`03f7943c)
fffff800`03f7a326 85c0            test    eax,eax
fffff800`03f7a328 0f8838010000    js      nt!NtCreateThreadEx+0x26e (fffff800`03f7a466)
fffff800`03f7a32e 488d8424d8060000 lea     rax,[rsp+6D8h]
kd> u
nt!NtCreateThreadEx+0x13e:
fffff800`03f7a336 0fbaa424b00500000c bt    dword ptr [rsp+5B0h],0Ch
fffff800`03f7a33f 480f43c3        cmovae  rax,rbx
fffff800`03f7a343 488bd8          mov     rbx,rax
fffff800`03f7a346 0fbaa424b00500000e bt    dword ptr [rsp+5B0h],0Eh
fffff800`03f7a34f 0f82f3590600    jb      nt! ?? ::NNGAKEGL::`string+0x3770a (fffff800`03fdfd48)
fffff800`03f7a355 c78424100100000b001000 mov dword ptr [rsp+110h],10000Bh                                                                                                                                ;如果参数11是否为空
fffff800`03f7a360 488b057951ecff  mov     rax,qword ptr [nt!PspUserThreadStart (fffff800`03e3f4e0)]
fffff800`03f7a367 48898424d8010000 mov     qword ptr [rsp+1D8h],rax
kd> u
nt!NtCreateThreadEx+0x177:
fffff800`03f7a36f 488b842470070000 mov     rax,qword ptr [rsp+770h]                                                                                                                                                        ;参数5 QWORD
fffff800`03f7a377 4889842460010000 mov     qword ptr [rsp+160h],rax
fffff800`03f7a37f 488b842478070000 mov     rax,qword ptr [rsp+778h]                                                                                                                                                        ;参数6 QWORD
fffff800`03f7a387 4889842468010000 mov     qword ptr [rsp+168h],rax
fffff800`03f7a38f b92b000000      mov     ecx,2Bh
fffff800`03f7a394 66898c241a010000 mov     word ptr [rsp+11Ah],cx
fffff800`03f7a39c 66898c241c010000 mov     word ptr [rsp+11Ch],cx
fffff800`03f7a3a4 8d4128          lea     eax,[rcx+28h]
kd> u
nt!NtCreateThreadEx+0x1af:
fffff800`03f7a3a7 668984241e010000 mov     word ptr [rsp+11Eh],ax
fffff800`03f7a3af 66898c2420010000 mov     word ptr [rsp+120h],cx
fffff800`03f7a3b7 66898c2422010000 mov     word ptr [rsp+122h],cx
fffff800`03f7a3bf 8d4108          lea     eax,[rcx+8]
fffff800`03f7a3c2 6689842418010000 mov     word ptr [rsp+118h],ax
fffff800`03f7a3ca b9801f0000      mov     ecx,1F80h
fffff800`03f7a3cf 898c2414010000  mov     dword ptr [rsp+114h],ecx
fffff800`03f7a3d6 b87f020000      mov     eax,27Fh
kd> u
nt!NtCreateThreadEx+0x1e3:
fffff800`03f7a3db 66898424e0010000 mov     word ptr [rsp+1E0h],ax
fffff800`03f7a3e3 898c24f8010000  mov     dword ptr [rsp+1F8h],ecx
fffff800`03f7a3ea 488d442470      lea     rax,[rsp+70h]
fffff800`03f7a3ef 4889442468      mov     qword ptr [rsp+68h],rax
fffff800`03f7a3f4 488364246000    and     qword ptr [rsp+60h],0
fffff800`03f7a3fa 488364245800    and     qword ptr [rsp+58h],0
fffff800`03f7a400 4489642450      mov     dword ptr [rsp+50h],r12d
fffff800`03f7a405 488d8424a0000000 lea     rax,[rsp+0A0h]
kd> u
nt!NtCreateThreadEx+0x215:
fffff800`03f7a40d 4889442448      mov     qword ptr [rsp+48h],rax
fffff800`03f7a412 488d8424e0000000 lea     rax,[rsp+0E0h]
fffff800`03f7a41a 4889442440      mov     qword ptr [rsp+40h],rax
fffff800`03f7a41f 488b8424b8050000 mov     rax,qword ptr [rsp+5B8h]
fffff800`03f7a427 4889442438      mov     qword ptr [rsp+38h],rax
fffff800`03f7a42c 48895c2430      mov     qword ptr [rsp+30h],rbx
fffff800`03f7a431 488d8424b0050000 lea     rax,[rsp+5B0h]
fffff800`03f7a439 4889442428      mov     qword ptr [rsp+28h],rax
kd>
nt!NtCreateThreadEx+0x246:
fffff800`03f7a43e 488364242000    and     qword ptr [rsp+20h],0
fffff800`03f7a444 4d8bcf          mov     r9,r15
fffff800`03f7a447 4d8bc6          mov     r8,r14
fffff800`03f7a44a 418bd5          mov     edx,r13d
fffff800`03f7a44d 488bce          mov     rcx,rsi
fffff800`03f7a450 e84fbfffff      call    nt!PspCreateThread (fffff800`03f763a4)
fffff800`03f7a455 8bd8            mov     ebx,eax
fffff800`03f7a457 488d8c24b0050000 lea     rcx,[rsp+5B0h]
kd>
nt!NtCreateThreadEx+0x267:
fffff800`03f7a45f e818030000      call    nt!PspDeleteCreateProcessContext (fffff800`03f7a77c)
fffff800`03f7a464 8bc3            mov     eax,ebx
fffff800`03f7a466 488b8c2400070000 mov     rcx,qword ptr [rsp+700h]
fffff800`03f7a46e 4833cc          xor     rcx,rsp
fffff800`03f7a471 e89a7ad0ff      call    nt!_security_check_cookie (fffff800`03c81f10)
fffff800`03f7a476 4881c410070000  add     rsp,710h
fffff800`03f7a47d 415f            pop     r15
fffff800`03f7a47f 415e            pop     r14
kd>
nt!NtCreateThreadEx+0x289:
fffff800`03f7a481 415d            pop     r13
fffff800`03f7a483 415c            pop     r12
fffff800`03f7a485 5f              pop     rdi
fffff800`03f7a486 5e              pop     rsi
fffff800`03f7a487 5b              pop     rbx
fffff800`03f7a488 c3              ret
2015-11-24 20:43
0
游客
登录 | 注册 方可回帖
返回