逆向工程实验三 壳应用

  1. 实验目的和要求

在理解PE文件以及壳的工作原理基础上,对目的PE文件进行处理,增加节,并写入符合加密壳功能的代码,修改PE文件入口地址、修改节属性,达到加密壳的功能。

分析文件型病毒的原理;了解文件型病毒的发现方法,能利用OD等工具分析PE病毒,并通过手工方式进行病毒查杀;分析病毒专杀工具的基本设计方法。

  1. 实验步骤

1、模拟壳的工作

初始PE文件的 RVA 与 FOA 相同,使得模拟的时候可以省去各种地址转换的问题。本节的模拟工作将会在该文件上进行模拟。以下分析、处理基于EnPE.exe文件。

① 对原始可执行文件RawPE.exe的代码节进行加密,得到EnPE.exe(已完成);

密码算法:异或;密钥0XCC,与原始可执行文件RawPE.exe比较,分析加密了几个字节?

用PEditor打开EnPE.exe可以发现文件的.text部分开始地址为00001000H,然后用winhex打开该文件,跳到00001000H处,与原始可执行文件RawPE.exe的代码节相比较,可以发现加密了两个字节。

② 增加节(已完成);与原始可执行文件RawPE.exe比较,增加了几个节,该节大小是多少?

增加了一个节,该节大小是1000H

③ 修改代码节的属性与程序的入口点;

要将解密的代码增加到新增加的节里,新的入口点地址为新增加节区的起始地址,而新增加的节.PACK的起始地址是00004000H,因此在PEditor中修改文件入口点为00004000H。

修改属性。找到EnPE.exe中的.text节,右键选择编辑节,然后点击特征值向导,将可写选项勾上得到新的特征值为E0000020H,将这个值填入。然后点击应用更改更新该值。

知识点:入口点

为了达到加壳后能正常运行,EnPE.exe入口点应改为什么?

改为00004000H

④ 在增加的节中写入解密代码。

OD打开EnPE.exe文件发现OD 已经停在入口地址为 0x00404000 处,然后在入口点增加以下解密代码后保存文件,再在PEditor里修改.PACK节的属性为可读、可写、可执行,保存文件后运行成功。

①PUSHAD 
②MOV ESI,00401000 
③MOV ECX,2 
④XOR BYTE PTR DS:[ESI],0CC 
⑤INC ESI 
⑥LOOPD 0040400B 
⑦POPAD 
⑧MOV EAX,00401000 
⑨JMP EAX

首先使用PUSHAD 指令对各个寄存器进行保存;然后将原程序入口点赋值给ESI;ECX寄存器用于循环计数,循环对加密的2个字节进行解密;然后是解密命令,从ESI指向的地址中取出一个字,与CC进行异或运算后再保存到ESI指向的地址中;然后将ESI指向的地址向后移动一个字节,解密时是逐字解密的;然后是loop指令,它会首先将ESI寄存器的值减1,然后判断其是否大于0,若它大于0,则程序跳到0040400B处执行,若小于0,则执行loop指令的下一条指令;POPAD将各寄存器恢复为原来的值;然后将00401000 也就是OEP赋值给EAX;jmp eax 就是跳回到原来的入口点继续执行。

  1. 验证利用OllyDBG修改病毒感染程序

(1)进入实验目录C:\ExpNIS\AntiVir-Lab\VirusExp\Filevirus。

新建文件夹“text”,将文件夹“hei”下的hei0.exe(未感染病毒的可执行程序)复制到text目录中,将目录C:\ExpNIS\AntiVir-Lab\Virus\LaborDayVirus中的LaborDayVirus.exe也复制到text目录中。将系统时间调整为5月1日,双击text目录下LaborDayVirus.exe感染hei0.exe文件,观察hei0.exe感染病毒前后的大小变化。

 

可以看到hei0.exe感染病毒前的大小为3KB,感染后大小为9KB。

(2)启动ollyDbg1.10,C:\ExpNIS\NetAD-Lab\Tools\RemoteCtrl\OllyDBG ,单击文件菜单中的“打开”项,选择要修复的hei0.exe。由于病毒修改了原程序的入口点,因此会有程序入口点超出代码范围的提示,如图2所示。

单击“确定”按钮继续,程序会停在病毒修改后的程序入口点(hei0.exe的入口点为0x00403200)上,在代码中找到最后一个jmp指令处(病毒感染完成后将跳转回原程序),按F2设置断点,按F9运行,程序会在刚设置的jmp断点上中断,查看EAX寄存器的值(EAX=0x401000注意上面提到的断点,下面还会用到),按F7单步执行到下一条指令地址,点选鼠标右键,选择菜单中的“用ollyDump脱壳调试进程”,

