简单的PE文件壳设计与验证

简单的PE文件壳设计与验证

date: 2020 /11/6

Mission:

  1. 实现简单的跳转壳,在PE文件中添加新节,在新节其中加入跳转至原入口的指令,实现对原程序的启动。
  2. 实现PE文件加密壳,对原程序代码节内容异或运算,在原程序中加入新节实现对原代码节内容解密并启动运行。
    Misson Source:CQU

Source Code 测试使用的asm代码

.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc
includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
.stack 4096
ExitProcess PROTO , dwExitCode:DWORD
MessageBox equ MessageBoxA
MessageBoxA proto : DWORD, : DWORD, : DWORD, : DWORD ;
.data
msg byte 'Hello,Assembly Language!',0
msg_title byte 'Title',0
.code

main proc
	
	invoke MessageBox,NULL, offset msg, offset msg_title, MB_OK
	ret
	INVOKE ExitProcess,0
main endp
end main

NO.1

在这里插入图片描述

记录初始入口点OEP:00001000

1. 添加新区段并记录区段信息

方法1:通过LordPE直接在区段表处添加新段

image-20201106210918623.png

image-20201106210909872.png

记录新节点信息

EP:00005000

SIZE:500

文件偏移:00000C00

在NewSec区段添加新数据

image-20201107134105957.png

修改入口点为EP=00005000

在这里插入图片描述


方法2:通过010editor 手动添加新节表

添加一个新节到最后(在这儿我是复制最后一个节表的内容到下一位置,然后修改名称为.NewSEc)
在这里插入图片描述

修改节表数目

在这里插入图片描述

此时使用010editor观察新节表是否检查到
image-20201107151629495.png

可以观察到已检查到新节表

但是由于我们只修改了所复制内容的名字,因此我们在这里还要对其对应内容进行修改处理
然后需要修改对应的数据

首先要修改virtual address
image-20201107152202216.png

因为是直接copy的,根据对齐原则,这里修改4000为5000即可

再修改sizeofrawdata的大小 同方法1中一样 这里修改为500h
在这里插入图片描述

使用010editor编辑,到文件末尾增加500h的数据,在这里简单补零即可

在这里插入图片描述
同时修改PointerToRawData
在这里插入图片描述

计算的结果和我们之前在程序末尾添加0的位置相同说明正确

由于新增了0x500节数据大小.那么我们的PE文件头中镜像大小也要加0x500大小进行映射.注意.要按照内存对齐.

在这里插入图片描述

修改完毕

测试运行

在这里插入图片描述

仍能运行说明手动添加新节表成功。

4.在ollydbg中添加命令

修改过后程序无法正常运行,因为入口点被修改为了跳转表EP=00005000,因此需要我们在ollydbg中使用反汇编添加跳转指令使其跳转到原先的入口点即OEP=00001000

image-20201107160824849.png

并保存至桌面,尝试运行。
在这里插入图片描述

运行成功

在这里插入图片描述

任务完成。

NO.2

任务是对代码段进行加密,并通过一个新区表作为入口实现对源代码解密,使其能够正常运行。

使用NO.1的exe进行加密操作。

首先先使得.text为可写入状态。

使用LordPE
在这里插入图片描述

修改为可写入状态

然后使用010editor对其进行加密

找到.text部分

在这里插入图片描述

始于400h,大小为200h,故结束于600h前

在这里插入图片描述

在这里插入图片描述

对所有字节进行xor12的简单加密操作
在这里插入图片描述

此时尝试运行,无法正常启动

在 .NewSec段添加解密代码

因为是对.text段的代码进行解密所以要知道其RVA

再次通过LordPE找到
在这里插入图片描述

即基地址+虚拟地址= 00400000 + 00001000

在ollydbg反汇编中添加如下指令

在这里插入图片描述
ECX为加密段的大小
EBX为加密段.text的位置
EAX为原入口

运行成功,加密text,并通过新节表进行解密的步骤全部完成。

参考学习链接:
简单的手工加壳篇 :https://blog.csdn.net/Winter_Zero/article/details/103726463
手工加壳:https://qwq1503.blog.csdn.net/article/details/102363129

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值