第一步:从节表中删除
先纪录这几个节的起始位置,几个节的Raw是从0000D000到0009E000-1
LordPE中PE编辑器中在这几个节点右键选“清除区段”。
第二步:调整节表属性
只是删除了节表项目和文件中内容还不行,还要设置好节属性。 可以通过编程实现资源节的RVA调整,使RVA偏移等于文件偏移,较麻烦,且.mackt存有输入表信息很多RVA值不好改动。 我们用简单的办法,不动它的RVA地址,只改变它的文件偏移。
用PE编辑器中,打开区段,选择.rsrc节,编辑,因为删除的节首的ROffset为0000D000,所以现在.rsrc节的节首ROffset为0000D000,更改!
.rsrc下面的节.mackt的Raw_偏移 = .rsrc节的Raw_偏移 + .rsrc节的Raw_尺寸 = 0000D000 + 00005000 =00012000,故更改.mackt 节的Raw_偏移为 00012000
还要调整一下.rsrc节上面的节.idata的节区大小,保证相邻节的VA地址是连续的
(.rsrc节的虚拟地址0009E000) - (.idata节的虚拟地址00007000) = 00097000 所以设置.idata的节区大小为97000
第三步:从文件中删除
HexWorkshop打开该文件,选择偏移0000D000到0009E000-1,全部删除!
保存,656K --> 76K,比起原先52K虽然还大了一点,但已经比较满意了。
“减肥两大法则”
1、 Contains(包含) 有标记的区段一般不能删除,没有标记的可优先考虑
2、 用OD载入需要减肥的文件,忽略所有异常,打开内存镜像,分别在各个区段上F2下断,F9运行!如果程序能够跑起来的话,那么这个区段一般就可以删除掉了(无用/垃圾区段)!
“心中有数”
熟悉5中常见的语言特征以及特征区段!
附录
Contains
.text 代码段,我们反编译程序经常看到。
.data 数据快,程序初始化用。
.idata 输入表
.rsrc 全部资源,如图标,菜单,位图。
.reloc 保存基地址重定位