选中重建输入表方式1,方式2各脱壳一次,分别保存为1.exe、2.exe。测试两个程序是否还具有病毒的传染特性____________________?

2.exe具有病毒的传染特性。

「注」 由于重建输入表的方式不同,可能造成某一种导出方式导出的文件无法正常运行,请选择可以执行的一种方式来清除病毒。

  1. 病毒感染机制分析

(1)准备一个没有感染病毒的可执行程序和一个感染病毒的可执行程序,将其分别重命名为hei0.ex_,hei.ex_,并复制到一个新的目录下用于调试、对比。

(2)使用PE Explorer,C:\ExpNIS\AntiVir-Lab\Tools\PE_Explorer分别打开hei.ex_和hei0.ex_文件,对比两个文件入口点(OEP--Address of Entry Point)和Image Base并分别记录。

OEP

ImageBase

hei0.ex_

00001000

00400000

hei.ex_

00003200

00400000

点击“View”菜单中的“Section Headers”进入Section Headers页面,比对Section Header的数据信息并记录到下面表格。

Virtual Size

Virtual Address

Size of Raw Data

Point to Raw Data

hei0.ex_的.data

00000027

00403000

00000200

00000800

hei.ex_的.data

00001A00

00403000

00001A00

00000800

由于一般文件型病毒只有代码段,数据和代码都存在一起。所以可以断定hei.ex_的.data段多出的数据即为病毒代码和数据。

进入实验平台,单击工具栏中“UE”按钮,打开Ultra Editor,C:\ExpNIS\HostSec-Lab\UltraEdit选择“文件”菜单中的“比较文件”功能对hei0.ex_和hei.ex_进行二进制比对,可以发现在hei.ex_文件的0xa00处开始的数据块为存储于.data节的病毒代码。

「注」 该段数据在.data节是因为hei0.ex_和hei.ex_的.data节都开始于各自文件偏移的Point to Raw Data处。这段数据是病毒代码是因为0xa00 - 0x800 + 0x403000 = 0x403200(感染病毒文件hei.ex_ OEP的虚地址(VA))。

使用Ultra Editor打开hei.ex_定位光标到hei.ex_的.data块的Point to Raw Data位置,并以16进制形式查找hei0.ex_的入口点(注意字节顺序),将查找到的数据的文件偏移记录FOA___2010H_______。计算该偏移的保护模式内存虚拟地址VA:____00404810H________________。

VA=2010H-800H+3000H+00400000H=00404810H

打开之后定位00080000处(小端存储),这是hei.ex_的.data块的Point to Raw Data位置

然后跳到00100000处,这也就是hei0.ex_的入口点,发现文件偏移2010H

(6)文件分析利用上面的方法分别对文件分析目录下C:\ExpNIS\AntiVir-Lab\VirusExp\Filevirus\的已感染和未感染文件进行调试,注意比对感染病毒文件和原文件特征,将各个病毒文件的最后一个跳转指令的目的地址记录到如下表。

文件

原文件的

入口地址

感染病毒文件的

入口地址

感染病毒文件的最后一个跳转目的地址

mspaint.exe

00034CF5

00053800

0103 4CF5

notepad.exe

000073A5

00013000

0100 73A5

wordpad.exe

0000119B

00003A00

0100 119B

(7)通过以上的分析,就可以初步断定,该病毒的感染方式是:在最后一节添加病毒代码,修改程序入口点为病毒代码开始地方,执行完代码再jmp到源代码的入口点。

  1. 手工查杀

(1)查找病毒寄存特征。

入口点在代码节(.text)之外,病毒代码存储于最后一节、且在病毒代码段后的一个双字为原程序代码入口RVA(在.text节范围内)。

文件病毒代码以0xE58BE0FF结尾。

(以上特征是对简化后的病毒特征的总结、实际中的病毒要复杂的多);

(2)查找原程序入口点。

(3)修改程序入口点为原程序入口点。

(4)修改病毒感染的最后一个节表的SizeOfRawData,使之大小变为去掉病毒代码时的大小。

 

(5)修改PE文件选项头中的SizeOfImage为去掉病毒代码后的大小。

(6)清除病毒代码数据。

(7)保存清除病毒代码后的文件。

猜你喜欢

转载自blog.csdn.net/zzzfff__/article/details/135431617