【2018-10-30】粗略分析某感染性病毒樣本

樣本下載

樣本原文件 連接
個人分析過程文件 連接
提示:請勿實體機分析編程

文件信息收集

查看文件類型,標準的PE頭編程語言

clipboard.png

更名後使用查殼工具查看是否有殼編輯器

clipboard.png

總共3個區段,不清楚是什麼殼!也不清楚是用什麼編程語言寫的函數

使用IDA加載,查看是否有關鍵字符串信息工具

clipboard.png

clipboard.png

看來字符串之類的也被加密或者壓縮了測試

動態分析-脫殼

因爲不清楚是什麼殼,因此只有嘗試多種通用脫殼的辦法:諸如單步法,ESP定律以及最後一次異常法!失敗的過程就不贅述了,最終是用最後一次異常配合單步找到的OEP,以下,首先取消勾選全部的忽略異常選項加密

clipboard.png

而後Shift+F9忽略異常運行,運行8次以後會到0x430EF1這個位置進行一個很大的循環,是爲了找到kernel32的基址,這時候在下一行下斷運行便可spa

clipboard.png

以後再單步F8,程序跑飛就返回來下個斷點從新運行,而後F7進入這個函數內部,跟個幾分鐘就會到jmp oep的地方操作系統

clipboard.png

段間大跳轉確定是OEP了,使用Ollydump先dump內存線程

clipboard.png

而後用Scylla修復導入表,最終完成脫殼

clipboard.png

脫殼後的程序入口

clipboard.png

clipboard.png

動靜結合分析脫殼程序

初始化操做,包括獲取模塊句柄以及註冊句柄

clipboard.png

該病毒最開始進行的關鍵操做就是分離原始PE文件,由於原始文件實際上是由一個病毒體+一個註冊表編輯器組成的,因此須要分離
(1).讀取病毒體的所有內容到緩衝區

clipboard.png

(2).建立」 C:\WINDOWS\uninstall\rundll32.exe」這個文件,並把以前緩衝區的內容寫入到這個文件中,即病毒體寫入rundll32.exe

clipboard.png

(3).寫註冊表,讓C:\WINDOWS\uninstall\rundll32.exe實現自啓動

clipboard.png

(4).建立C:\WINDOWS\Logon1_.exe文件,而且寫入病毒體

clipboard.png

(5).病毒體文件的大小問0x115D5,因此原文件的指針偏移0x115D5以後就是註冊表編輯器的全部數據

clipboard.png

(6).而後在桌面新建a.exe.exe,把文件指針指向的地址起復制數據到a.exe.exe中,而且刪除原文件a.exe,以後重命名a.exe.exe爲a.exe以實現文件分離

clipboard.png

clipboard.png

殺掉程序中全部跟殺毒相關的進程以及服務
(1).先建立查找到的殺毒進程,再kill掉

clipboard.png

(2).調用cmd來中止殺軟服務諸如:金山的服務,江民殺毒服務等等

clipboard.png

(3).建立線程繼續殺毒,以及關閉系統聲音

clipboard.png

clipboard.png

Temp目錄下寫入bat文件以及建立進程運行
(1).建立文件C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\\$$a13.bat

clipboard.png

(2).解密字符串後寫入內容到$$a13.bat中

clipboard.png

(3).建立進程運行該bat文件

clipboard.png

(4)關閉本程序的進程,建立C:\WINDOWS\Logon1_.exe進程以及修改後a.exe即註冊表編輯器運行

clipboard.png

加載自定義dll實現下載其它病毒文件
(1).解密下載連接,大概十來個這樣子的"http://down.97725.com/downma1.exe"

clipboard.png

(2).在一個線程對應的函數中,先訪問資源文件dll1.dll,再建立C:\WINDOWS\RichDll.dll而後將dll1.dll寫入到Richdll.dll中

clipboard.png

(3).加載資源管理器來加載這個Richdll.dll

clipboard.png

(4).寫註冊表實現開機自動加載dll

clipboard.png

建立一個線程,在線程中建立desktop.ini寫入時間而且遍歷Z盤文件
(1).建立C:\_desktop.ini文件,並寫入當前時間

clipboard.png

(2).獲取Z盤類型,方便後續操做

clipboard.png

(3).遍歷Z盤中的全部文件

clipboard.png

(4).設置每一個文件的屬性爲共享可寫

clipboard.png

再次建立一個線程,在線程中主要是建立套接字,發送ping測試,嘗試鏈接局域網以及枚舉共享文件夾中的文件
(1).建立套接字以及發送hello,world測試,須要加載icmp.dll使用其中的API

clipboard.png

clipboard.png

(2).爆破嘗試鏈接局域網

clipboard.png

(3).獲取本機計算機名

clipboard.png

(4).枚舉局域網共享文件夾中的共享文件

clipboard.png

(5).進入消息循環,收到結束消息後會釋放資源關閉句柄

clipboard.png

關於Win7不能運行該程序

崩潰點就在於遍歷系統dll時,地址訪0崩潰,而xp沒有崩潰的緣由在於遍歷的第一個就是kernel32成功命中,win7崩潰就在於遍歷的時候遇到了不能尋址的地址,下面圖片中這個偏移計算其實就是IAT的內存搜索,由於IAT中有一個字段是該dll的名稱。但不是全部的dll都有導入表結構,當遇到沒有導入表結構的dll的時候上述尋址很容易遇到訪問地址崩潰

clipboard.png

關於爲何xp能從kernel32開始遍歷,而win7卻從ntdll附近開始遍歷,並遍歷地址往高地址走,win7不可能訪問到kernel32這個模塊,緣由很簡單:

clipboard.png

這個賦值寫死了0x77000000,根據xp賦的值,win7賦值應該小於0x74000000

clipboard.png

歸根結底就是操做系統不同,模塊加載的地址不同,寫死地址兼容性就不高

END

相關文章
相關標籤/搜索