Netwalker malware deobfuscation - From PowerShell to EXE
最近開始上 Zero2Automated 這門課,覺得東西相當不錯,有興趣的話可以參考看看。
這篇會簡單介紹課程裡其中一個 Blog,是關於如何從 PowerShell deobfuscate 抓出原本的 malware並且繼續分析。
本魯道行不夠,先寫基本如何抓到exe檔案 😅
前言:
Malware 開發者為了避免自己辛苦寫出來的東西被輕易拿去分析,搞懂在做什麼,所以需要把sample給層層攪亂,增加分析的困難度
Sample hash: AAC57162DC1311F07A869F7163BD30E0D62DCC0E
*有好心人士提供了 sample:
https://app.any.run/tasks/2e6da4bf-0016-4d19-b5c2-4a84aeda8d90/
開始分析吧!
1. 用Text editor 打開 sample, 可以看到用了基本的Base64 + 大小寫變換的處理
InVokE-ExPRESSIoN -COMmand $([StrinG]([SySTEM.TexT.ENcOdInG]::ASCII.GETStRiNG([SysTEM.CoNVErT]::FRomBAsE64StRiNG("ICAgICBbYllURVtdXSAgICAgICAgICRlRkdDU2pXS0tQcUxHUElZcCAgICAgICAgID0gICAgICAgDQoNCg0KDQoNCg0KQCgweDY3LDB4NjcsMHgxQywweDI1.......QoNCg0KDQoNCg0KDQo="))))
2. 要處理不難,把中間那串丟到 https://www.base64decode.org/ 就可以,會得到以下的東西
[bYTE[]] $eFGCSjWKKPqLGPIYp = @(0x67,0x67,0x1C,......x32,0x2B,0x2B,0x4a,0x4d) for ( $qTOJScZVUn = 0; $QTOjsCZvUn -lt $eFGCSjWKKPQLGpIYP.LeNgth; $qtOJscZvUN++ ) { $EFGCSjWKKPqlGpIYP[$qtOJscZVUN] = $EFGCSJWkkPqLGPIYP[$QtOJscZvUN] -BxOr 0x47 } $pDJjNSNEwQy = [SYSteM.TExt.EnCODiNg]::ASCII.GEtStRIng( $eFGCSjWKkPQlGPIYP ) $UqYpIOZoleKuXXbA = [SCRiPtblOCK]::CreAtE( $PDJjNSNEWQy ) INVoKE-CoMMaND -SCRiptBLocK $UQYPIoZOLEKuXXBA
稍微看一下base64 decode後的結果,發現仍然是 powershell,作者相當用心.....繼續往下看並整理一下
for ( $qTOJScZVUn = 0; $QTOjsCZvUn -lt $eFGCSjWKKPQLGpIYP.LeNgth; $qtOJscZvUN++ ) {
$EFGCSjWKKPqlGpIYP[$qtOJscZVUN] = $EFGCSJWkkPqLGPIYP[$QtOJscZvUN] -BxOr 0x47
}
$pDJjNSNEwQy = [SYSteM.TExt.EnCODiNg]::ASCII.GEtStRIng( $eFGCSjWKkPQlGPIYP )
$UqYpIOZoleKuXXbA = [SCRiPtblOCK]::CreAtE( $PDJjNSNEWQy ) INVoKE-CoMMaND -SCRiptBLocK $UQYPIoZOLEKuXXBA
3. 這個PowerShell還是夾帶著一大串hex string,以及 XOR key 0x47,所以接下來要想辦法把這巨大的hex string做 XOR。
方法也不難,找一台Windows VM,打開 PowerShell ISE ,修改成下面圖片,執行後就會自己做XOR,在下方輸入變數名稱,PowerShell ISE就會把最後XOR的結果印出來
記得把最後一行註釋起來,不然會執行malware並且加密所有檔案!
記得把最後一行註釋起來,不然會執行malware並且加密所有檔案!
記得把最後一行註釋起來,不然會執行malware並且加密所有檔案!
發現還是PowerShell,作者相當用心呢
4. 稍微觀察一下這個PowerShell檔案,可以看到有兩個很巨大的變數
[byte[]] $ptFvKdtq=@(0xad,0xde,0x90,0x00,0x03,0x00,0x00,0x00,0x04,0x........
[byte[]] $GxwyKvgEkr=@(0xad,0xde,0x90,0x00,0x03,0x00,0x00,0x00,0x04,..........
為什麼??繼續往下看可以發現是因為作者相當貼心,32bits / 64bits 都要照顧到
分析到這,既然已經開始判斷32/64位元,代表真正的執行檔也離我們不遠了!
5. 寫個小script把hex string抓出來吧!
將bytearray存成檔案 (我存成netwalker.bin) 並且用sciprt讀取,轉成hex format最後再存起來
6. 當你喜孜孜想說可以用IDA來看,但卻發現IDA說這是普通binary?????
WTF???
7. 用 Text Editor 打開Dump出來的檔案,發現以下畫面
Yeah ~ 終於看到PE Format 啦! 防毒軟體也跟著逼逼叫呢。
簡單總結一下思路
PowerShell -> Base64 Decode -> XOR Decode -> Change Magic Byte -> Final EXE
若是想針對最後的PowerShell了解更多的話可以參考這裡大神寫的Blog
-0xbc
留言
張貼留言