跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

精选回复

发布于

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

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

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

实验目的:

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

系统环境及工具:

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

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

 

用ollyDBG修改病毒感染程序

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

bgfliqvqpfv2863.png

用OD修改病毒程序

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

       找最后一个jmp aex

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

 lz5ybowvysk2865.png

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

xbdryiqcl242867.png

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

 cedwmzvuoj52868.png

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

 fagzackm4az2870.png

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

 jrhazfwdwxg2871.png

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

 

病毒感染机制分析

把感染前和感染后的样本重命名为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

cy4xybamt1k2873.png

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

mgipweddtxb2875.png

查看比对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,节属性发生变化

svltr3i2wbd2876.png

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

5fsrhqfiju22878.png

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

              21ch-800+3000+400000 = 0040481c

 qkk41lptkic2879.png

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

yvm311ehfzt2880.png

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

文件

原文件的

入口地址

感染病毒文件的

入口地址

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

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字节。

cosjnufcxbv2881.png

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

 qyrpalui4xh2882.png

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

                                                 3200-3000+800 == A00

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

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

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

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

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

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

 dldzfjxl4o52883.png

删掉选块delete

 4n440xo5sdm2884.png

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

xkthv32aovw2885.png

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

 eargr34exc22886.png

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

 z4zmibgh5mb2887.png

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

kl1hlkjufki2888.png

然后另存为,然后运行。

运行成功。

 stlv2fjo1ho2890.png

实验总结待补充。

 

 

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。