首页
社区
课程
招聘
upx压缩问题
发表于: 2004-7-1 07:55 10105

upx压缩问题

2004-7-1 07:55
10105
upx压缩问题
kongfoo/2004.6.28
  在调用UPX压缩程序时发现的。
  1.24w和1.90beta版都存在这个问题:对XP的notepad.exe压缩失败,提示
upx: notepad.exe: CantPackException: section size problem
  notepad.exe各节参数:
Section  VirtualSize  VirtualOffset  RawSize  RawOffset
.text    00006d72     00001000       00006e00 00000400
.data    00001ba8     00008000       00000600 00007200
.rsrc    00008948     0000a000       00008a00 00007800

  可正常压缩的acp132 patcher.exe各节参数:
Section  VirtualSize  VirtualOffset  RawSize  RawOffset
.text    00000ffe     00001000       00001000 00000400
.rdata   000007b6     00002000       00000800 00001400
.data    00001870     00003000       00000200 00001c00
.rsrc    0002e4c8     00005000       0002e600 00001e00

  2种参数比较看不出问题。upx带参数运行,下断_open。
0041A49D    FF15 10A14300   CALL DWORD PTR DS:[<&msvcrt._open>]      ; msvcrt._open

  这里是打开notepad.upx。之后出2次异常就退出了。

  压缩函数从410840开始,先一大段检查代码。
00410BFE    8B50 0C         MOV EDX,DWORD PTR DS:[EAX+C]  ==VirtualOffset
00410C01    8B40 10         MOV EAX,DWORD PTR DS:[EAX+10] ==RawSize
00410C04    03C2            ADD EAX,EDX
00410C06    8B5424 20       MOV EDX,DWORD PTR SS:[ESP+20] ==SizeOfImage
00410C0A    3BC2            CMP EAX,EDX
00410C0C    76 11           JBE SHORT upx.00410C1F  ==VirtualOffset+RawSize大于SizeOfImage就报错
00410C0E    68 38B34200     PUSH upx.0042B338                        ; ASCII "section size problem"
00410C13    E8 D808FFFF     CALL upx.004014F0
00410C18    8B4C24 14       MOV ECX,DWORD PTR SS:[ESP+14]
00410C1C    83C4 04         ADD ESP,4

  notepad.exe的SizeOfImage=12948,最后一节VirtualOffset+RawSize=a000+8a00=12a00,
大于12948所以报错。解决办法很简单了,把SizeOfImage项以100对齐即可。或者把jbe改成jmp。
  notepad的例子对齐代码:
01006AE0 >  B8 48290100     MOV EAX,12948
01006AE5    3C 00           CMP AL,0
01006AE7    74 05           JE SHORT notepad.01006AEE
01006AE9    80C4 01         ADD AH,1
01006AEC    32C0            XOR AL,AL

  另外,UPX好像是有损压缩,我在notepad第一节的尾部加了3个字节的内容,经过UPX压缩
解压出来后不见了。。。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 3
支持
分享
最新回复 (4)
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
2
好帖要顶,VO+RS>SizeOfImage是最后一个段的?
2004-7-1 09:42
0
雪    币: 371
活跃值: (790)
能力值: ( LV12,RANK:570 )
在线值:
发帖
回帖
粉丝
3
2004-7-1 10:16
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
4
作者应该加VS...果然是个bug
2004-7-1 10:23
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
主页上用的upx是用了UCL压缩,不是有损压缩,不过你的情况我也发现了,可能对程序完整性有验证?或者又是bug?(查源代码去)
2004-7-1 14:31
0
游客
登录 | 注册 方可回帖
返回
//