能力值:
( 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