【逆向】GandCrabV2.0 勒索軟件分析


1、前言

        本次分析的是GandCrab勒索軟件2.0版本,因為版本較早病毒服務器已經涼涼了,所以動態分析的時候並不會加密本地文件,調試的時候可以直接跳轉到文件加密部分進行分析。另外除了勒索軟件的一些常規操作外,為了逃避殺軟檢測病毒還進行了如下操作。

1 // 從資源解密執行shellCode。
2 // 內存加載exe和dll文件,通過反射注入執行病毒關鍵代碼。
3 // 反調試和代碼混淆。

2、樣本信息

樣本名稱:GandCrab
樣本類型:Win32 EXE
樣本大小:308.51 KB (315912 bytes)
加殼信息: 無
微軟命名:Trojan:Win32/GandCrypt.GA!MTB
MD5 校驗值: f42774332fb637650ff0e524ce1b1685
SHA1 校驗值:0012363a8a6efdd93fbd4624ee5e8ddf1f7be8d5
SHA-256校驗值:15846ed8f38c0fac876b96a9d2eb55c3c98a428147ae372ade22efb854cfc4aa


 3、動態分析

行為概覽詳見哈勃:https://habo.qq.com/file/showdetail?pk=ADcGZF1tB2EIMVs%2FU2o%3D


 4、詳細分析

4.1 流程圖

4.2 模塊一:GandCrab

從資源段中讀取數據,解密后獲取shellCode,然后執行shellCode進行后續操作。

分析過程中會遇到大量無意義的函數調用和耗費時間的代碼,可以nop掉或直接跳過。

1 //可以通過以下方法判斷一個函數是否是正常被調用:
2 函數參數是否正確
3 返回值是否被后續代碼正確使用或引用

動態獲取GlobalAlloc和VirtualProtect函數地址,拷貝加密資源數據

修改內存屬性,解密並執行

Dump下shellCode方便IDA分析

4.3 模塊二:shellCode

shellCode部分我沒有在原文件中繼續執行,而是使用Dump下來的數據自己寫了個Demo進行加載。

shellCode部分主要執行的功能就是從自身數據中解密出新的PE文件,然后修復PE文件IAT和重定位,最后跳轉到PE文件入口點繼續執行。

分析過程中IDA識別了大部分函數,但是Main函數因為有花指令和棧針不平衡的問題不能F5,可以按照以下方法進行修復。

1 //下面簡單說下修改步驟,修改后就能F5查看偽代碼了。
2 在地址0x3C處按快捷鍵“U”取消函數定義,按“C”重新定義代碼。
3 將地址0x38-0x3B處的數據修改為“0x90”,按“C”轉換為NOP指令(IDC: PatchByte(0x38,0x90))。
4 重復步驟2,修改地址0x49-0x4B處的代碼。
5 鼠標選中地址0x5-0x4C處代碼,按“P”創建函數。
6 按“ALT+P”修改函數end地址:0x82F

 

利用"GetProcAddress"動態獲取其他函數地址。

 申請緩沖區,解密PE1文件,解密后Dump下PE1文件保存到本地,后面拷貝PE頭和區段數據時可以使用010Editor打開Dump下來的文件使用模版進行對比分析。

 

修改自身內存屬性,並清空自身內存數據

拷貝PE1數據到自身內存空間,實現進程替換,這里以及后面的DLL文件都使用了內存加載的方式,全程無文件落地,大大減少了被殺軟靜態文件查殺的風險。

 

因為這里病毒直接使用內存加載了PE文件,而不是使用系統加載器進行加載,所以需要修復IAT導入表並對基址重定位進行修復。

 

修復完IAT和重定位表后,跳轉到程序入口點繼續執行。  

4.4 模塊三:PE1.EXE

 模塊三執行的代碼和模塊二類似,都是從自身解密新的PE文件,修復后執行,唯一不同的是這次釋放的是一個DLL文件。

由於DLL文件的特殊原因,它不能像模塊二的EXE文件一樣拷貝數據到自身修復后就能直接執行,正常情況下一個DLL文件需要被加載才能正常執行代碼。這里病毒使用了反射DLL的技術。

1 //區別:
2 常規DLL注入:dll文件必須在本地磁盤上,通過(CreateRemoteThread + LoadLibrary)加載。
3 反射DLL注入:dll文件只需要在內存中,通過(內存中解析PE頭,調用自身導出函數)加載。

 解密PE2.DLL文件,老規矩將解密后的文件Dump下來,使用IDA進行分析。

 

 接下來,解析PE文件獲取導出函數,進行調用。實際分析中像“獲取導出函數偏移”這種函數可以根據上下文和返回值猜測函數功能,然后調試驗證,沒有必要詳細分析。

 

