从winlogon!StateMachineWorkerCallback看ntdll!TpPostWork原理
第一部分:
kd> p
ntdll!TpPostWork+0xce:
001b:7704dbb5 ff7508 push dword ptr [ebp+8]
kd> p
ntdll!TpPostWork+0xd1:
001b:7704dbb8 e812fdffff call ntdll!TppWorkPost (7704d8cf)
kd> r
eax=00000000 ebx=76faa458 ecx=88c16ca2 edx=76fda084 esi=76faa1c8 edi=76faa294
eip=7704dbb8 esp=000ef7d4 ebp=000ef834 iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000206
ntdll!TpPostWork+0xd1:
001b:7704dbb8 e812fdffff call ntdll!TppWorkPost (7704d8cf)
kd> dd 000ef834+8
000ef83c 00142b38 00000000 009c2f5c 00a0400c
000ef84c 00142a68 00000108 00a032f4 00000000
000ef85c 00141038 00a046f8 00b60de0 00000000
000ef86c 00000108 00000000 00000000 00000000
000ef87c 00000000 00000007 00000000 00142b38
000ef88c 0000010c 00a02cc4 ffffffff 00141038
000ef89c 00a046f8 00000000 00000000 0000010c
000ef8ac 00000000 00000000 00000000 00000000
kd> dd 00142b38
00142b38 00000001 76faa1ac 00000000 00000000
00142b48 00000000 00142b4c 00142b4c 00000000
00142b58 00000000 00000000 00000000 00000000
00142b68 009ee92f 000ef888 00000000 00000000
第二部分:
kd> g
Breakpoint 12 hit
winlogon!StateMachineWorkerCallback:
001b:009ee92f 8bff mov edi,edi
kd> p
winlogon!StateMachineWorkerCallback+0x2:
001b:009ee931 55 push ebp
kd> p
winlogon!StateMachineWorkerCallback+0x3:
001b:009ee932 8bec mov ebp,esp
kd> p
winlogon!StateMachineWorkerCallback+0x5:
001b:009ee934 53 push ebx
kd> p
winlogon!StateMachineWorkerCallback+0x6:
001b:009ee935 56 push esi
kd> p
winlogon!StateMachineWorkerCallback+0x7:
001b:009ee936 57 push edi
kd> p
winlogon!StateMachineWorkerCallback+0x8:
001b:009ee937 a10c40a000 mov eax,dword ptr [winlogon!WPP_GLOBAL_Control (00a0400c)]
kd> p
winlogon!StateMachineWorkerCallback+0xd:
001b:009ee93c 8b5d0c mov ebx,dword ptr [ebp+0Ch]
kd> p
winlogon!StateMachineWorkerCallback+0x10:
001b:009ee93f be0c40a000 mov esi,offset winlogon!WPP_GLOBAL_Control (00a0400c)
kd> r
eax=00a04b38 ebx=000ef900 ecx=000ef900 edx=60c5677d esi=00142cd8 edi=76faa1c8
eip=009ee93f esp=00d7fa04 ebp=00d7fa10 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
winlogon!StateMachineWorkerCallback+0x10:
001b:009ee93f be0c40a000 mov esi,offset winlogon!WPP_GLOBAL_Control (00a0400c)
kd> p
winlogon!StateMachineWorkerCallback+0x15:
001b:009ee944 bfbc629c00 mov edi,offset winlogon!_sz_SspiCli_dll+0xc (009c62bc)
kd> p
winlogon!StateMachineWorkerCallback+0x1a:
001b:009ee949 3bc6 cmp eax,esi
kd> p
winlogon!StateMachineWorkerCallback+0x1c:
001b:009ee94b 743f je winlogon!StateMachineWorkerCallback+0x5d (009ee98c)
kd> p
winlogon!StateMachineWorkerCallback+0x1e:
001b:009ee94d f6401c01 test byte ptr [eax+1Ch],1
kd> p
winlogon!StateMachineWorkerCallback+0x22:
001b:009ee951 741a je winlogon!StateMachineWorkerCallback+0x3e (009ee96d)
kd> p
winlogon!StateMachineWorkerCallback+0x24:
001b:009ee953 80781905 cmp byte ptr [eax+19h],5
kd> p
winlogon!StateMachineWorkerCallback+0x28:
001b:009ee957 7214 jb winlogon!StateMachineWorkerCallback+0x3e (009ee96d)
kd> p
winlogon!StateMachineWorkerCallback+0x3e:
001b:009ee96d 3bc6 cmp eax,esi
kd> p
winlogon!StateMachineWorkerCallback+0x40:
001b:009ee96f 741b je winlogon!StateMachineWorkerCallback+0x5d (009ee98c)
kd> p
winlogon!StateMachineWorkerCallback+0x42:
001b:009ee971 f6401c01 test byte ptr [eax+1Ch],1
kd> p
winlogon!StateMachineWorkerCallback+0x46:
001b:009ee975 7415 je winlogon!StateMachineWorkerCallback+0x5d (009ee98c)
kd> p
winlogon!StateMachineWorkerCallback+0x48:
001b:009ee977 80781905 cmp byte ptr [eax+19h],5
kd> p
winlogon!StateMachineWorkerCallback+0x4c:
001b:009ee97b 720f jb winlogon!StateMachineWorkerCallback+0x5d (009ee98c)
kd> p
winlogon!StateMachineWorkerCallback+0x5d:
001b:009ee98c 8b4308 mov eax,dword ptr [ebx+8]
kd> p
winlogon!StateMachineWorkerCallback+0x60:
001b:009ee98f 8d4b10 lea ecx,[ebx+10h]
kd> p
winlogon!StateMachineWorkerCallback+0x63:
001b:009ee992 51 push ecx
kd> p
winlogon!StateMachineWorkerCallback+0x64:
001b:009ee993 ff5008 call dword ptr [eax+8]
kd> r
eax=00a03068 ebx=000ef900 ecx=000ef910 edx=60c5677d esi=00a0400c edi=009c62bc
eip=009ee993 esp=00d7fa00 ebp=00d7fa10 iopl=0 nv up ei ng nz ac pe cy
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000297
winlogon!StateMachineWorkerCallback+0x64:
001b:009ee993 ff5008 call dword ptr [eax+8] ds:0023:00a03070={winlogon!WLGeneric_CAD_Execute (009d4e12)}
kd> dd 00a03068
00a03068 009c2080 00000000 009d4e12 009d4e7a
00a03078 0000000c 00a02fc8 00000004 00a03058
00a03088 00000029 009c2068 009d4ede 00000000
00a03098 00000000 00000006 00a030b0 00000000
00a030a8 00000000 0000002a 00000004 0000001c
00a030b8 00000002 00000002 0000004c 00000000
00a030c8 00000012 0000001c 00000002 0000001f
00a030d8 00000030 00000000 00000007 0000001c
kd> u 009d4e12
winlogon!WLGeneric_CAD_Execute:
009d4e12 8bff mov edi,edi
009d4e14 55 push ebp
009d4e15 8bec mov ebp,esp
009d4e17 a10c40a000 mov eax,dword ptr [winlogon!WPP_GLOBAL_Control (00a0400c)]
009d4e1c 3d0c40a000 cmp eax,offset winlogon!WPP_GLOBAL_Control (00a0400c)
009d4e21 7424 je winlogon!WLGeneric_CAD_Execute+0x35 (009d4e47)
009d4e23 f7401c00010000 test dword ptr [eax+1Ch],100h
009d4e2a 741b je winlogon!WLGeneric_CAD_Execute+0x35 (009d4e47)
kd> dd 000ef900
000ef900 00142cd8 00000114 00a03068 ffffffff
000ef910 00141038 00a046f8 00000000 00000000
000ef920 00000114 00000000 00000000 00000000
000ef930 00000000 00000003 00000000 00142da8
000ef940 00000118 00a02cc4 00000000 00141038
000ef950 00a046f8 00000000 00000000 00000118
000ef960 00000000 00000000 00000000 00000000
000ef970 00000000 00000003 00141038 00a046f8
第三部分:实战1
kd> g
Breakpoint 17 hit
winlogon!StateMachineRun+0x29c:
001b:009ef07c 837df8ff cmp dword ptr [ebp-8],0FFFFFFFFh
kd> g
Breakpoint 7 hit
winlogon!StateMachineRun+0x1a4:
001b:009eef84 397b08 cmp dword ptr [ebx+8],edi
kd> g
Breakpoint 19 hit
ntdll!TpPostWork+0xd1:
001b:7704dbb8 e812fdffff call ntdll!TppWorkPost (7704d8cf)
kd> .process
Implicit process is now 9416cc88
kd> r
eax=00000000 ebx=76faa458 ecx=88c16ca2 edx=76fda084 esi=76faa1c8 edi=76faa294
eip=7704dbb8 esp=000ef7d4 ebp=000ef834 iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000206
ntdll!TpPostWork+0xd1:
001b:7704dbb8 e812fdffff call ntdll!TppWorkPost (7704d8cf)
kd> dd 000ef834+8
000ef83c 00142a68 00000000 009c2f5c 00a0400c
000ef84c 00142a68 00000108 00a02cc4 ffffffff
000ef85c 00141038 00a046f8 00000000 00000000
000ef86c 00000108 00000000 00000000 00000000
000ef87c 00000000 00000000 00000000 00142b38
000ef88c 0000010c 00a02cc4 00000000 00141038
000ef89c 00a046f8 00000000 00000000 0000010c
000ef8ac 00000000 00000000 00000000 00000000
kd> dd 00142a68
00142a68 00000001 76faa1ac 00000000 00000000
00142a78 00000000 00142a7c 00142a7c 00000000
00142a88 00000000 00000000 00000000 00000000
00142a98 009ee92f 000ef84c 00000000 00000000
00142aa8 00000000 00115d98 00142b80 00118620
00142ab8 00000000 7704d107 009eeb27 009eee6b
00142ac8 009d0bb8 009cec63 009ed618 00000000
00142ad8 00000000 00000000 00000000 00000000
kd> u 009ee92f
winlogon!StateMachineWorkerCallback:
009ee92f 8bff mov edi,edi
009ee931 55 push ebp
009ee932 8bec mov ebp,esp
009ee934 53 push ebx
009ee935 56 push esi
009ee936 57 push edi
009ee937 a10c40a000 mov eax,dword ptr [winlogon!WPP_GLOBAL_Control (00a0400c)]
009ee93c 8b5d0c mov ebx,dword ptr [ebp+0Ch]
kd> dd 000ef84c
000ef84c 00142a68 00000108 00a02cc4 ffffffff
000ef85c 00141038 00a046f8 00000000 00000000
000ef86c 00000108 00000000 00000000 00000000
000ef87c 00000000 00000000 00000000 00142b38
000ef88c 0000010c 00a02cc4 00000000 00141038
000ef89c 00a046f8 00000000 00000000 0000010c
000ef8ac 00000000 00000000 00000000 00000000
000ef8bc 00000000 00000003 00142c08 00000110
kd> dd 00a02cc4
00a02cc4 009c2290 00000000 009d4d1e 009d4dd8
00a02cd4 00000010 00a02bf0 00000005 00a02cb0
00a02ce4 0000001c 00000000 fffffffe 00000000
00a02cf4 009c2264 009d636f 00000000 00000000
00a02d04 00000001 00a02ce8 00000000 00000000
00a02d14 0000001d 00000000 fffffffe 00000000
00a02d24 009c2238 009d4f39 00000000 00000000
00a02d34 00000001 00a02d18 00000000 00000000
kd> u 009d4d1e
winlogon!WLGeneric_Logged_On_Execute:
009d4d1e 6a08 push 8
009d4d20 6860d99f00 push offset winlogon!_snprintf_s+0x40a (009fd960)
009d4d25 e8728a0100 call winlogon!_SEH_prolog4 (009ed79c)
009d4d2a a10c40a000 mov eax,dword ptr [winlogon!WPP_GLOBAL_Control (00a0400c)]
009d4d2f 3d0c40a000 cmp eax,offset winlogon!WPP_GLOBAL_Control (00a0400c)
009d4d34 7424 je winlogon!WLGeneric_Logged_On_Execute+0x3c (009d4d5a)
009d4d36 f7401c00010000 test dword ptr [eax+1Ch],100h
009d4d3d 741b je winlogon!WLGeneric_Logged_On_Execute+0x3c (009d4d5a)
第四部分:实战2
kd> g
Breakpoint 12 hit
winlogon!StateMachineWorkerCallback:
001b:009ee92f 8bff mov edi,edi
kd> p
winlogon!StateMachineWorkerCallback+0x2:
001b:009ee931 55 push ebp
kd> p
winlogon!StateMachineWorkerCallback+0x3:
001b:009ee932 8bec mov ebp,esp
kd> p
winlogon!StateMachineWorkerCallback+0x5:
001b:009ee934 53 push ebx
kd> p
winlogon!StateMachineWorkerCallback+0x6:
001b:009ee935 56 push esi
kd> p
winlogon!StateMachineWorkerCallback+0x7:
001b:009ee936 57 push edi
kd> p
winlogon!StateMachineWorkerCallback+0x8:
001b:009ee937 a10c40a000 mov eax,dword ptr [winlogon!WPP_GLOBAL_Control (00a0400c)]
kd> p
winlogon!StateMachineWorkerCallback+0xd:
001b:009ee93c 8b5d0c mov ebx,dword ptr [ebp+0Ch]
kd> p
winlogon!StateMachineWorkerCallback+0x10:
001b:009ee93f be0c40a000 mov esi,offset winlogon!WPP_GLOBAL_Control (00a0400c)
kd> p
winlogon!StateMachineWorkerCallback+0x15:
001b:009ee944 bfbc629c00 mov edi,offset winlogon!_sz_SspiCli_dll+0xc (009c62bc)
kd> r
eax=00a04b38 ebx=000ef84c ecx=000ef84c edx=6300b1be esi=00a0400c edi=76faa1c8
eip=009ee944 esp=00d7fa04 ebp=00d7fa10 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
winlogon!StateMachineWorkerCallback+0x15:
001b:009ee944 bfbc629c00 mov edi,offset winlogon!_sz_SspiCli_dll+0xc (009c62bc)
kd> dd 000ef84c
000ef84c 00142a68 00000108 00a02cc4 ffffffff
000ef85c 00141038 00a046f8 00000000 00000000
000ef86c 00000108 00000000 00000000 00000000
000ef87c 00000000 00000000 00000000 00142b38
000ef88c 0000010c 00a02cc4 00000000 00141038
000ef89c 00a046f8 00000000 00000000 0000010c
000ef8ac 00000000 00000000 00000000 00000000
000ef8bc 00000000 00000003 00142c08 00000110
kd> p
winlogon!StateMachineWorkerCallback+0x1a:
001b:009ee949 3bc6 cmp eax,esi
kd> p
winlogon!StateMachineWorkerCallback+0x1c:
001b:009ee94b 743f je winlogon!StateMachineWorkerCallback+0x5d (009ee98c)
kd> p
winlogon!StateMachineWorkerCallback+0x1e:
001b:009ee94d f6401c01 test byte ptr [eax+1Ch],1
kd> p
winlogon!StateMachineWorkerCallback+0x22:
001b:009ee951 741a je winlogon!StateMachineWorkerCallback+0x3e (009ee96d)
kd> p
winlogon!StateMachineWorkerCallback+0x24:
001b:009ee953 80781905 cmp byte ptr [eax+19h],5
kd> p
winlogon!StateMachineWorkerCallback+0x28:
001b:009ee957 7214 jb winlogon!StateMachineWorkerCallback+0x3e (009ee96d)
kd> p
winlogon!StateMachineWorkerCallback+0x3e:
001b:009ee96d 3bc6 cmp eax,esi
kd> p
winlogon!StateMachineWorkerCallback+0x40:
001b:009ee96f 741b je winlogon!StateMachineWorkerCallback+0x5d (009ee98c)
kd> p
winlogon!StateMachineWorkerCallback+0x42:
001b:009ee971 f6401c01 test byte ptr [eax+1Ch],1
kd> p
winlogon!StateMachineWorkerCallback+0x46:
001b:009ee975 7415 je winlogon!StateMachineWorkerCallback+0x5d (009ee98c)
kd> p
winlogon!StateMachineWorkerCallback+0x48:
001b:009ee977 80781905 cmp byte ptr [eax+19h],5
kd> p
winlogon!StateMachineWorkerCallback+0x4c:
001b:009ee97b 720f jb winlogon!StateMachineWorkerCallback+0x5d (009ee98c)
kd> p
winlogon!StateMachineWorkerCallback+0x5d:
001b:009ee98c 8b4308 mov eax,dword ptr [ebx+8]
kd> p
winlogon!StateMachineWorkerCallback+0x60:
001b:009ee98f 8d4b10 lea ecx,[ebx+10h]
kd> r
eax=00a02cc4 ebx=000ef84c ecx=000ef84c edx=6300b1be esi=00a0400c edi=009c62bc
eip=009ee98f esp=00d7fa04 ebp=00d7fa10 iopl=0 nv up ei ng nz ac pe cy
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000297
winlogon!StateMachineWorkerCallback+0x60:
001b:009ee98f 8d4b10 lea ecx,[ebx+10h]
kd> dd 00a02cc4
00a02cc4 009c2290 00000000 009d4d1e 009d4dd8
00a02cd4 00000010 00a02bf0 00000005 00a02cb0
00a02ce4 0000001c 00000000 fffffffe 00000000
00a02cf4 009c2264 009d636f 00000000 00000000
00a02d04 00000001 00a02ce8 00000000 00000000
00a02d14 0000001d 00000000 fffffffe 00000000
00a02d24 009c2238 009d4f39 00000000 00000000
00a02d34 00000001 00a02d18 00000000 00000000
kd> u 009d4d1e
winlogon!WLGeneric_Logged_On_Execute:
009d4d1e 6a08 push 8
009d4d20 6860d99f00 push offset winlogon!_snprintf_s+0x40a (009fd960)
009d4d25 e8728a0100 call winlogon!_SEH_prolog4 (009ed79c)
009d4d2a a10c40a000 mov eax,dword ptr [winlogon!WPP_GLOBAL_Control (00a0400c)]
009d4d2f 3d0c40a000 cmp eax,offset winlogon!WPP_GLOBAL_Control (00a0400c)
009d4d34 7424 je winlogon!WLGeneric_Logged_On_Execute+0x3c (009d4d5a)
009d4d36 f7401c00010000 test dword ptr [eax+1Ch],100h
009d4d3d 741b je winlogon!WLGeneric_Logged_On_Execute+0x3c (009d4d5a)
kd> p
winlogon!StateMachineWorkerCallback+0x63:
001b:009ee992 51 push ecx
kd> p
winlogon!StateMachineWorkerCallback+0x64:
001b:009ee993 ff5008 call dword ptr [eax+8]
kd> r
eax=00a02cc4 ebx=000ef84c ecx=000ef85c edx=6300b1be esi=00a0400c edi=009c62bc
eip=009ee993 esp=00d7fa00 ebp=00d7fa10 iopl=0 nv up ei ng nz ac pe cy
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000297
winlogon!StateMachineWorkerCallback+0x64:
001b:009ee993 ff5008 call dword ptr [eax+8] ds:0023:00a02ccc={winlogon!WLGeneric_Logged_On_Execute (009d4d1e)}
kd> t
Breakpoint 18 hit
winlogon!WLGeneric_Logged_On_Execute:
001b:009d4d1e 6a08 push 8
kd> kc
#
00 winlogon!WLGeneric_Logged_On_Execute
01 winlogon!StateMachineWorkerCallback
02 ntdll!TppWorkpExecuteCallback
03 ntdll!TppWorkerThread
04 kernel32!BaseThreadInitThunk
05 ntdll!__RtlUserThreadStart
06 ntdll!_RtlUserThreadStart