删除PE文件的.reloc节区
.reloc节区是PE文件的重定位节区,对于EXE的PE文件来说,重定位对运行并没有什么影响,将其删除后程序仍然可以正常运行。
这里我们使用自己写的add.exe
现在我们来删除这个add.exe文件的.reloc节区。
我们使用PEview查看add.exe文件的.reloc节区:
首先我们看到.reloc头部起始地址为01DB,大小为固定的28字节,所以我们将.reloc头部(01DB-01FF)全部用0填充:
然后将.reloc中的全部内容删去,我们可以看到.reloc的Size of Raw Data是从0B08开始的,于是我们删除从0B08开始的到结尾的所有数据。
(0B08之后的数据都删除了,所以数据只到了0B07)
然后我们修改IMAGE_FILE_HEADER-Number of Secrions项,这个项存放了PE文件有几个节区:
我们看到这个项本来是5,现在我们改为4
然后我们修改IMAGE_OPTIONAL_HEADER-size of Image 这个项存放了映像大小,我们删除了.reloc,所以映像大小也改变了。
首先我们查看.reloc本来的大小
本来的Virtual Size是D9D,再看到Section Alignment为1000,因为Virtual Size不是Section Alignment的整数倍,所以我们要网上取整,再用取整的数字将去size of Image,因此我们减去的不是D9D,而是减去1000
所以最终是:02BD9D-1000=02AD9D
最后,我们保存,就可以了