分析導出函數時,可以直接使用OD和IDA對Dump下來的DLL文件進行調試。
修改IDA的模塊加載基址和OD中的一致,查找關鍵代碼后直接在OD中進行跳轉,能夠加快分析進度。
另外由於DLL文件沒有通過加載器加載,病毒需要解決無法確定模塊加載基址和調用系統API的問題。

 

通過PEB獲取“LoadLibraryA”等函數地址。

接下來的操作與模塊二基本相同,申請緩沖區,拷貝DLL文件(PE頭,區段)數據,修復IDA,基址重定位等。這里不在贅述。

最后調用dllMain函數執行病毒關鍵操作。

4.5 模塊四:PE2.DLL

4.5.1 初始化

初始化部分主要是獲取系統信息,通過系統信息創建互斥體,然后檢測殺軟驅動,自拷貝到系統目錄,設置注冊表自啟動,最后生成RSA密鑰對並導出。

 獲取系統信息(ip,用戶,分組等),拼接字符串后創建互斥體。

 

 

檢測卡巴等殺軟驅動(klif.sys, fsdfw.sys,srtsp.sys,srtsp64.sys,NavEx15.sys,NavEng.sys)。

 

生成隨機文件名自拷貝到系統目錄,設置注冊表自啟動。

創建注冊表自啟動。

結束指定進程,防止加密時文件占用。

創建並導出RSA密鑰對。

4.5.2 網絡連接

通過"nsLookup"解析服務器IP,發送主機信息和RSA密鑰對,接收http數據(循環執行,知道發送成功為止)

獲取本機外網IP地址

Base64加密RSA公私密鑰對,與系統信息進行拼接。

自定義算法加密拼接后的數據。

將自定義加密后的數據,使用Base64再次編碼。

創建nslookup進程解析服務器IP地址,使用管道讀取結果,然后發送。

4.5.3 加密數據

獲取盤符類型,過濾特殊磁盤后,為每個磁盤創建加密文件線程。

過濾系統目錄和sql文件。

創建勒索信息提示文檔。

開始遍歷目錄,加密文件。

過濾加密文件后綴,和指定文件。

