Pammer 发表于 2022-2-3 12:47

upx手动脱壳后为什么程序会变大这么多

本帖最后由 Pammer 于 2022-2-3 16:32 编辑

如题,自己写了个helloworld再脱壳,原来4kb的程序变成了40kb,这是为什么?

woflant 发表于 2022-2-3 16:07

Pammer 发表于 2022-2-3 14:48
额,你误解我的意思了,我是说压缩之后再脱壳会变得比原程序还大,这个是为什么

脱壳出来的部分是按照内存对齐值对齐的,源程序存储是按照文件对齐值对齐;
内存对齐值好像是0x1000,而文件对齐值好像是0x200
运行程序时系统会将程序按照内存对齐值调整,存储文件则使用较小的文件对齐值减少占用

对齐值部分涉及pe文件结构相关知识

落红护花 发表于 2022-2-3 13:11

任何脱壳都不可能脱到和原来一模一样的

十一七 发表于 2022-2-3 12:58

upx本身就是压缩壳

woflant 发表于 2022-2-3 13:11

upx本来就是压缩程序,减少占用体积的壳,脱壳自然程序占用体积会变大

Pammer 发表于 2022-2-3 14:48

woflant 发表于 2022-2-3 13:11
upx本来就是压缩程序,减少占用体积的壳,脱壳自然程序占用体积会变大

额,你误解我的意思了,我是说压缩之后再脱壳会变得比原程序还大,这个是为什么

我今天是大佬 发表于 2022-2-3 15:00

upx就是自带压缩了

yangand 发表于 2022-2-3 16:09

本帖最后由 yangand 于 2022-2-3 16:17 编辑

一般文件对齐是0x200,也就是说代码哪怕只有个字,编译成文件也有0x200,
脱壳是,把程序从内存DUMP下来的,而内存对齐是0X1000,也就是说,文件大小如果只有0x200, 加载到内存中的时候,也会只1KB的内存。这样DUMP下来,文件就会变大。
另外区段不是”连续“的。比如第一个区段起始是0x1000,文件大小是0x200, 而第二个区段起始地址是0x100000, 那么加载到内存中的时候,第一个区段所占的内存就变成了 0x10000-0x1000;这样DUMP下来。文件大小就扩大了上百倍了。
具体请查看文件对齐,内存对齐,以及PE相关的知识

luxiaole 发表于 2022-2-3 17:49

楼上正解,基础扎实,向大佬学习

1213Hao 发表于 2022-2-7 20:55

加壳压缩
页: [1]
查看完整版本: upx手动脱壳后为什么程序会变大这么多