小Z以UPX为例,讲解什么是壳,什么是压缩壳?
UPX (the Ultimate Packer for eXecutables) 壳大家都不陌生,基本上是我们学习**时候学习的第一个壳。
我们来到吾爱**,我们是来学习**的,为什么让我们非要学习脱壳呢?
虽然暂时不懂为什么要脱壳,我们可以先看看为什么要加壳?毕竟先有加壳才有脱壳的嘛(是先有鸡呢?还是先有蛋呢?)
一. 我写的这个程序太多,想把它压缩变小。那我就加压缩壳。
二. 我这是是一个商业的程序,是用来赚钱的,怎么可以被别人**呢,那我就是加密保护壳
三. 其他(病毒加壳,Anti-AntiVirus)
----看完这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未压缩的代码。 本次的讲解到这里就完了,像小生大大说的那样,你能在吾爱写上一篇学习心得可能就能挽救一个准备放弃的人,技术是共进的,就是说在以后的技术生涯想依靠一己之力,是很有限的。 我是一名**新手,但是底层方面和编程能力方面还不错,希望今天写的帖子可以帮助到大家,特别是初学者。第一次分享技术贴,希望大家多多支持。
我们来到吾爱**,我们是来学习**的,为什么让我们非要学习脱壳呢?
虽然暂时不懂为什么要脱壳,我们可以先看看为什么要加壳?毕竟先有加壳才有脱壳的嘛(是先有鸡呢?还是先有蛋呢?)
一. 我写的这个程序太多,想把它压缩变小。那我就加压缩壳。
二. 我这是是一个商业的程序,是用来赚钱的,怎么可以被别人**呢,那我就是加密保护壳
三. 其他(病毒加壳,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未压缩的代码。 本次的讲解到这里就完了,像小生大大说的那样,你能在吾爱写上一篇学习心得可能就能挽救一个准备放弃的人,技术是共进的,就是说在以后的技术生涯想依靠一己之力,是很有限的。 我是一名**新手,但是底层方面和编程能力方面还不错,希望今天写的帖子可以帮助到大家,特别是初学者。第一次分享技术贴,希望大家多多支持。