提醒:本文最后更新于 152 天前,其中某些信息可能已经过时,请谨慎使用!
你似乎正在查看一篇很久远的文章。
为了你这样的访客,我特地保留了我的历史博文。不要笑话过去的我,用温柔的目光看下去吧。

浅谈白利用一

随着各个杀软防御查杀技术的逐渐成熟,云的日渐强大,传统的木马技术已经越来越力不从心了,目前来看,能存活下去的主要就是BOOTKIT技术和白利用技术,相对于前者来说,后者要简单而且容易的多。

白利用就是利用已经是白名单的文件来达到木马自身的目的,进入白名单的文件,又可分为木马作者利用社会工程学,欺骗杀软的分析人员,将木马混入白名单和,正常程序本身设计的缺陷导致存在被利用的可能。前者没办法,对于后者,却是可以进行改善的。

这里举个例子,一个白文件,MD5: 42d439aca2e29fe2539fce37eec2220, QQPCUrlLoader.exe,应该是QQ系列的一个文件

.text:00401000 GetQQPCMgrInstallDir proc near        
.text:00401000
.text:00401000 hKey            = dword ptr -10h
.text:00401000 cbData          = dword ptr -0Ch
.text:00401000 Type            = dword ptr -8
.text:00401000 var_4           = dword ptr -4
.text:00401000
.text:00401000                 sub     esp, 10h
.text:00401003                 mov     eax, dword_40D008
.text:00401008                 xor     eax, esp
.text:0040100A                 mov     [esp+10h+var_4], eax
.text:0040100E                 push    ebx
.text:0040100F                 lea     eax, [esp+14h+hKey]
.text:00401013                 push    eax             ; phkResult
.text:00401014                 push    offset SubKey   ; "SOFTWARE\\Tencent\\QQPCMgr"
.text:00401019                 push    80000002h       ; hKey
.text:0040101E                 mov     [esp+20h+hKey], 0
.text:00401026                 xor     bl, bl
.text:00401028                 call    ds:RegOpenKeyW
.text:0040102E                 test    eax, eax
.text:00401030                 jnz     short loc_401060
.text:00401032                 lea     ecx, [esp+14h+cbData]
.text:00401036                 push    ecx             ; lpcbData
.text:00401037                 push    esi             ; lpData
.text:00401038                 lea     edx, [esp+1Ch+Type]
.text:0040103C                 push    edx             ; lpType
.text:0040103D                 push    eax             ; lpReserved
.text:0040103E                 mov     [esp+24h+Type], eax
.text:00401042                 mov     eax, [esp+24h+hKey]
.text:00401046                 push    offset ValueName ; "InstallDir"
.text:0040104B                 push    eax             ; hKey
.text:0040104C                 mov     [esp+2Ch+cbData], 104h
.text:00401054                 call    ds:RegQueryValueExW
.text:0040105A                 test    eax, eax
.text:0040105C                 jnz     short loc_401060
.text:0040105E                 mov     bl, 1
.text:00401060
.text:00401060 loc_401060:                             ; CODE XREF: GetQQPCMgrInstallDir+30j
.text:00401060                                         ; GetQQPCMgrInstallDir+5Cj
.text:00401060                 cmp     [esp+14h+hKey], 0
.text:00401065                 jnz     short loc_40106F
.text:00401067                 push    0               ; hKey
.text:00401069                 call    ds:RegCloseKey
.text:0040106F
.text:0040106F loc_40106F:                             ; CODE XREF: GetQQPCMgrInstallDir+65j
.text:0040106F                 mov     ecx, [esp+14h+var_4]
.text:00401073                 mov     al, bl
.text:00401075                 pop     ebx
.text:00401076                 xor     ecx, esp
.text:00401078                 call    sub_401185
.text:0040107D                 add     esp, 10h
.text:00401080                 retn
.text:00401080 GetQQPCMgrInstallDir endp
.text:00401080
.text:00401080 ; ---------------------------------------------------------------------------
.text:00401081                 align 10h
.text:00401090
.text:00401090 ; =============== S U B R O U T I N E =======================================
.text:00401090
.text:00401090
.text:00401090 ExecuteQQPCMgr  proc near               ; CODE XREF: wWinMain(x,x,x,x)+65p
.text:00401090
.text:00401090 Dst             = word ptr -414h
.text:00401090 var_412         = byte ptr -412h
.text:00401090 var_4           = dword ptr -4
.text:00401090
.text:00401090                 sub     esp, 414h
.text:00401096                 mov     eax, dword_40D008
.text:0040109B                 xor     eax, esp
.text:0040109D                 mov     [esp+414h+var_4], eax
.text:004010A4                 push    40Eh            ; size_t
.text:004010A9                 lea     eax, [esp+418h+var_412]
.text:004010AD                 push    0               ; int
.text:004010AF                 push    eax             ; void *
.text:004010B0                 mov     [esp+420h+Dst], 0
.text:004010B7                 call    _memset
.text:004010BC                 push    edi
.text:004010BD                 push    esi
.text:004010BE                 push    offset Format   ; "\"%s\" %s"
.text:004010C3                 lea     ecx, [esp+42Ch+Dst]
.text:004010C7                 push    208h            ; SizeInWords
.text:004010CC                 push    ecx             ; Dst
.text:004010CD                 call    _swprintf_s
.text:004010D2                 add     esp, 20h
.text:004010D5                 push    1               ; nShowCmd
.text:004010D7                 push    0               ; lpDirectory
.text:004010D9                 push    edi             ; lpParameters
.text:004010DA                 push    esi             ; lpFile
.text:004010DB                 push    offset Operation ; "open"
.text:004010E0                 push    0               ; hwnd
.text:004010E2                 call    ds:ShellExecuteW
.text:004010E8                 mov     ecx, [esp+414h+var_4]
.text:004010EF                 xor     ecx, esp
.text:004010F1                 call    sub_401185
.text:004010F6                 add     esp, 414h
.text:004010FC                 retn
.text:004010FC ExecuteQQPCMgr  endp
.text:004010FC
.text:004010FC ; ---------------------------------------------------------------------------
.text:004010FD                 align 10h
.text:00401100
.text:00401100 ; =============== S U B R O U T I N E =======================================
.text:00401100
.text:00401100
.text:00401100 ; int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd)
.text:00401100 _wWinMain@16    proc near               ; CODE XREF: ___tmainCRTStartup+171p
.text:00401100
.text:00401100 Dst             = word ptr -210h
.text:00401100 var_20E         = byte ptr -20Eh
.text:00401100 var_4           = dword ptr -4
.text:00401100 hInstance       = dword ptr  4
.text:00401100 hPrevInstance   = dword ptr  8
.text:00401100 lpCmdLine       = dword ptr  0Ch
.text:00401100 nShowCmd        = dword ptr  10h
.text:00401100
.text:00401100                 sub     esp, 210h
.text:00401106                 mov     eax, dword_40D008
.text:0040110B                 xor     eax, esp
.text:0040110D                 mov     [esp+210h+var_4], eax
.text:00401114                 push    esi
.text:00401115                 push    edi
.text:00401116                 mov     edi, [esp+218h+lpCmdLine]
.text:0040111D                 push    208h            ; size_t
.text:00401122                 lea     eax, [esp+21Ch+var_20E]
.text:00401126                 push    0               ; int
.text:00401128                 push    eax             ; void *
.text:00401129                 mov     [esp+224h+Dst], 0
.text:00401130                 call    _memset
.text:00401135                 add     esp, 0Ch
.text:00401138                 lea     esi, [esp+218h+Dst]
.text:0040113C                 call    GetQQPCMgrInstallDir
.text:00401141                 test    al, al
.text:00401143                 jnz     short loc_40114A
.text:00401145                 or      eax, 0FFFFFFFFh
.text:00401148                 jmp     short loc_40116C
.text:0040114A ; ---------------------------------------------------------------------------
.text:0040114A
.text:0040114A loc_40114A:                             ; CODE XREF: wWinMain(x,x,x,x)+43j
.text:0040114A                 push    offset Src      ; "\\QQPCMgr.exe"
.text:0040114F                 lea     ecx, [esp+21Ch+Dst]
.text:00401153                 push    104h            ; SizeInWords
.text:00401158                 push    ecx             ; Dst
.text:00401159                 call    _wcscat_s
.text:0040115E                 add     esp, 0Ch
.text:00401161                 lea     esi, [esp+218h+Dst]
.text:00401165                 call    ExecuteQQPCMgr
.text:0040116A                 xor     eax, eax
.text:0040116C
.text:0040116C loc_40116C:                             ; CODE XREF: wWinMain(x,x,x,x)+48j
.text:0040116C                 mov     ecx, [esp+218h+var_4]
.text:00401173                 pop     edi
.text:00401174                 pop     esi
.text:00401175                 xor     ecx, esp
.text:00401177                 call    sub_401185
.text:0040117C                 add     esp, 210h
.text:00401182                 retn    10h
.text:00401182 _wWinMain@16    endp

这个程序会读取这个位置的键值,获取电脑管家的安装路径,然后不加校验的启动这个路径下的QQPCMGR.exe文件

[HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQPCMgr] "InstallDir"里的目录路径,拼上QQPCMGR.exe这个名字的文件,所以木马只要把这个QQPCUrlLoader.exe放到启动项里,然后把自己的要启动的程序改名为QQPCMGR.exe,同时将自己的路径写到注册表的这个位置,就可以达到开机启动自身的目的。而常规情况下杀软的启动项扫描只能扫到QQPCUrlLoader.exe的这个白文件,而扫不到被间接启动的木马文件,从而达到了绕过杀软扫描的目的。同时也告诉我们,在我们自己写程序的时候,加载或运行其他程序或模块的时候,是否是加载或运行所要的模块,还是可能被偷梁换柱的,最好应该加个校验,比如签名信息等。

发表评论

共有 0 条看法