.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模式中, 有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。这种加密方式简单快速,安全可靠,而且可以并行加密)。运行时解密,然后通过CLR加载运行,此外作者还使用了内存补丁的方式,绕过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