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

一、前言

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

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

二、樣本信息

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


 三、動態分析

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


 四、詳細分析

4.1 流程圖

4.2 模塊一:GandCrab

從資源段中讀取數據,解密後獲取shellCode,而後執行shellCode進行後續操做。服務器

分析過程當中會遇到大量無心義的函數調用和耗費時間的代碼,能夠nop掉或直接跳過。網絡

1 //能夠經過如下方法判斷一個函數是不是正常被調用:
2 函數參數是否正確 3 返回值是否被後續代碼正確使用或引用

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

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

Dump下shellCode方便IDA分析加密

4.3 模塊二:shellCode

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

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

分析過程當中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??P Z 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??{< e Y?
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  ;?谽僸差 孫:??

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

 加密完成後還剩一些自刪除等常規操做,這裏再也不贅述了。

相關文章
相關標籤/搜索