mayl8822 发表于 2008-9-7 16:18

脱壳后软件减肥大法

最近练习脱壳,将用98的记事本用Armadillo 3.10加壳作试验,52K --> 324K脱壳后文件大小达到了588K,比脱壳前竟然大了10倍多,于是想将之减肥,查看雪精华,没找到这方面的内容。正在学习PE文件结构,于是自己动手试验一下。


先看看加壳前文件的sections

建议装入地址:0x00400000
----------------------------------------------------------
节区名称节区大小虚拟地址Raw_尺寸Raw_偏移节区属性
----------------------------------------------------------
.text 00003FD400001000000040000000100060000020
.data 0000084C000050000000100000005000C0000040
.idata00000E0200006000000010000000600040000040
.rsrc 00004FB800007000000050000000700040000040
.reloc00000AC60000C000000010000000C00042000040

加壳后:
建议装入地址:0x00400000
----------------------------------------------------------
节区名称节区大小虚拟地址Raw_尺寸Raw_偏移节区属性
----------------------------------------------------------
.text 00003FD400001000000000000000000060000020
.data 0000084C000050000000000000000000C0000040
.idata00005E0200006000000000000000000040000040
.reloc00000AC60000C000000000000000000042000040
.text1000200000000D0000001400000001000E0000020
.adata000100000002D0000000500000015000E0000020
.data1000100000003D000000060000001A000C0000040
.reloc1 000100000004D000000020000002000042000040
.pdata000300000005D0000002A00000022000C0000040
.rsrc 000050000008D000000050000004C00040000040

脱壳后文件节表:
建议装入地址:0x00400000
----------------------------------------------------------
节区名称节区大小虚拟地址Raw_尺寸Raw_偏移节区属性
----------------------------------------------------------
.text 00003FD40000100000003FD40000100060000020
.data 0000084C000050000000084C00005000C0000040
.idata00005E020000600000005E0200006000C0000040
.reloc00000AC60000C00000000AC60000C00042000040
.text1000200000000D000000200000000D000E0000020
.adata000100000002D000000100000002D000E0000020
.data1000100000003D000000100000003D000C0000040
.reloc1 000100000004D000000100000004D00042000040
.pdata000300000005D000000300000005D000C0000040
.rsrc 000050000008D000000050000008D00040000040
.mackt00001000000920000000100000092000E0000060

其中.rsrc是文件资源节,.mackt节是imprec修复输入表时候新加的节。

容易发现有用的节只有
----------------------------------------------------------
节区名称节区大小虚拟地址Raw_尺寸Raw_偏移节区属性
----------------------------------------------------------
.text 00003FD40000100000003FD40000100060000020
.data 0000084C000050000000084C00005000C0000040
.idata00005E020000600000005E0200006000C0000040
.rsrc 000050000008D000000050000008D00040000040
.mackt00001000000920000000100000092000E0000060
其他节都是脱壳后留下的无用的垃圾,所以只要将它们删掉就可以了达到我们减肥的效果了。当然对具体的壳也要删除的节也不同,具体问题具体分析吧,。

Let’s go!

第一步:从节表中删除
先几下这几个节的起始位置,几个节的Raw是从0000C000到0008D000-1
LordPE中PE Edit中在这几个节点右键选"wipe section header",将这几个节从节表中删除.


第二步:从文件中删除
HexWorkshop打开该文件,选择偏移0000C000到0008D000-1,然后按del删除。


第三步:调整节表属性
只是删除了节表项目和文件中内容还不行,还要设置好节属性。

可以通过编程实现资源节的RVA调整,使RVA偏移等于文件偏移,较麻烦,且.mackt存有输入表信息很多RVA值不好改动。
我们用简单的办法,不动它的RVA地址,只改变它的文件偏移。
PE Edit中 先点击sections,然后选择.rsrc节,右键edit section header
因为删除的节首的Raw offset为0000C000,所以现在.rsrc节的节首Raw Offset为0000C000,更改后。

.rsrc下面的节.mackt的Raw_偏移 = .rsrc节的Raw_偏移 + .rsrc节的Raw_尺寸 = 0000C000 + 00005000 =

00011000
故更改.mackt 节的Raw_偏移为 00011000

还没完,如果呢现在试验一下,就会报告不是有效的win32程序
还要调整一下.rsrc节上面的这一节.idata的节区大小,保证相邻节的VA地址是连续的
(.rsrc节的虚拟地址0008D000) - (.idata节的虚拟地址00006000)= 00087000
所以设置.idata的节区大小为00087000


第四步:调整数据目录表属性
由于我们把.reloc节给删除了,所以还要在数据目录表中将Relocation Table清0,当然这一步不是必要,
因为exe文件基本上不会用到这一节的。


保存,试验一下,是不是OK了呢,588K --> 72K,比起原先52K虽然还大了一点,但已经比较满意了。

qq513701092 发表于 2008-9-7 16:53

强大的教程
学习下!

快乐先锋 发表于 2008-9-7 19:00

很详细,基本看懂~谢谢楼主分享!

xiesuwen 发表于 2008-9-8 00:58

你好我有软件叫你提取注册机有报酬的可以的话联系我81577833

hezhaoyang 发表于 2008-12-11 22:55

很详细,基本看懂

wcb0414 发表于 2009-10-24 10:41

最好能够做个视频教程

297044530 发表于 2011-9-8 17:02

嗯对啊 能有视频教程最好了 不过楼主还是辛苦了

weizhuqiang 发表于 2011-9-9 00:35

很详细,基本看懂

yangand 发表于 2011-9-9 18:27

用LOADPE,只两步就可以了
页: [1]
查看完整版本: 脱壳后软件减肥大法