拼接加密文件名稱,生成隨機數1和2,使用RSA公鑰加密2個隨機數。

 1 //種子
 2 73840630  47 61 6E 64 43 72 61 62 47 61 6E 64 43 72 61 62  GandCrabGandCrab
 3 
 4 //隨機數1
 5 0012F48C  78 0D EE B3 BE 2E 8A D1 87 24 61 DC F0 8F 97 00  x.畛?娧?a莛彈.
 6 
 7 //RSA加密后
 8 01980000  EB 9E A8 6F 7B 95 04 5F BD 62 3F 06 EF A1 A0 E2  霝╫{?_絙?鎩犫
 9 01980010  E7 CC D1 2A E3 14 F4 DC C8 B7 1A 44 2A 7C 58 BA  縑??糗確D*|X?
10 01980020  AD 2F 09 AC DF B6 ED FC 96 B9 0F 92 49 D2 4E 2F  ?.俄鼥?扞襈/
11 01980030  1D D4 AD 5E BC E5 47 F9 EB 67 B7 B4 67 5F 00 C1  原^煎Gg反g_.?
12 01980040  5E B2 95 4A 94 1D 9A DA 56 D1 BC 7F EF AE 19 88  ^矔J?氌V鴨鋰?
13 01980050  ED 15 70 63 E6 16 72 00 EB 10 78 08 67 BD C0 BD  ?pc?r.?xg嚼?
14 01980060  80 79 C6 18 F8 D8 7E E7 5B B9 C2 63 49 77 61 A7  €y?~鏪孤cIwa?
15 01980070  9A 56 EB 4F 5D 67 DF 12 18 8F 30 38 9B C3 27 B4  歏隣]g??8浢'?
16 01980080  65 B3 68 BE 88 F6 AD 34 E5 AF B3 2C 3F 56 61 81  e砲緢霏4瀵??Va?
17 01980090  15 E3 9F CC 88 D6 20 5D D6 99 67 8A 1A 77 53 40  銦虉?]謾g?wS@
18 019800A0  2A 61 E5 72 D6 D1 CF FF 1C 7B 1F A0 8E F3 1C E4  *a錼盅?{爭??
19 019800B0  CF 1A 1D FE 6A 3F 3A FA 8A 12 B7 89 BB 66 39 80  ??:鷬穳籪9€
20 019800C0  AC 38 39 45 2A 0C EA C5 D3 FE AF 01 9F C4 28 2F  ?9E*.昱譽?熌(/
21 019800D0  49 21 B2 EA BC 83 72 80 EC ED B8 F6 D8 0D 43 03  I!碴純r€祉個?C
22 019800E0  11 DB 20 F4 75 81 66 45 9C 29 66 51 97 63 C6 A3  ?魎乫E?fQ梒疲
23 019800F0  15 AF 20 C1 36 17 D3 19 30 6D 74 D1 18 78 B1 20  ???0mt?x?
 1 //種子
 2 0012F468  47 61 6E 64 43 72 61 62 47 61 6E 64 43 72 61 62  GandCrabGandCrab
 3 0012F478  47 61 6E 64 43 72 61 62 47 61 6E 64 43 72 61 62  GandCrabGandCrab
 4 
 5 //隨機數2
 6 0012F468  5B 2D 4C 2E CB 87 20 A8 0C 40 81 B1 88 C7 7B AF  [-L.藝 ?@伇埱{?
 7 0012F478  44 D2 3E F4 B3 43 A1 FB 4F 6F 14 F8 26 82 6F D6  D?舫C←Oo?俹?
 8 
 9 //RSA加密后
10 01970000  C9 5A C1 8E 2D 09 A1 C4 3A A2 7F AC 05 F8 4D 7A  蒢翈-.∧:??鳰z
11 01970010  F4 B3 A9 BA 91 5E 19 94 CB 14 09 C2 DF DA 4F 2C  舫┖慯斔.邏貟,
12 01970020  1B 24 EE EB B1 7B DF 2F E5 F2 39 23 3F C3 17 D0  $鈹眥?弳9#???
13 01970030  0E 7F 52 9F 6F 6A 29 DE A2 4B 26 D4 97 48 7D 0F  R無j)蔻K&詶H}
14 01970040  51 9F 9A 74 92 C3 57 5C 4F 2E FD 9E FE 2D B2 7A  Q煔t捗W\O.秊?15 01970050  CD FF A0 22 07 10 D2 62 99 7A EE 6D 01 B5 38 42  ??襜檢頼?B
16 01970060  2C F9 C3 14 C8 58 95 7F 8A 69 CB 75 63 AE 71 89  ,萖?奿藆c畄?
17 01970070  50 4C 0D EE B4 87 23 37 D4 23 9D 21 50 05 07 5A  PL.畲?7??PZ
18 01970080  67 09 9D C9 AA F0 EA ED A4 C7 E1 8A E4 F7 A3 66  g.澤覯で釆澉
19 01970090  5F 5E 91 5F 3E CF 13 2C 9B BF 66 8D FD D4 6C D8  _^慱>?,浛f嶟詌?
20 019700A0  4A 37 59 84 45 C0 2D 42 B6 68 44 9E 6B F3 18 F3  J7Y凟?B秇D瀔??
21 019700B0  9E 5C C5 28 7B BB 70 0A 79 B4 4C B4 32 42 7B 87  瀄?{籶.y碙?B{?
22 019700C0  89 9E 4E 7E BA D4 AB D0 5D 79 17 D0 BF 16 CE 64  墳N~涸]y鋅蝑
23 019700D0  24 3B F8 80 93 2A 6A CE 37 C1 5D 9B E2 7C FB 91  $;鴢?j?羃涒|24 019700E0  A5 1F 00 65 D6 7F 85 28 7B 3C 19 65 01 59 EA 0F  ?.e??{<eY?
25 019700F0  30 6C 91 43 38 A3 F2 67 36 D4 B9 CA BB C7 3E 7A  0l慍8rg6怨駛?z

打開待加密文件,讀取文件內容,使文件大小是16的整倍數。

加密完成后,將數據按4個部分進行寫入,最后替換原文件。

 加密算法部分:

1. 將待加密數據與隨機數1進行異或。

 2. 將數據與隨機數2再次進行異或操作,然后使用作者自定義的代碼進行最后加密。

1 //異或前數據:
2 01A30000  31 32 33 34 35 36 37 38 39 30 "1234567890" 
3 
4 //異或后數據:
5 01A30000  6D EE 71 7F 36 F8 AA 8C 51 BD 06 56 EA F8 C4 40  m顀6孮?V犋腀
6 
7 //加密后數據:
8 01A40000  3B B6 37 D8 45 83 71 B2 EE 17 CB EF 3A 94 26 BA  ;?谽僸差孫:??

加密完成后,按以下順序將數據寫入文件。

 加密完成后還剩一些自刪除等常規操作,這里不再贅述了。

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM