挖礦病毒分析之powershell解密小技巧
作者論壇賬號:A-new
近幾年挖礦病毒比較多,比較早的PowerGhost、驅動人生挖礦、近期還在繼續活躍的MyKing,檸檬鴨等病毒關鍵部分就是powershell腳本,前幾天看到有人求助分析一個檸檬鴨的樣本,也算是對自己分析解密powershell腳本的總結吧。
一、powershell腳本混淆的主要方法
1、隨機大小寫
powershell的特性不區分大小寫,這個只是讓看著眼花,就不用說了
2、字符串拼接
[Ref].Assembly.GetType('Sys'+'tem.Mana'+'gement.Aut'+'omatio'+'n.Am'+'siUtils').GetField('am'+'siInitFai'+'led','NonP'+'ublic,Static').SetValue($null,$true)
這一行代碼字符串用+截斷,這個還好點,只是看著不爽,把'+'全部剪切掉就好了
3、轉義符(反引號)
PowerShell 能夠識別的特殊字符
`0 Null`a 警報`b 退格`f 換頁`n 換行`r 回車`t 水平制表`v 垂直制表
轉義符號加在其他字符前不影響字符的意思,只要不在0,a,b,f,n,r,t,v的小寫字母前出現就是無意義的可以直接剪切掉,目前見過的混淆腳本很少遇到有意義的轉義字符
4、Ascii編碼
使用[char]xx 代替字符 如:[char]48代表0
5、base64編碼
這種用的最多一般都是把一些PE編碼比如開始提到的檸檬鴨,m.ps1和m2.ps1就是把32位和64位的mimikatz編碼到腳本中

這個提取也比較簡單010editor有個解密這個挺方便

直接decode就好了
6、逆序

這是檸檬鴨樣本if.bin中間解密出來的部分代碼很明顯這部分應該主要都是char]xx,從網上找了幾個逆序的東西都不行(可能是我太挫了沒找到)只能自己python抄幾行代碼還原了主要代碼如下
with open(in,'r') as f: k = f.read()y = list(k)y.reverse()de = ''.join(y) with open(out,'w') as fw: fw.write(de)
二、一個簡單方便的解密方法
根據powershell的特性基本都是用Invoke-Expression來執行執行腳本,根據微軟的說明

大多數腳本可以在文件頭或者結尾發現這個

把這個Invoke-Expression刪掉然后在腳本末尾加上|out-file “輸出文件”,或者直接>>輸出到文件就可以了。
基于powershell的特性Invoke-Expression的變形比較多,常見的有IEX、&( $psHOme[4]+$pshOme[34]+'x') 、$Env:ComSpec[4,26,25]-Join''、$ShellId[1]+$ShellId[13]+'x' 、$EnV:cOmSPeC[4,24,25]-jOIn''等,執行腳本的事要要注意。
三、總結
powershell還原其實并不太難,熟悉一下特性,有點耐心基本還是都可以解出來的,就是有點費眼,有些沒有腳本文件的直接通過命令行執行,提取命令行參數解密也一樣,系統日志也有powershell日志,也可以從日志里提,碰到過一次命令行參數太長,日志都記錄了十幾條才提取完整,總的來說要有耐心。