关于杀毒软件弹窗的实现总结与分析_跟老大学习系列1
? 可供殺軟彈窗的點(diǎn)大體有下列幾個(gè)地方,我們可以使用windbg 來(lái)列出所有的handle和進(jìn)程的棧回溯來(lái)定位殺軟是使用了那種方式來(lái)進(jìn)行彈窗對(duì)用戶進(jìn)行誤導(dǎo)的。
?
1 通過(guò)kifastcallentry或者常規(guī)的SSDT 掛鉤實(shí)現(xiàn)的彈窗
2 文件過(guò)濾驅(qū)動(dòng)引起彈窗
!process 0 0 ? ? ? ? ? ? ? ? ? ? ? ? //列出所有進(jìn)程
.reload
!process fffffa800a04b3a0 f ? //列出指定進(jìn)程的所有的棧回溯
!irp ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//如果是因?yàn)獒尫琶舾形募粡棿笆褂眠@條命令觀察IRP ? ?
!fileobj ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //解析IRP里面的文件名
3 敏感注冊(cè)表寫入引起注冊(cè)表回調(diào)的彈窗
如果我們不清楚是因?yàn)槲覀冡尫帕嗣舾形募€是寫了敏感注冊(cè)表
?列出進(jìn)程的所有handle 看handle count 如果count 很小 就證明一出來(lái)就被抓了
!handle?0?7?86a94270 (這里是敏感進(jìn)程的EPROCESS)
這篇文章主要分析的是使用test_reg寫了敏感注冊(cè)表引起了殺軟彈窗
!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
列出所有的棧回溯 我們可以看到很多線程 證明這個(gè)彈窗不是由于進(jìn)程回調(diào)引起的 如果是進(jìn)程回調(diào)彈窗的話 創(chuàng)建第一個(gè)線程的時(shí)候就彈窗了。
?
首先貼一下完整的棧
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.000 10 KernelTime 00:00:00.015 11 Win32 Start Address 0x00000000004051a7 12 Stack Init fffff88003b0fc70 Current fffff88003b0ef20 13 Base fffff88003b10000 Limit fffff88003b08000 Call 0 14 Priority 11 BasePriority 8 UnusualBoost 0 ForegroundBoost 2 IoPriority 2 PagePriority 5 15 Child-SP RetAddr Call Site 16 fffff880`03b0ef60 fffff800`03e8f992 nt!KiSwapContext+0x7a 17 fffff880`03b0f0a0 fffff800`03e921af nt!KiCommitThreadWait+0x1d2 18 fffff880`03b0f130 fffff880`040239d9 nt!KeWaitForSingleObject+0x19f 19 fffff880`03b0f1d0 fffff880`04024c9b 360FsFlt+0x1f9d9 20 fffff880`03b0f250 fffff880`04026adb 360FsFlt+0x20c9b 21 fffff880`03b0f2f0 fffff800`04230100 360FsFlt+0x22adb 22 fffff880`03b0f320 fffff800`040ea16d nt!CmpCallCallBacks+0x1c0 23 fffff880`03b0f3f0 fffff800`04184d38 nt! ?? ::NNGAKEGL::`string'+0x2d3bd 24 fffff880`03b0f6f0 fffff800`04185f56 nt!ObpLookupObjectName+0x588 25 fffff880`03b0f7e0 fffff800`0413d8f8 nt!ObOpenObjectByName+0x306 26 fffff880`03b0f8b0 fffff800`0413e19e nt!CmCreateKey+0x2e1 27 fffff880`03b0fa20 fffff800`03e898d3 nt!NtCreateKey+0x2e 28 fffff880`03b0fa70 00000000`76e314ea nt!KiSystemServiceCopyEnd+0x13 (TrapFrame @ fffff880`03b0fae0) 29 00000000`0448e698 00000000`00000000 0x76e314ea 30 31 如果從CmCreateKey中 把 _Object_Attributes 拿出來(lái) 涉及到棧操作的只有這么多 32 33 PAGE:FFFFF80004180614 48 8B C4 mov rax, rsp 34 PAGE:FFFFF80004180617 4C 89 40 18 mov [rax+18h], r8 35 PAGE:FFFFF8000418061B 48 89 48 08 mov [rax+8], rcx 36 PAGE:FFFFF8000418061F 53 push rbx 37 PAGE:FFFFF80004180620 56 push rsi 38 PAGE:FFFFF80004180621 57 push rdi 39 PAGE:FFFFF80004180622 41 54 push r12 40 PAGE:FFFFF80004180624 41 55 push r13 41 PAGE:FFFFF80004180626 41 56 push r14 42 PAGE:FFFFF80004180628 41 57 push r15 43 PAGE:FFFFF8000418062A 48 81 EC 30 01 00 00 sub rsp, 130h 44 PAGE:FFFFF80004180631 4D 8B E8 mov r13, r8 45 46 參數(shù)傳遞是這樣的 多于四個(gè)參數(shù) 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 OPTIONAL 57 ); 58 59 60 堆棧 Disposition 61 堆棧 CreateOptions 62 堆棧 Class 63 r9 TitleIndex 64 r8 ObjectAttributes 65 rdx DesiredAccess 66 rcx KeyHandle 67 68 fffff880`03b0f8b0 fffff800`0413e19e nt!CmCreateKey+0x2e1 69 fffff880`03b0fa20 fffff800`03e898d3 nt!NtCreateKey+0x2e 70 fffff880`03b0fa70 00000000`76e314ea nt!KiSystemServiceCopyEnd+0x13 (TrapFrame @ fffff880`03b0fae0) 71 72 73 一下子就可以看到寫哪個(gè)注冊(cè)表被彈窗了 74 dt _Object_Attributes poi(fffff880`03b0f8b0+130+7*8+18) 75 76 這塊或者這么算 fffff880`03b0fa20-8+18?
、:X64下面的參數(shù)傳遞有四個(gè)參數(shù)是通過(guò)寄存器傳遞的,如何從匯編代碼中把我們需要的參數(shù)找出來(lái)。
這里我們需要從_Object_Attributes 里面找出我們寫的敏感的注冊(cè)表鍵值,是哪個(gè)鍵值引起了殺軟彈窗
轉(zhuǎn)載于:https://www.cnblogs.com/kmshhl/p/4104399.html
總結(jié)
以上是生活随笔為你收集整理的关于杀毒软件弹窗的实现总结与分析_跟老大学习系列1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【设置】关闭“照片分享隐私”通过蓝牙分享
- 下一篇: 第九节 信度、效度分析