Metasploit将payload生成exe文件的原理探讨

metasploit提供的工具msfpayload和msfencode都支持将payload生成exe可执行文件的格式,但具体的生成机制并没有文档说明,好在这些工具和库文件都是开源的,下面我们来一探究竟。

msfpayload源码中可以看到,参数X支持生成exe格式文件:

而参数X的处理例程如下:

主要是调用了Msf::Util::EXE库的to_executable方法,我们在这个中找到相应的函数如下:

 

最终调用了to_win32pe函数,下面我们来看看这个函数的一些关键地方:

这个函数设置了生成exe的模板文件的位置 跟踪这个函数发现模板文件使用的metasploit安装目录的msf3/data/templates /template_x86_windows.exe文件。鉴于生成的exe文件被杀得比较严重,这个模板文件多多少少也脱不了干系,我们可以找个”清 白”的exe文件来替换这个模板,注意别改文件名。别外msfencode的-x选项支持自定义模板。

 

这个函数利用汇编代码调用win32 api VirtualAlloc申请了一片可读可写可执行的内存块,并将原始payload拷贝到这里,以支持msfencode里调用各种编码器对原始payload进行处理。

然后就是pe格式解析,获得模板文件的PE可执行段(.text),判断其大小,并将其地址保存到mines数组中:

将text段分割成连续的块,将payload保存到最大的块中:

在其它块中生成大量的随机nops指令,随机生成pe的入口点,但需确保入口点在nops指令块中,在nops块的最后使用跳转指令跳转到payload地址执行。

 

最后是pe文件的构造,修改入口点为上面的入口点地址,修改时间戳,检验和等,并保存为exe文件。

归结起来,对模板文件的最大修改是将编码的payload保存到.text段中,生成nops指令和修改入口点,尤其是对入口点的随机修改有明显的人为痕 迹,这种exe的生成方式已经被大部分杀软列入黑名单中。 有兴趣的读者可以这样生成不带任务payload的exe文件并上传到virustotal上进行验证:

明白了原理,免杀就比较简单了,可以另外添加区段或不修改入口点直接将payload从入口点开始覆盖等,发挥你的聪明才智吧。

link:http://www.kissthink.com/archive/3695.html

本文由网络安全攻防研究室(www.91ri.org)信息安全小组收集整理,转载请注明出处。