標籤:des style blog io color ar os 使用 sp
1 通過kifastcallentry或者常規的SSDT 掛鈎實現的彈窗
2 檔案過濾驅動引起彈窗
!process 0 0 //列出所有進程
.reload
!process fffffa800a04b3a0 f //列出指定進程的所有的棧回溯
!irp //如果是因為釋放敏感檔案被彈窗使用這條命令觀察IRP
!fileobj //解析IRP裡面的檔案名稱
3 敏感註冊表寫入引起註冊表回調的彈窗
如果我們不清楚是因為我們釋放了敏感檔案還是寫了敏感註冊表
列出進程的所有handle 看handle count 如果count 很小 就證明一出來就被抓了
!handle 0 7 86a94270 (這裡是敏感進程的EPROCESS)
這篇文章主要分析的是使用test_reg寫了敏感註冊表引起了殺軟彈窗
!process 0 0
PROCESS fffffa800a04b3a0
SessionId: 1 Cid: 0d0c Peb: 7efdf000 ParentCid: 0960
DirBase: 24000000 ObjectTable: fffff8a00189fbf0 HandleCount: 254.
Image: LiveUpdate360.exe
.reload
!process fffffa800a04b3a0 f
列出所有的棧回溯 我們可以看到很多線程 證明這個彈窗不是由於進程回調引起的 如果是進程回調彈窗的話 建立第一個線程的時候就彈窗了。
首先貼一下完整的棧
1 THREAD fffffa800a09e060 Cid 0ec0.0d70 Teb: 000000007ef97000 Win32Thread: fffff900c06b4260 WAIT: (DelayExecution) KernelMode Non-Alertable 2 fffff88003b0f200 SynchronizationEvent 3 Not impersonating 4 DeviceMap fffff8a0010c4980 5 Owning Process fffffa8009c10b30 Image: test_reg.exe 6 Attached Process N/A Image: N/A 7 Wait Start TickCount 475720 Ticks: 655 (0:00:00:10.218) 8 Context Switch Count 217 IdealProcessor: 0 LargeStack 9 UserTime 00:00:00.00010 KernelTime 00:00:00.01511 Win32 Start Address 0x00000000004051a712 Stack Init fffff88003b0fc70 Current fffff88003b0ef2013 Base fffff88003b10000 Limit fffff88003b08000 Call 014 Priority 11 BasePriority 8 UnusualBoost 0 ForegroundBoost 2 IoPriority 2 PagePriority 515 Child-SP RetAddr Call Site16 fffff880`03b0ef60 fffff800`03e8f992 nt!KiSwapContext+0x7a17 fffff880`03b0f0a0 fffff800`03e921af nt!KiCommitThreadWait+0x1d218 fffff880`03b0f130 fffff880`040239d9 nt!KeWaitForSingleObject+0x19f19 fffff880`03b0f1d0 fffff880`04024c9b 360FsFlt+0x1f9d920 fffff880`03b0f250 fffff880`04026adb 360FsFlt+0x20c9b21 fffff880`03b0f2f0 fffff800`04230100 360FsFlt+0x22adb22 fffff880`03b0f320 fffff800`040ea16d nt!CmpCallCallBacks+0x1c023 fffff880`03b0f3f0 fffff800`04184d38 nt! ?? ::NNGAKEGL::`string‘+0x2d3bd24 fffff880`03b0f6f0 fffff800`04185f56 nt!ObpLookupObjectName+0x58825 fffff880`03b0f7e0 fffff800`0413d8f8 nt!ObOpenObjectByName+0x30626 fffff880`03b0f8b0 fffff800`0413e19e nt!CmCreateKey+0x2e127 fffff880`03b0fa20 fffff800`03e898d3 nt!NtCreateKey+0x2e28 fffff880`03b0fa70 00000000`76e314ea nt!KiSystemServiceCopyEnd+0x13 (TrapFrame @ fffff880`03b0fae0)29 00000000`0448e698 00000000`00000000 0x76e314ea30 31 如果從CmCreateKey中 把 _Object_Attributes 拿出來 涉及到棧操作的只有這麼多32 33 PAGE:FFFFF80004180614 48 8B C4 mov rax, rsp34 PAGE:FFFFF80004180617 4C 89 40 18 mov [rax+18h], r835 PAGE:FFFFF8000418061B 48 89 48 08 mov [rax+8], rcx36 PAGE:FFFFF8000418061F 53 push rbx37 PAGE:FFFFF80004180620 56 push rsi38 PAGE:FFFFF80004180621 57 push rdi39 PAGE:FFFFF80004180622 41 54 push r1240 PAGE:FFFFF80004180624 41 55 push r1341 PAGE:FFFFF80004180626 41 56 push r1442 PAGE:FFFFF80004180628 41 57 push r1543 PAGE:FFFFF8000418062A 48 81 EC 30 01 00 00 sub rsp, 130h44 PAGE:FFFFF80004180631 4D 8B E8 mov r13, r845 46 參數傳遞是這樣的 多於四個參數47 48 49 ZwCreateKey(50 OUT PHANDLE KeyHandle,51 IN ACCESS_MASK DesiredAccess,52 IN POBJECT_ATTRIBUTES ObjectAttributes,53 IN ULONG TitleIndex,54 IN PUNICODE_STRING Class OPTIONAL,55 IN ULONG CreateOptions,56 OUT PULONG Disposition OPTIONAL57 );58 59 60 堆棧 Disposition61 堆棧 CreateOptions62 堆棧 Class63 r9 TitleIndex64 r8 ObjectAttributes65 rdx DesiredAccess66 rcx KeyHandle67 68 fffff880`03b0f8b0 fffff800`0413e19e nt!CmCreateKey+0x2e169 fffff880`03b0fa20 fffff800`03e898d3 nt!NtCreateKey+0x2e70 fffff880`03b0fa70 00000000`76e314ea nt!KiSystemServiceCopyEnd+0x13 (TrapFrame @ fffff880`03b0fae0)71 72 73 一下子就可以看到寫哪個註冊表被彈窗了74 dt _Object_Attributes poi(fffff880`03b0f8b0+130+7*8+18)75 76 這塊或者這麼算 fffff880`03b0fa20-8+18
總結:
痛點1:windbg命令的掌握
痛點2:X64下面的參數傳遞有四個參數是通過寄存器傳遞的,如何從彙編代碼中把我們需要的參數找出來。
這裡我們需要從_Object_Attributes 裡面找出我們寫的敏感的註冊表索引值,是哪個索引值引起了殺軟彈窗
windbg使用實踐1_使用windbg調試殺毒軟體的彈窗