恶意代码实验2
手工修改PE文件,使样例程序体积尽可能小(784B)
Ⅰ.实验步骤
1.目标思路
将text节、radta节、data节的内容放到节表之后,即把0x400、0x600、0x800的内容放到0x230之后
2.将text节移动到节表之后
将text节0x400移动到0x230的位置,留了16字节的0x00主要是怕出错,理论上放到0x220问题也应该不大,需要修改的位置有节再磁盘文件中所占的空间大小(其实不改也行),节在文件中所处的位置,即0x1B8的4字节和0x1BC的4字节
0x230指向的是文件中代码节存储的位置,0x370是节的大小,因为向前移动了0x170字节,0x200+0x170=0x370,
实际上这时候还需要修改文件的入口位置为0x401030,但是因为前面都是一些对本代码无影响的指令,所以不会影响正常运行,如下图所示:
原因是文件中的对齐粒度是0x200,内存中的对齐粒度是0x1000,将文件中的每0x200字节装载到内存中时不能智能地区分代码节和非代码节,因此在0x401000位置存储的时文件中的0x200到0x400的0x200字节的内容
3.将rdata节移动到text节后面(难)
将rdata节0x600的位置移动到0x260的位置,因为text节的后面有一些0x00,感觉问题不大,需要将整个引入目录表修改(除了函数名字不改),还需要修改数据目录表中的导入表,还需要修改前一个text节中的汇编代码(因为要找到函数),还要修改rdata节的内容
数据目录表中导入表的指向文件中的位置需要改为0x1070,即文件中的0x270,即引入目录表的入口,然后将引入目录表重构,0x20B4指向文件中的0x20BC,0x20BC指向MessageBoxA函数,其他的项以此类推,修改rdata节表中的节在文件中的所处位置修改为0x260,大小无所谓,最后修改汇编代码为0x00402068,和0x00402060
原因是rdata节在内存中装载的位置为0x402000,所以上述修改的偏移(除了导入表的位置)都有一个0x2000的偏移,再加上其在文件中相对于0x200的偏移即可算出内存中的位置
4.将data节移动到rdata节后面
将data节0x800的位置移动到0x300的位置,因为前面的那个动态库的名字的字符串需要0x00结尾,就直接空一行算了
修改的内容就是data节表中的节在文件磁盘中所处的位置为0x300,将data节的内容复制过来,将text节中改为0x00403100,和0x0040310B,这两个位置是data字符在内存中的位置(改成前面的也没问题)
5.将data节后面的内容全部删掉
正常运行,好耶!
源程序链接提取码:5oon
Ⅱ.注意事项
1.建议使用010Editor修改
只需要使用010Editor和olldbg两个软件即可完成实验,在win10环境下即可,010Editor支持对文件复制,粘贴,删除,增加,修改过程中会经常出错,需要经常在olldbg中调试
2.按步骤进行修改,注意保存
防止出现重大错误从头再来
3.注意复制粘贴方法
复制了多少字节内容,就要选中多少内容粘贴,不然会删除一些内容
Ⅲ.研究其他的程序(失败)
1.测试程序使用(X64环境不行)
程序链接提取码:zc1l
2.原文件
没看懂是怎么跑起来的,只能小改一下显示的字符,原博客地址:
[手工打造超小PE文件 作者:Sunline]((19条消息) 手工打造超小PE文件_Dustfly的专栏-CSDN博客)