一、PE文件
识别一个文件是不是PE文件不应该只看文件后缀名,还应该通过PE指纹
使用winhex打开一个exe文件,发现文件的头两个字节都是MZ,0x3C位置保存着一个地址,查该地址处发现保存着“PE”,这样基本可以认定改文件是一个PE文件。
PE文件格式:
图1 PE文件格式
二、增加节区
步骤:增加节区头,修改节区数量,修改映像大小,增加节区内容,修改新增节区的属性。
1、增加节区头,用PEview打开文件Tut.ReverseMe1,节区reloc地址范围:0218到0240,节区头最后的位置0240,判断是否有足够空间(看characteristics的第一个数据:40)存放一个节区头。然后填充节区头内容。
图2 判断
图3 填充
2、修改节区数量,5个节修改位4个节
图4 修改数量
图5 修改
3、修改映像大小,打开标准头,找到size of image地址为000000D0,大小为00008000,加上映像大小最小单位00000000,修改为00008000+00000000=00008000
图6 修改映像
图7 映像大小
图8 修改
4、增加节区内容,在原有的最后一个节区的末尾000039F0,增加一个节区的随机内容
图9 末尾
图10 增加
5、修改新增节区的属性,需要将此时此刻修改一部分的文件保存,再载入peview查看,修改VirtualSize,修改RVA按,修改SizeOfRawData,修改pointer to raw data
图11 查看
修改VirtualSize,地址0248修改为映像大小最小单位00000000
图12 修改VirtualSize
修改RVA按照上一个节区的大小来修改,上一个节区的VirtualSize是272,对齐后是00000000,所以新节区的RVA地址024C的是00008000+00000000=
00008000
图13 修改RVA
修改SizeOfRawData,大小取决于我们增加的节区地址0250内容大小(400)
图14 修改SizeOfRawData
修改pointer to raw data,地址0254上面两个值相加400+3600=3A00
图15 修改pointer to raw data
6、保存
图16 保存
图17 比较