1. 程式人生 > 其它 >.NET PE Crypter(nim學習系列)

.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後的免殺報告:

https://www.virustotal.com/gui/file/a5f5738d6b2a361ab604b954f9715c6b8ae228716ea6567d48af0e8be1196712?nocache=1

可以看到免殺率已經由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個殺軟檢測出來了。

https://www.virustotal.com/gui/file/18640f7067993799c260eda63c4438abe5f6d13b551404a63569d5620f120057?nocache=1

背景知識

什麼是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