浅析Pe2shellcode

编者注:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责。

前言

众所周知,对shellcode免杀是很流行的技术,但是直接对exe的免杀方法相对稀缺,如果我们能将exe转为shellcode,然后用shellcode免杀那一套就会简单许多。所以shellcode转exe是一个很值得研究的课题。下面我将大概讲解一下pe2shellcode这个开源项目的思路。

Github项目地:

https://github.com/hasherezade/pe_to_shellcode。

代码分析

我们先看看它的项目结构,主要模块有Injector、Runshc、pe2shr。

图片

1 Injector

该文件夹下存在一个main.cpp。

图片

这是一个简单的远程shellcode注入的代码,用于将我们的恶意代码注入到其它进程。

关于进程注入这里就不赘述了。

2 Runshc

主文件main.cpp。

图片

这是个最基本shellcode加载器,可以看出来Injector和Runshc都是给PE转成shellcode之后测试用的,测试shellcode是否能成功运行。

然后就是libpeconv。

图片

这个工具也是非常经典,拿来用和学习pe结构都特别好(https://github.com/hasherezade/libpeconv),这个工具可以用来处理解析PE文件,可以用以替代windows的Createprocess制作Runshc和pe2shr。很巧的是,pe2shr里面的stub.bin是作者用汇编实现的一个简易版的libpeconv。

3 pe2shr

然后就是文章主角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的代码。

其实除了作者在代码里列出的三种pe无法执行之外,有些有tls表的pe以及某些使用了延迟重定位表的pe也是转换不了的(或者说转换了也运行不了),因为作者的stub并没有对这些表处理,后面讲到stub的时候就可以发现了。

图片

接下来将原生pe加载进内存处理后再将更改后的shellcode另存为(或者叫它pe?)。

关键是处理这一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值