upx手动脱壳后为什么程序会变大这么多
本帖最后由 Pammer 于 2022-2-3 16:32 编辑如题,自己写了个helloworld再脱壳,原来4kb的程序变成了40kb,这是为什么?
Pammer 发表于 2022-2-3 14:48
额,你误解我的意思了,我是说压缩之后再脱壳会变得比原程序还大,这个是为什么
脱壳出来的部分是按照内存对齐值对齐的,源程序存储是按照文件对齐值对齐;
内存对齐值好像是0x1000,而文件对齐值好像是0x200
运行程序时系统会将程序按照内存对齐值调整,存储文件则使用较小的文件对齐值减少占用
对齐值部分涉及pe文件结构相关知识 任何脱壳都不可能脱到和原来一模一样的 upx本身就是压缩壳 upx本来就是压缩程序,减少占用体积的壳,脱壳自然程序占用体积会变大 woflant 发表于 2022-2-3 13:11
upx本来就是压缩程序,减少占用体积的壳,脱壳自然程序占用体积会变大
额,你误解我的意思了,我是说压缩之后再脱壳会变得比原程序还大,这个是为什么 upx就是自带压缩了 本帖最后由 yangand 于 2022-2-3 16:17 编辑
一般文件对齐是0x200,也就是说代码哪怕只有个字,编译成文件也有0x200,
脱壳是,把程序从内存DUMP下来的,而内存对齐是0X1000,也就是说,文件大小如果只有0x200, 加载到内存中的时候,也会只1KB的内存。这样DUMP下来,文件就会变大。
另外区段不是”连续“的。比如第一个区段起始是0x1000,文件大小是0x200, 而第二个区段起始地址是0x100000, 那么加载到内存中的时候,第一个区段所占的内存就变成了 0x10000-0x1000;这样DUMP下来。文件大小就扩大了上百倍了。
具体请查看文件对齐,内存对齐,以及PE相关的知识
楼上正解,基础扎实,向大佬学习 加壳压缩
页:
[1]