0x00 樣本信息
樣本名稱:eef83497e8aa02d644b7d071be81a678e1611aa6
MD5:5853957178FE89022855A530A4B0AA20
SHA-1:60AF429E4AFF32E49405DF04710F41757D30F4F0
創建時間:星期一 01 七月 2019, 13.55.28
殼:UPX
0x01 測試環境及工具
環境: Windows 7 x86
工具: OD,IDA,PEiD,火絨劍。
0x02 樣本行爲
樣本運行後,首先調用一些啓動函數,獲取相關信息和進行初始化,然後進行PE文件校驗,跳到shellcode地址去將原PE文件拷貝並修改,然後加載動態庫並獲取相關函數地址,之後殺死舊進程,新的進程會遍歷文件,將一些特定文件進行加密,後綴爲.litar,並且留下勒索信息。
0x03 行爲詳細分析
查殼:使用PEiD查殼,發現是UPX殼。
直接脫殼。
OD加載程序,停在sub_412CC7處,發現就是獲得一些系統時間等信息,繼續往下分析。發現就是一些啓動函數的初始化行爲,進行簡單分析。
對PE文件進行校驗。
執行到sub_4126B0(),初始化之後需要用到的函數地址。
獲得病毒的文件路徑。
“”“C:\Users\Shine\Desktop\脫殼\eef83497e8aa02d644b7d071be81a678e1611aa6"”"
獲取所需環境變量。(簡單列舉幾個)
(UNICODE “USERSPROFILE=C:\ProgramData”),…
獲取病毒文件信息
獲得環境變量和文件信息後,繼續執行初始化操作。
進行一些初始化,初始化一些全局變量和調用一些驅動器掛載、註冊表相關的處理函數,這裏不做詳細詳細說明。
Shellcode
之後發現了一段用來解析和執行shellcode的代碼
我們在OD中,進入shellcode地址。
加載動態庫,獲得之後要使用的函數地址。
進入第二個函數內,先申請一塊內存,並修改內存屬性,修改爲可寫的。
修改PE區段信息並拷貝保存
前面的修改內存屬性,爲之後的修改PE區段信息做準備。
現在開始修改。將原區段信息拷貝到剛纔申請的內存當中。
PE文件區段包括.text、.data、.rdata、.rsrc、.reloc段。
拷貝函數內部實現。
拷貝完成之後,釋放內存。
接下來的操作是頻繁地加載動態庫,獲取函數的地址
例如:
eax=0045A154 (eef83497.0045A154), ASCII “InternetCloseHandle”
EAX 0045A12C ASCII “InternetOpenUrlW”
EAX 76601C80 WININET.InternetReadFile
EAX 0045A17E ASCII “HttpQueryInfoW”
eax=0045A1C4 (eef83497.0045A1C4), ASCII “PathFindExtensionW”
eax=0045A204 (eef83497.0045A204), ASCII “PathFileExistsA”
eax=0045A250 (eef83497.0045A250), ASCII “GetCommandLineW”
eax=0045A262 (eef83497.0045A262), ASCII “CreateFileA”
eax=0045A270 (eef83497.0045A270), ASCII “FindFirstFileW”
eax=0045A282 (eef83497.0045A282), ASCII “SetFilePointer”
eax=0045A2D0 (eef83497.0045A2D0), ASCII “CreateProcessW”
eax=0045A2E4 (eef83497.0045A2E4), ASCII “CreateDirectoryW”
再殺死進程,並退出進程。
進行完這一系列操作之後,此時我們發現病毒文件原OEP處的代碼已經發生了改變,說明我們已經成功覆蓋了原PE文件的信息,並且執行新進程。
shellcode裏除了拷貝覆蓋PE文件,還實現了調用動態庫和獲取函數地址,這樣的好處是在IDA中無法分析,只能通過動態調試進行分析。
從shellcode跳回代碼段。
我們發現程序中有一些反調試手段,例如IsDuggerPresent()
我們可以手動dump到BeingDugged的位置,進行修改。以繞過調試,後面可能還有很多相關的反調試,我們直接使用插件phantOm搞定。
這樣跟着調,定位不到關鍵點,我們直接將修改後的PE文件dump下來,重新使用IDA和OD結合分析。
OD加載dump後的文件,首先還是一些初始化操作,這裏不做分析。
創建互斥體。
獲得文件路徑等信息。
遍歷文件和加密
遍歷文件。
加密過程
並且對後綴爲.dll、.reg、.lnk等文件不進行加密。
對特定後綴的文件進行加密。
進入加密函數。
打開文件,獲取文件大小,如果文件大小小於5,則關閉文件句柄,不進行加密。
文件大小大於5,進行處理,並加密。
進行加密。
追加硬編碼信息。
加密結束後,添加後綴.litar,加密結束,此時主機中的文件已經被加密。
與此同時,還有勒索信息。