病毒分析与手工查杀

病毒分析与手工查杀

今天又可以上最喜欢的姚老师的实验课了!

先浅浅记录一下理论知识。

有需要实验工具和靶机的可以留言我给你分享~

实验目的:

分析PE文件结构,理解关键字段意义,掌握RVA、VA、FOA地址间转换;分析文件型病毒的原理;了解文件型病毒的发现方法,能利用OD等工具分析PE病毒,并通过手工方式进行病毒查杀;分析病毒专杀工具的基本设计方法。

系统环境及工具:

WinSR虚拟机、病毒样本、OllyDBG、PE Explorer、UltraEdit32

实验原理和PE结构待补充。

用ollyDBG修改病毒感染程序

先感染文件hei0.exe,感染前文件大小是3K,感染后是9k

用OD修改病毒程序

首先要找到最后一个jmp指令,因为病毒的代码是贴在最后一个节,且执行完病毒的代码完成文件感染后要jmp回到程序入口点。然后源程序入口点肯定是不会都一样的,不同的exe文件入口点不一样,若是写死则无法兼容感染其他exe。于是我们可以合理推测,在执行病毒代码之前,病毒把程序的入口点的RVA值保存在某个地址,执行完病毒代码后把地址放在aex中然后jmp aex。(为啥是aex寄存器呢,我也不是特别清楚,但是我发现很多jmp都是把地址放到aex里面然后,jmp aex)

找最后一个jmp aex

直接在od上右键->查找->命令->输入jmp eax,或ctrl F,不要勾选整个块,我们就可以ctrl L一直往下下一条。

然后在指令的地址处下一个断点F2,然后重载

换了一台机器调试,可以看到断点停下时jmp 的值是00401000,也就是源程序的入口点。

按F7运行就回到了程序入口点,然后我们右键,用OD脱壳调试进程。

选择方式2,点击脱壳,也可以选择方式一对比一下,但是这次实验方式一脱壳是没办法运行的。

另存为文件后测试是否还具有传染性,无。

病毒感染机制分析

把感染前和感染后的样本重命名为hei0.exe和hei1.exe后放到一个目录下,对比分析。

使用PE Explorer分别打开两个文件,对比文件入口点(OEP--Address of Entry Point)和镜像大小(Image Base),并记录如下数据。

OEP

ImageBase

hei0.exe

00001000

00400000

hei.exe

00003200

00400000

感染前后程序入口点对比,感染前1000,感染后3200

感染前后镜像大小对比,感染前16384byte,感染后18944byte

查看比对Section Header的数据信息并记录到下面表格。

Virtual Size

Virtual Address

Size of Raw Data

Point to Raw Data

hei0.exe的.data

00000027h

00403000h

00000200h

00000400h

Hei1.exe的.data

00001A00h

00403000h

00001A00h

00000800h

下面对比图可以看到Virtual Size,Size of Raw Data,节属性发生变化

打开Ultra Editor,择“文件”菜单中的“比较文件”功能对hei0.ex_和hei.ex_进行二进制比对,可以发现在hei.exe文件的0xa00处开始的数据块为存储于.data节的病毒代码。

搜索hei0的入口点1000,然后记录数据文件偏移记录21ch,计算该地址在内存虚拟地址为

21ch-800+3000+400000 = 0040481c

Od加载查看对应地址,发现就是jmp eax

用以上方法对几个已感染和未感染的文件对比分析,并作出如下记录

文件

原文件的

入口地址

感染病毒文件的

入口地址

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

mspaint.exe

34CF5

53800

010345C

notepad.exe

73A5

13000

010073A5

wordpad.exe

119B

3A00

0100119B

通过以上分析,可以初步判断,病毒的感染方式为:

在最后一个节后添加恶意代码,并修改程序的入口点为恶意代码的入口点,修改对应的节表的大小,和镜像大小,不然在执行时文件会解析出错,在完成感染以后jmp回到源程序的入口点执行程序。

手工查杀

修改思路如下:

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

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

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

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

(2)查找原程序入口点。在PE头偏移25h字节处取4字节

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

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

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

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

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

要删除病毒代码,首先查找病毒代码选块。

要先找到程序入口点,因为病毒为了在程序运行时取得cpu控制权,会把源程序入口点改为自己的代码入口点。

根据老师给的参考文件,我明白了,指定程序入口点的位置在PE00后偏移25字节的位置,取4字节。

这里的入口点是RVA,我们需要根据节表进行RVA和FOA的转换。

可以根据虚拟偏移判断3200位于.data节,原始偏移为800,那么程序入口的代码在静态下位于:

3200-3000+800 == A00

(!!!!注意这里是A00不是1000,这些数字都是16进制的)

我第一次算的1000,然后把1000后面的代码块都删掉了,然后那么怎么还是多出一段。

然后我们要选中从A00开始,到结束标志(文件病毒代码以0xE58BE0FF结尾)的代码块,直接按delete删掉。

一个快速选中代码块的办法,记住代码块的开始和结束的地址,编辑->定义选块。

如何找病毒结束的地址呢?

点击搜索->查找hex数值,搜FFE08BE5(我们读数字是大端,winhex是小端存储,低地址低位高地址高位)

删掉选块delete

把入口点由3200修改为1000,我猜为啥是1000,因为代码和数据都放在.text节,.text节的虚拟偏移是1000.

如何看节表开始呢,就看右边的名称,一个节表项开始的八个字节定义的是节表的名称,所以节表名称最多7个字符,因为有一个. ,修改最后一个节表就是.data节。首先找到.data节。

然后修改节表原始大小为00020000(小端),虚拟(真实)大小为27

然后修改size of image,被感染后大小为4A00,我们要改成4000,为啥是4000我也不知道。

然后另存为,然后运行。

运行成功。

实验总结待补充。

相关推荐

手机定位追踪软件哪个好? 8款定位追踪软件推荐
365沙巴体育入口

手机定位追踪软件哪个好? 8款定位追踪软件推荐

📅 06-27 👁️ 3543
临床试验常用缩写记不清?这有一份速查手册请收好!
365速发国际平台app下载

临床试验常用缩写记不清?这有一份速查手册请收好!

📅 06-27 👁️ 3936
猴虎相冲猴应该怎么化解?
365速发国际平台app下载

猴虎相冲猴应该怎么化解?

📅 06-27 👁️ 5806
演员王迅中学读的哪个学校(王迅初中时期的求学历程)
男人为什么喜欢亲女人胸(男人为何钟情于女性胸部)
365彩票下载1.0.0老版本

男人为什么喜欢亲女人胸(男人为何钟情于女性胸部)

📅 06-27 👁️ 6624
男人为什么喜欢亲女人胸(男人为何钟情于女性胸部)
365彩票下载1.0.0老版本

男人为什么喜欢亲女人胸(男人为何钟情于女性胸部)

📅 06-27 👁️ 6624
從「藍瘦香菇」,看廣西少數民族方言
365速发国际平台app下载

從「藍瘦香菇」,看廣西少數民族方言

📅 06-28 👁️ 4949
演员王迅中学读的哪个学校(王迅初中时期的求学历程)
從「藍瘦香菇」,看廣西少數民族方言
365速发国际平台app下载

從「藍瘦香菇」,看廣西少數民族方言

📅 06-28 👁️ 4949