1.壳:
加壳的全称应该是可执行程序资源压缩,是保护文件的常用手段. 加壳过的程序可以直接运行,但是不能查看源代码.要经过脱壳才可以查看源代码. 加壳:其实是利用特殊的算法,对EXE、DLL文件里的资源进行压缩。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。 解压原理,是加壳工具在文件头里加了一段指令,告诉CPU,怎么才能解压自己。现在的CPU都很快,所以这个解压过程你看不出什么东西。软件一下子就打开了,只有你机器配置非常差,才会感觉到不加壳和加壳后的软件运行速度的差别。当你加壳时,其实就是给可执行的文件加上个外衣。用户执行的只是这个外壳程序。当你执行这个程序的时候这个壳就会把原来的程序在内存中解开,解开后,以后的就交给真正的程序。所以,这些的工作只是在内存中运行的,是不可以了解具体是怎么样在内存中运行的。通常说的对外壳加密,都是指很多网上免费或者非免费的软件,被一些专门的加壳程序加壳,基本上是对程序的压缩或者不压缩。因为有的时候程序会过大,需要压缩。但是大部分的程序是因为防止反跟踪,防止程序被人跟踪调试,防止算法程序不想被别人静态分析。加密代码和数据,保护你的程序数据的完整性。不被修改或者窥视你程序的内幕。
2.壳的执行过程:
原程序经过加壳后大小一般会变化,当加壳后的程序运行的时候需要先运行壳,然后再经过壳运行原程序。所谓的脱壳就是将程序还原,去掉加在原程序上的限制(个人理解)。
3.OEP:(Original Entry Point)一般对加壳程序而言,指加壳前的原程序的入口地址即原始入口地址(我感觉是英文翻译)。
EP:(Entry Point)指一般程序的入口点,例如一般的PE文件的开头内存标志 50 45 。
以前的一些比较古老的程序加壳后,壳与原程序的分界线比较明确,也就是壳是壳的部分,原程序是原程序的部分,不会混淆在一起,但是现在的加 壳程序的加壳技术逐渐升级,壳与原程序的分界线不再那么明确,而是壳中带原程序,原程序代码中含壳的代码。
4.壳的装载:(模拟windows加载器)
1.获取壳自己所需要使用的API地址(这个要用到PE文件里的输入表)。
2.解压或解密原程序的各个区块。
3.进行必要的重定位。
4.跳转到程序原入口点(OEP)。
5.几种压缩引擎:
1.aPlib:
aPLib是一款基于LZ-based压缩算法的32位压缩引擎库,由Joergen Ibsen创建于1997年,目前最新版本为1.1.0。aPLib最大的特点是小巧高效,其解压代码只有169个字节,因而在可执行文件压缩及软件保护这方面得到了广泛应用。
2. JCALG1:相对于aplib,针对大文件压缩效果比较好。
3.LZMA.LZMA,(Lempel-Ziv-Markov chain-Algorithm的缩写),是一个Deflate和LZ77算法改良和优化后的压缩算法,开发者是Igor Pavlov,2001年被首次应用于7-Zip压缩工具中,是 2001年以来得到发展的一个数据压缩算法。它使用类似于 LZ77 的字典编码机制,在一般的情况下压缩率比 bzip2 为高,用于压缩的可变字典最大可达4GB。
6.壳的种类:
1.压缩壳:
ASPack:AsPack是高效的Win32可执行程序压缩工具,能对程序员开发的32位Windows可执行程序进行压缩,使最终文件减小达70%!目前针对ASPACk所开发的脱壳工具软件也有许多,包括ASPACK ATRIPPER 、ASPACKDIE 、ASPROTECT等 .
UPX:UPX (the Ultimate Packer for eXecutables)是一款先进的可执行程序文件压缩器,压缩过的可执行文件体积缩小50%-70% ,这样减少了磁盘占用空间、网络上传下载的时间和其它分布以及存储费用。 通过 UPX 压缩过的程序和程序库完全没有功能损失和压缩之前一样可正常地运行,对于支持的大多数格式没有运行时间或内存的不利后果。 UPX 支持许多不同的可执行文件格式 包含 Windows 95/98/ME/NT/2000/XP/CE 程序和动态链接库、DOS 程序、 Linux 可执行文件和核心
PECompact:PECompact是一个能压缩可执行文件的工具,通过压缩代码、数据、相关资源使压缩能达到100%,由于在运行时不需要恢复磁盘上压缩后的数据,所以与没有压缩的程序在运行时没有明显的速度差异,在某种程度上还有所改善。PECompact源自Collake Software,是用于可执行文件的压缩软件。由卓越的编程大师Jeremy Collake编写,可以用来处理EXE、DLL和OCX文件
2.加密壳:
ASProtect:ASProtect 是功能非常完善的加壳、加密保护工具。能够在对软件加壳的同时进行各种保护。如:反调试跟踪、自校验及用密钥加密保护等;还有多种限制使用措施,如:使用天数限制、次数限制及对应的注册提醒信息等。另外,该软件还具有密钥生成功能。
Armadillo:(穿山甲)Armadillo 是一套强大的软件保护系统,可以为您的程序添加装甲般的外壳。通过艺术性的加密、数据压缩和其它安全特性保护您的程序不被盗版和破解。Armadillo 可以让您在5分钟内为您的程序设计并添加一套完全的软件保护和注册系统,并且不需要您修改任何程序代码!Armadillo 支持所有语言编写的32位 Windows EXE 文件。有个c++线性代数库也叫armadillo。
EXECryptor:EXECryptor 是创新性的软件保护系统,可以有效保护您的应用程序免遭逆向工程分析、修改或破解。它使用大量新颖的保护技术,可以显著增加软件开发商的投资回报
Themida:
Themida是一个强劲的保护系统, 专为了那些想保护自己的程式不被先进的反向工程和黑客软件破解的软件开发者而开发的。开发者不需要更改任何的原代码,和不需要程式编制的经验使用WinLicense。
Themida使用SecureEngine®的保护技术。它能够以最高的优先等级运行,这些保护技巧是从来都没在电脑防御技术领域出现过,使它最大程度地保护任何程式 。
VMProtect:(业界公认的难壳)VMProtect 是新一代的软件保护系统,将保护后的代码放到虚拟机中运行,这将使分析反编译后的代码和破解变得极为困难。使用 MAP 文件或内建的反编译引擎,您可以快速选择需要保护的代码。