可以看到boo脚本已经成功的解析执行了,在dll的加载中我们可以看到它调用了ResolveEventHandler首先加载了zip包中的dll,然后通过File.ReadAllBytes(RuntimeEnvironment.GetRuntimeDirectory() + dllName);获取系统dll目录从系统目录里加载dll
C#内存加载Boolang进行进程Dump到这一步之后咱们怎么做到实际的免杀?其实这时候杀软从booTest.exe中就很难找到被查杀的特征了,加载boolang的过程是看不出威胁性的,有威胁性的代码都在test.boo中加载到了内存直接解析执行,这就是用Boolang的好处,下面我们找一个功能试一下。https://github.com/GhostPack/SharpDump/blob/master/SharpDump/Program.cs 这个项目功能就是使用MiniDumpWriteDump函数来做lsass进程的内存Dump,用Boolang更大的好处在于可以调试,它有Visual Studio插件还有IDE环境,比较好用的就是SharpDevelop 4.4,在安装的时候需要选择安装Boo语言
在新建解决方案中可以看到支持Boo的项目,在4.4中有一个功能就是可以直接将C#源码转换为Boo语言,我们新建一个C#文件,选择Empty File并将SharpDump源码粘贴进来
在Tools的Convert code to 选项处可以选择转换为Boo语言
在转换完成之后需要修复可能出现的Bug,比如这里就提示了在51行和37行不支持可选参数
经过分析后发现Minidump在cs源码中有一个默认参数-1
Boo
当未加上进程PID参数时会直接调用Minidump,实际上传递了默认参数-1。Minidump方法中进行了判断,当pid为默认的-1时会直接返回lsass相关联的进程资源数组,由于Boolang不支持默认参数,所以我们需要改一下传入一个-1即可。
其次在Boolang中duck为动态类型,所以关于动态类型赋值的地方需要修改为duck
在读注册表操作处将var类型改为duck
读文件操作处也可以用duck,但是因为明确返回为byte类型,所以也可以用byte,将var改为byte。
这时将文件保存到boo-master\bin目录下使用booc.exe进行编译
使用-h参数可以查看其用法
我们直接跟上boo脚本进行编译