樣本下載連接html
基本文件信息
ExeInfo 查看文件信息,PE32位且有殼
sql
Ollydbg 入口點代碼以下shell
脫殼後單步跟到OEP,dump內存修復IAT
,成功脫殼後用 Die 查看編譯語言爲 Delphi7dom
IDA 和 OD 的入口代碼函數
反沙箱手段工具
複雜的消息循環,使用了定時器消息,以及自定義 SendMsg,發送大量消息,使程序的運行時間延長佈局
長時間消息循環到達核心代碼區,裏面又有許多的動態解密函數以及大量的GetDC
和GetStockObject
,既消耗了必定的時間又消耗了大量的內存資源測試
最關鍵的手段仍是一個 Sleep(),Sleep了4分鐘
加密
釋放文件spa
程序的不少代碼都是動態解密的,不用跟具體的解密過程,直接在 call 跳轉時下斷便可。如圖在釋放文件的關鍵call下斷
,注意先 Patch 掉以前的 Sleep
F7 跟過去分析,發現先是獲取了一些 API,而後建立一個進程,再是寫入數據到子進程
使用ODScript的dma指令dump
這段內存,而後IDA打開靜態分析!先是GetProcAddress
獲取多個 API 的地址,而後CreateProcess
建立自身路徑所在的一個進程,傳入CREATE_SUSPENDED
使其掛起,利用ZwUnmapViewOfSection
卸載原來全部區段以及RtlZeroMemory
將內存區域置0,VirtualAllocEx
配合WriteProcessMemory
寫入新的數據,利用SetThreadContext
和ResumeThread
修改程序的入口點,且恢復掛起進程運行
Tips:dma指令很簡單的: "dma start,size,path"
提取病毒體
在WriteProcessMemory
下斷,發現寫入的是一個完整的 PE 文件
利用 dma 指令提取了總共9段數據,而後新建 PE 文件,手動對齊文件偏移,更改節區的正確偏移量以及節區的可執行屬性,最後提取出了病毒體!P.S.以後我用PCHunter提取出整段內存而後再去對齊偏移也是能夠的
第一部分總結
原程序首先是加了殼,而後擁有大量的混淆手段,如圖用ProcessMonitor
檢測到只會讀取某些註冊表的值並無寫註冊表,更沒有其它危險的操做,所以能過不少的殺軟!又使用了Sleep
等延時手段過掉很大一部分的沙箱分析,再者程序執行核心病毒的手段也很隱蔽,利用傀儡進程寫入新的PE文件並更改入口點執行,讓核心惡意代碼很難被殺軟檢測到
基本文件信息
PE32位程序,總共8個節區,有個自寫的殼
脫殼文件信息
這殼好脫,簡單的異或加密殼,3個jmp eax
下斷便可到 OEP,而後dump以及修復IAT
,找到的 OEP 以下
腳本去花
脫了殼以後拖入 IDA 發現 F5 失效,由於代碼的每一個jnz和jz
以後有一段垃圾指令,干擾了 IDA 等反彙編工具的彙編,寫了個IDAPython
去除花指令以後就可以反編譯了,代碼以下
def patch_junkcode(addr): data = list(get_bytes(addr,4)) if(ord(data[0]) == 0x75 and ord(data[1]) == 0x5 and ord(data[2]) == 0x74 and ord(data[3]) == 0x3): for i in range(4,10): patch_byte(addr+i,0x90) base = 0x401000 len = 0x414C00 - base for i in range(len): patch_junkcode(base+i) print 'Finished!'
病毒執行流程
遍歷系統進程,關閉"msftesql.exe","sqlagent.exe","sqlbrowser.exe"等多個特定進程
打開一個互斥體,同步與父進程的內存數據操做
使用VerifyVersionInfoW
函數判斷操做系統大於Win7
,不然退出程序
使用GetSidSubAuthority
函數判斷當前用戶的權限在Low
以上
先是建立位圖寫入數據,其實數據是以後的shellcode
,這麼作是爲了隱蔽這段 shellcode
獲取 shellcode,調用ZWQueryIntervalProfile
提高當前用戶權限爲系統權限,提權原理相關連接
判斷操做系統爲Win10
,利用不久前Task Scheduler
的一個0day
提權,先是獲取StartXpsprintJob
的地址,提權原理相關連接
以後連接到printconfig.dll
來觸發漏洞,而後提高爲系統權限
判斷操做系統大於 Win7 以及用於權限大於 Low 以後,獲取自身完整路徑,使用GetShortPathNameW
來避免Unicode
路徑的影響,以後利用wmic
傳入路徑再次啓動自身
經過鍵盤佈局檢查區域,某些區域不會執行以後的代碼,直接會刪掉本身而後退出
經過默認的語言判斷區域
一堆花裏胡哨的操做,就爲了建立一個互斥體!好像做者在嘲諷 ahnlab,這個不太瞭解
解密了一些數據,以後初始化 Key 的時候用到了
經過註冊表檢查了當前用戶組,所在地區,操做系統,系統版本號,CPU信息,以及磁盤類型和磁盤容量
,最重要的是查找了一些常見的殺毒進程
,但僅僅是查找
使用CryptGenRandom
生成隨機數,運算後獲得幾個寬字符,取六個以後轉換爲大寫,拼接到文件名。P.S.文件名就是指導你付款的那個文件的名稱,諸如:TZYLVF-DECRYPT.txt
使用CryptGenKey
生成RSA
的公私鑰對,以後用CryptExportKey
導出到內存中
建立HKEY_LOCAL_MACHINE\\SOFTWARE\\keys_data\\data
再建立public
和private
,將以前的公鑰和公私鑰對分別寫入這兩個子鍵中
解密出以後要寫入XXXXXX-DECRYPT.txt
中的字符串,至關於給用戶的說明書
第一個線程會遍歷局域網共享文件
第二個線程會遍歷本地有效磁盤以及移動存儲設備
遍歷局域網與遍歷本地採用的方法都是相同的,先判斷磁盤的有效性,有效則進行下一步遍歷!下一步則必須先知足不是.
以及..
,而後獲取當前目錄的屬性,是文件夾的話則遞歸遍歷,SQL目錄會進行單獨處理,直到遍歷到文件則利用以前的 RSA 公鑰加密
以前的說明書內容一直在內存中,還沒有寫入到文件。在每一個目錄遍歷開始時就在當前目錄創建一個文件,文件名就是以前的隨機字符,而後將內存中的說明書寫入文件!除此以外還會創建一個.lock
文件用於記錄加密時的時間
加密的白名單主要有三個,一是特定目錄下的文件不加密,諸如:Program Files,Windows,Boot等系統目錄
第二個就是特定的後綴不加密
,動態才能看獲得
第三個就是特定的文件不加密
當遍歷到非白名單文件時,便開始加密文件
加密完成後,刪除Shadow Copy
,防止普通用戶恢復刪除的未加密原文件
先建立位圖再寫入顏色數據,以後新建文件寫到文件中,文件在Temp
目錄下,最後使用SystemParametersInfoW
設置該圖片爲桌面背景
建立一個線程,先是解密出網址信息
而後隨機選取字符串拼接網址
我測試時拼接的字符串是http://www.2mmotorsport.biz/includes/pics/zurukafu.jpg
,最後向這個網址發送一個POST請求
病毒加密文件完成後會調用cmd延時5s
再刪除本身
第二部分總結
上述的執行流程是病毒體的順序執行流程
,這個勒索病毒主要是釋放時很是隱蔽很差定位,dump 出的病毒體也有花指令影響靜態分析,不過 IDAPython 能去除花指令!雖然如此這病毒的主體仍是如此複雜,各類判斷使得病毒的抗干擾性異常強大
,能夠運行在 Windows 不一樣的版本以及運行在不一樣的國家!一個字形容:強!