Cizel 发表于 2015-7-27 00:32

【新手教程一】小Z以UPX为例,讲解什么是壳,什么是压缩壳?

本帖最后由 奋斗丶小Z 于 2015-8-13 11:50 编辑


UPX (the Ultimate Packer for eXecutables) 壳大家都不陌生,基本上是我们学习破解时候学习的第一个壳。

我们来到吾爱破解,我们是来学习破解的,为什么让我们非要学习脱壳呢?
   
虽然暂时不懂为什么要脱壳,我们可以先看看为什么要加壳?毕竟先有加壳才有脱壳的嘛(是先有鸡呢?还是先有蛋呢?)

一. 我写的这个程序太多,想把它压缩变小。那我就加压缩壳。


二. 我这是是一个商业的程序,是用来赚钱的,怎么可以被别人破解呢,那我就是加密保护壳


三. 其他(病毒加壳,Anti-AntiVirus)


今天就以压缩壳为例,讲讲UPX压缩壳的工作原理,等我学到了加密保护壳再去写这方面的帖子好了。
UPX (the Ultimate Packer for eXecutables)是一款先进的可执行程序文件压缩器,压缩过的可执行文件体积缩小50%-70% ,这样减少了磁盘占用空间、网络上传下载的时间和其它分布以及存储费用。 通过 UPX 压缩过的程序和程序库完全没有功能损失和压缩之前一样可正常地运行,对于支持的大多数格式没有运行时间或内存的不利后果。 UPX 支持许多不同的可执行文件格式 包含 Windows 95/98/ME/NT/2000/XP/CE 程序和动态链接库、DOS 程序、 Linux 可执行文件和核心。-百度百科
加壳:其实是利用特殊的算法,对EXE、DLL文件里的资源进行压缩。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。解压原理,是加壳工具在文件头里加了一段指令,告诉CPU,怎么才能解压自己。当加壳时,其实就是给可执行的文件加上个外衣。用户执行的只是这个外壳程序。当执行这个程序的时候这个壳就会把原来的程序在内存中解开,解开后,以后的就交给真正的程序。-百度百科


    ----看完这2个关于百度百科的介绍,你似乎明白了点什么,但是还是很模糊。

    压缩壳到底是什么?

    ----UPX加壳程序的作用就是压缩程序代码,实现把可执行文件的体积缩小50%~70%,

    那压缩的原理是什么呢?

    压缩就好像把 可执行文件中的 123456 用字母%A代替,789ABC用字母%C代替,这样程序代码的体积不久变小了很多。(要是可以这样压缩,这不都只有三分之一了,好机智)。看过《硅谷》这部美剧的同学,现在应该懂了吧,压缩算法很赚钱。

    UPX壳既然压缩了,那为什么还可以正常的运行呢?

    upx的工作原理其实是这样的:首先将程序压缩。
    所谓的压缩包括两方面:
    一方面在程序的开头或者其他合适的地方 插入一段代码。
    另一方面是将程序的其他地方做压缩(也就是上面讲到的压缩)。压缩也可以叫做加密,因为压缩后的程序比较难看懂,原来的代码有很大的不同。
   
    当程序执行时:实时的对程序解压缩。解压缩功能是在第一步时插入的代码完成的功能。

    联起来就是:upx可以完成代码的压缩和实时解压执行。且不会影响程序的执行效率。
    实时解压的原理可以使用一下图形表示:


   程序从1开始执行,而1的功能是将2,3,4解压缩为7,8,9。7,8,9就是2,3,4在压缩之前的形式。
   

最初代码的形式就应该是:


用upx压缩之后形式为:



执行时的形式变为:





   看完这些,你现在懂了为什么我们用F8单步法的时候,一直要向下,遇到向上的调整要F4执行到下一条?    其实就是想运行完1.UPX插入的代码,同时让UPX插入的代码去解压得到正在的7,8,9未压缩的代码。    本次的讲解到这里就完了,像小生大大说的那样,你能在吾爱写上一篇学习心得可能就能挽救一个准备放弃的人,技术是共进的,就是说在以后的技术生涯想依靠一己之力,是很有限的。          我是一名破解新手,但是底层方面和编程能力方面还不错,希望今天写的帖子可以帮助到大家,特别是初学者。第一次分享技术贴,希望大家多多支持。{:17_1056:}@Hmily @小生我怕怕


附件资源:脱壳前后的代码比较(小生我怕怕教程第二课补充):链接:http://pan.baidu.com/s/1i3rjak9 密码:dz9p

教程导航:
static/image/hrline/2.gif

【新手教程一】小Z以UPX为例,讲解什么是壳,什么是压缩壳?

【新手教程二】小Z带你了解一个程序是怎么运行起来的?

【新手教程三】小Z带你学习什么是ESP定律和什么是堆栈平衡 ?

【新手教程四】小Z带你学习什么是两次内存镜像法和什么是内存断点 ?

static/image/hrline/2.gif






Cizel 发表于 2015-7-30 08:24

shenshen 发表于 2015-7-29 20:03
比如说一个文件并不知道是什么文件
但是从调用方式和二进制文件看出一定使用了压缩方式,当然从文件头 ...

压缩壳,一般都是在原来的代码的前面加一段代码的,所以不用担心。 压缩壳,单步跟就是可以找到ope的。
而且压缩壳一般都是可以自己解压的,如果不能那程序肯定是运行不了的~

Cizel 发表于 2015-8-25 16:10

patton88 发表于 2015-8-25 15:48
大侠讲得很好,请问大侠讲的 第一次作业 的相关Exe程序在哪里下载?多谢

三.开始我被放在了硬盘里面(不 ...

第一次培训课里面的,http://www.52pojie.cn/thread-378612-1-1.html 这个里面下载第一次课作业

缺挂网络 发表于 2015-7-27 00:45

是啊   这个壳觉得简单

chinasmu 发表于 2015-7-27 01:31

哎哟,不错

隔壁老汪的汪 发表于 2015-7-27 02:06

作为新手,过来学习一下

Cizel 发表于 2015-7-27 08:09

要是可以看懂这个了,会发现为什么要脱壳,怎么脱压缩壳

xlcomputer 发表于 2015-7-27 08:31

写得不错啊,生动形象。

楠神_ 发表于 2015-7-27 09:09

支持支持,写的很好、

zzfafa 发表于 2015-7-27 12:57

支持,这种必须支持虽然有些不懂但是还是要学习才知道啊

XKQ 发表于 2015-7-27 13:02

感谢分享,学习了

Cizel 发表于 2015-7-27 13:07

缺挂网络 发表于 2015-7-27 00:45
是啊   这个壳觉得简单

壳是比较简单的啦,但是还是得明白为什么要这么脱? 因为简单,所以才好搞明白原理
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【新手教程一】小Z以UPX为例,讲解什么是壳,什么是压缩壳?