.NET PE Crypter(nim學習系列)
.NET PE Crypter(nim學習系列)
0x01 免殺測試
安裝依賴庫:
nimble install nimcrypto
nimble install docopt
nimble install winim
編譯/使用:
nim c nimcrypt.nim
nimcrypt.exe --file Ladon.exe --key 123456 --output nimLadon
Ladon 7.0的免殺報告:
https://www.virustotal.com/gui/file/cc40246f0747940219e35cde4da1ccb825f7973a5fb2ffbd1ae9dca324b1466b
使用nimcrypt後的免殺報告:
可以看到免殺率已經由49/68下降到8/68,得到了很大的改善,但仍有進步的空間。
0x02 程式碼分析
先讀取PE檔案的內容,然後使用AES CTR模式進行加密(在CTR模式中, 有一個自增的運算元,這個運算元用金鑰加密之後的輸出和明文異或的結果得到密文,相當於一次一密。這種加密方式簡單快速,安全可靠,而且可以並行加密)。此外作者還使用了記憶體補丁的方式,繞過AMSI。
AES CTR模式:
原文在接收轉換命令列引數的地方,可以寫得更簡潔。
# Handle args
var cmd: seq[string]
var i = 1
while i <= paramCount():
cmd.add(paramStr(i))
inc(i)
var arr = toCLRVariant(cmd, VT_BSTR)
assembly.EntryPoint.Invoke(nil, toCLRVariant([arr]))
可以這樣
var arr = toCLRVariant(commandLineParams(), VT_BSTR) assembly.EntryPoint.Invoke(nil, toCLRVariant([arr]))
加入unhook.nim後
免殺報告如下,可以看到只剩下4個殺軟檢測出來了。
背景知識
什麼是AMSI?
Windows反惡意軟體掃描介面 (AMSI) 是一種通用介面標準,可讓應用程式和服務與計算機上存在的任何反惡意軟體產品整合。 AMSI 為終端使用者及其資料、應用程式和工作負荷提供增強的惡意軟體防護。
什麼是CLR?
CLR叫做公共語言執行時(Common Language Runtime),它是所有.NET應用程式執行時環境,是所有.NET應用程式都使用的程式設計基礎,它如同一個支援.NET Framework,執行一個.NET程式也必須安裝。公共語言執行時遵循公共語言架構的標準,能夠使C++、C# 、Visual Basic、以及JScript等多種語言深度整合。
專案地址
https://github.com/icyguider/nimcrypt
https://github.com/byt3bl33d3r/OffensiveNim/blob/master/src/unhook.nim