.NET PE Crypter(nim学习系列)
.NET PE Crypter(nim学习系列)
0x01 免杀测试
项目地址:https://github.com/icyguider/nimcrypt
安装依赖库:
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模式中, 有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。这种加密方式简单快速,安全可靠,而且可以并行加密)。运行时解密,然后通过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个杀软检测出来了。
接下来可以做的事情:
- 随机化所有变量名和函数名
- 提供多种加密方法,并随机选择
- 提高多种压缩方法,并随机选择
- 提高多种输入shellcode的方式
- 使用一些规避杀毒软件的方法/技巧
- 使用syscalls
背景知识
什么是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
From: https://www.cnblogs.com/StudyCat/p/15991695.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步