【新手教程一】小Z以UPX为例,讲解什么是壳,什么是压缩壳?
UPX (the Ultimate Packer for eXecutables) 壳大家都不陌生,基本上是我们学习破解时候学习的第一个壳。
我们来到吾爱破解,我们是来学习破解的,为什么让我们非要学习脱壳呢?
虽然暂时不懂为什么要脱壳,我们可以先看看为什么要加壳?毕竟先有加壳才有脱壳的嘛(是先有鸡呢?还是先有蛋呢?)
一. 我写的这个程序太多,想把它压缩变小。那我就加压缩壳。
<ignore_js_op>
二. 我这是是一个商业的程序,是用来赚钱的,怎么可以被别人破解呢,那我就是加密保护壳
<ignore_js_op>
三. 其他(病毒加壳,Anti-AntiVirus)
<ignore_js_op>
今天就以压缩壳为例,讲讲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可以完成代码的压缩和实时解压执行。且不会影响程序的执行效率。
实时解压的原理可以使用一下图形表示:
<ignore_js_op>
程序从1开始执行,而1的功能是将2,3,4解压缩为7,8,9。7,8,9就是2,3,4在压缩之前的形式。
<ignore_js_op>
最初代码的形式就应该是:
<ignore_js_op>
用upx压缩之后形式为:
<ignore_js_op>
执行时的形式变为:
<ignore_js_op>
看完这些,你现在懂了为什么我们用F8单步法的时候,一直要向下,遇到向上的调整要F4执行到下一条? 其实就是想运行完1.UPX插入的代码,同时让UPX插入的代码去解压得到正在的7,8,9未压缩的代码。 本次的讲解到这里就完了,像小生大大说的那样,你能在吾爱写上一篇学习心得可能就能挽救一个准备放弃的人,技术是共进的,就是说在以后的技术生涯想依靠一己之力,是很有限的。 我是一名破解新手,但是底层方面和编程能力方面还不错,希望今天写的帖子可以帮助到大家,特别是初学者。第一次分享技术贴,希望大家多多支持。@Hmily @小生我怕怕
附件资源: 脱壳前后的代码比较(小生我怕怕教程第二课补充):链接:http://pan.baidu.com/s/1i3rjak9 密码:dz9p
【新手教程二】小Z带你了解一个程序是怎么运行起来的?
这次教程,讲解一个程序是怎么运行起来的?
看完本篇,你可以明白你打开OD到底看的的是什么?
一.我还是上次的那个UPX程序
二.我被打开的必经之路
三.开始我被放在了硬盘里面(不知道你们删除了我没有,自从作为了第一次作业)
四.被你点击之后,我被加载到了内存之中。(就要被各种处理了,好怕怕)
五.当我被加载到了内存中,(什么都被你们看到了 T_T)
我其实一般可以给你看我的三个位置,好害羞
这是我的第一个部分
这是我的第二个部分
这是我的第三个部分
六.CPU要开始动手了,啊
寄存器的简单说明:http://www.52pojie.cn/thread-388794-1-1.html
第二篇的课程到这里就结束了,对课程内容有什么好的建议,一定要回帖告诉我呀。
下一次课的内容,可能会将代码是怎么一步一步的运行的,以及OD上一系列的问题,堆栈平衡等等。
我的目标:是通过对问题的本质的理解,学习我们操作的原理。
如果你有什么了解的问题,也可以回帖告诉我,我会优先构思,加入到课程中。
也不知道这次的课程大家会不会喜欢。 @小生我怕怕 大大 @Hmily 大大 你们怎么看?