区段减肥简单技巧

第一步:从节表中删除 
先纪录这几个节的起始位置,几个节的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    保存基地址重定位
posted @ 2012-08-30 01:55  cracksa  阅读(395)  评论(0编辑  收藏  举报
Top Buttom