其他
编者注:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责。前言众所周知,对shellcode免杀是很流行的技术,但是直接对exe的免杀方法相对稀缺,如果我们能将exe转为shellcode,然后用shellcode免杀那一套就会简单许多。所以shellcode转exe是一个很值得研究的课题。下面我将大概讲解一下pe2shellcode这个开源项目的思路。Github项目地:https://github.com/hasherezade/pe_to_shellcode。代码分析我们先看看它的项目结构,主要模块有Injector、Runshc、pe2shr。1Injector该文件夹下存在一个main.cpp。这是一个简单的远程shellcode注入的代码,用于将我们的恶意代码注入到其它进程。关于进程注入这里就不赘述了,想学习进程注入的朋友们可以关注一下这位师傅(https://modexp.wordpress.com/)。2Runshc主文件main.cpp。这是个最基本shellcode加载器,可以看出来Injector和Runshc都是给PE转成shellcode之后测试用的,测试shellcode是否能成功运行。然后就是libpeconv。这个工具也是非常经典,拿来用和学习pe结构都特别好(https://github.com/hasherezade/libpeconv),这个工具可以用来处理解析PE文件,可以用以替代windows的Createprocess制作Runshc和pe2shr。很巧的是,pe2shr里面的stub.bin是作者用汇编实现的一个简易版的libpeconv。3pe2shr然后就是文章主角pe2shc,利用了stub32.bin、stub64.bin和main.cpp。stub32.bin和stub64.bin是一个作者用汇编写的一个peloader。接着打开main.cpp看看作者怎么实现的pe2shellcode。前面就是对参数的处理,比如获取需要处理的原生pe路径,设置输出的shellcode路径,然后就是步入is_supporte_pe函数。可以看到有三点:1、必须要有重定位表2、不能是控制台应用程序3、不能是.net程序,.net的pe结构不同之处在于pe头中的IMAGE_OPTIONAL_HEARDER:这个结构中的数据目录DataDirectory包括了映像文件中的CLR头的RVA和大小。而stub并没有处理.net形式PE的代码。