.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后的免杀报告:

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

可以看到免杀率已经由49/68下降到8/68,得到了很大的改善,但仍有进步的空间。

0x02 代码分析

先读取PE文件的内容,然后使用AES CTR模式进行加密(在CTR模式中, 有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。这种加密方式简单快速,安全可靠,而且可以并行加密)。运行时解密,然后通过CLR加载运行,此外作者还使用了内存补丁的方式,绕过AMSI。

AES CTR模式:

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

unhook

免杀报告如下,可以看到只剩下4个杀软检测出来了。

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

接下来可以做的事情:

  • 随机化所有变量名和函数名
  • 提供多种加密方法,并随机选择
  • 提高多种压缩方法,并随机选择
  • 提高多种输入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

posted @ 2022-03-10 22:50  StudyCat  阅读(260)  评论(0编辑  收藏  举报