恶意代码实验2

目录

恶意代码实验2

手工修改PE文件,使样例程序体积尽可能小(784B)

Ⅰ.实验步骤

1.目标思路

将text节、radta节、data节的内容放到节表之后,即把0x400、0x600、0x800的内容放到0x230之后

恶意代码实验2

图1.1

2.将text节移动到节表之后

将text节0x400移动到0x230的位置,留了16字节的0x00主要是怕出错,理论上放到0x220问题也应该不大,需要修改的位置有节再磁盘文件中所占的空间大小(其实不改也行),节在文件中所处的位置,即0x1B8的4字节和0x1BC的4字节

恶意代码实验2

图1.2

0x230指向的是文件中代码节存储的位置,0x370是节的大小,因为向前移动了0x170字节,0x200+0x170=0x370,

实际上这时候还需要修改文件的入口位置为0x401030,但是因为前面都是一些对本代码无影响的指令,所以不会影响正常运行,如下图所示:

恶意代码实验2

图1.3

原因是文件中的对齐粒度是0x200,内存中的对齐粒度是0x1000,将文件中的每0x200字节装载到内存中时不能智能地区分代码节和非代码节,因此在0x401000位置存储的时文件中的0x200到0x400的0x200字节的内容

3.将rdata节移动到text节后面(难)

将rdata节0x600的位置移动到0x260的位置,因为text节的后面有一些0x00,感觉问题不大,需要将整个引入目录表修改(除了函数名字不改),还需要修改数据目录表中的导入表,还需要修改前一个text节中的汇编代码(因为要找到函数),还要修改rdata节的内容

恶意代码实验2

图1.4

数据目录表中导入表的指向文件中的位置需要改为0x1070,即文件中的0x270,即引入目录表的入口,然后将引入目录表重构,0x20B4指向文件中的0x20BC,0x20BC指向MessageBoxA函数,其他的项以此类推,修改rdata节表中的节在文件中的所处位置修改为0x260,大小无所谓,最后修改汇编代码为0x00402068,和0x00402060

原因是rdata节在内存中装载的位置为0x402000,所以上述修改的偏移(除了导入表的位置)都有一个0x2000的偏移,再加上其在文件中相对于0x200的偏移即可算出内存中的位置

恶意代码实验2

图1.5

4.将data节移动到rdata节后面

将data节0x800的位置移动到0x300的位置,因为前面的那个动态库的名字的字符串需要0x00结尾,就直接空一行算了

恶意代码实验2

图1.6

修改的内容就是data节表中的节在文件磁盘中所处的位置为0x300,将data节的内容复制过来,将text节中改为0x00403100,和0x0040310B,这两个位置是data字符在内存中的位置(改成前面的也没问题)

恶意代码实验2

图1.7

5.将data节后面的内容全部删掉

正常运行,好耶!

恶意代码实验2

图1.8

源程序链接提取码:5oon

Ⅱ.注意事项

1.建议使用010Editor修改

只需要使用010Editor和olldbg两个软件即可完成实验,在win10环境下即可,010Editor支持对文件复制,粘贴,删除,增加,修改过程中会经常出错,需要经常在olldbg中调试

2.按步骤进行修改,注意保存

防止出现重大错误从头再来

3.注意复制粘贴方法

复制了多少字节内容,就要选中多少内容粘贴,不然会删除一些内容

Ⅲ.研究其他的程序(失败)

1.测试程序使用(X64环境不行)

恶意代码实验2

图3.1

程序链接提取码:zc1l

2.原文件

恶意代码实验2

图3.2

没看懂是怎么跑起来的,只能小改一下显示的字符,原博客地址:

[手工打造超小PE文件 作者:Sunline]((19条消息) 手工打造超小PE文件_Dustfly的专栏-CSDN博客)

上一篇:R语言读写RData文件


下一篇:关于Java 如何采用 metadata-extractor 读取数码相机 Exif 数据信息的代码