1.什么是壳
在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,就把这样的程序称为“壳”了。
描述壳的示意图:
2.壳的加载过程
这里谈的加壳工具不是WinZIP、WinRAR等数据压缩工具,而是谈压缩可执行文件EXE或DLL的工具。加壳过的EXE文件是可执行文件,它可以同正常的EXE文件一样执行。用户执行的实际上是外壳程序,这个外壳程序负责把用户原来的程序在内存中解压缩,并把控制权交还给解开后的真正程序,这一切工作都是在内存中运行的,整个过程对用户是透明的。
壳和病毒在某些方面比较类似,都需要比原程序代码更早的获得控制权。壳修改了原程序的执行文件的组织结构,从而能够比原程序的代码提前获得控制权,并且不会影响原程序的正常运行。
这里简单说说一般壳的装载过程。
1)获取壳自己所需要使用的API地址
如果用PE编辑工具查看加壳后的文件,会发现未加壳的文件和加壳后的文件的输入表不一样,加壳后的输入表一般所引入的DLL和API函数很少,甚至只有Kernel32.dll以及GetProcAddress这个API函数。
壳实际上还需要其他的API函数来完成它的工作,为了隐藏这些API,它一般只在壳的代码中用显式链接方式动态加载这些API函数:3个脱壳相关的重要函数介绍
2)解密原程序的各个区块(Section)的数据
壳出于保护原程序代码和数据的目的,一般都会加密原程序文件的各个区块。在程序执行时外壳将会对这些区块数据解密,以让程序能正常运行。壳一般按区块加密的,那么在解密时也按区块解密,并且把解密的区块数据按照区块的定义放在合适的内存位置。
如果加壳时用到了压缩技术,那么在解密之前还有一道工序,当然是解压缩。这也是一些壳的特色之一,比如说原来的程序文件未加壳时1~2M大小,加壳后反而只有几百K。
3)重定位
文件执行时将被映像到指定内存地址中,这个初始内存地址称为基地址(ImageBase)。当然这只是程序文件中声明的,程序运行时能够保证系统一定满足其要求吗?
对于EXE的程序文件来说,Windows系统会尽量满足。例如某EXE文件的基地址为0x400000,而运行时Windows系统提供给程序的基地址也同样是0x400000。在这种情况下就不需要进行地址“重定位”了。由于不需要对EXE文件进行“重定位”,所以加壳软件把原程序文件中用于保存重定位信息的区块干脆也删除了,这样使得加壳后的文件更加小巧。有些工具提供“WipeReloc”的功能,其实就是这个作用。
不过对于DLL的动态链接库文件来说,Windows系统没有办法保证每一次DLL运行时提供相同的基地址。这样“重定位”就很重要了,此时壳中也需要提供进行“重定位”的代码,否则原程序中的代码是无法正常运行起来的。从这点来说,加壳的DLL比加壳的EXE更难修正。
4)HOOK-API
程序文件中的输入表的作用是让Windows系统在程序运行时提供API的实际地址给程序使用。在程序的第一行代码执行之前,Windows系统就完成了这个工作。
壳一般都修改了原程序文件的输入表,然后自己模仿Windows系统的工作来填充输入表中相关的数据。在填充过程中,外壳就可填充HOOK-API的代码的地址,这样就可间接地获得程序的控制权。
5)跳转到程序原入口点(OEP)
从这个时候起壳就把控制权交还给原程序了,一般的壳在这里会有明显的一个“分界线”。但现在的猛壳己没这界限了,壳里有肉,肉里有壳。
3.压缩引擎
各类加壳软件,其压缩算法一般不是自己实现的,大多是调用其他的压缩引擎。目前压缩引擎种类比较多,不同的压缩引擎有不同特点,如一些对图像压缩效果好,一些对数据压缩效果好。而加壳软件选择压缩引擎有一个特点,在保证压缩比的条件下,压缩速度慢些关系不是太大,但解压速度一定要快,这样加了壳的EXE文件运行起来速度才不会受太大的影响。例如下面几个压缩引擎就能满足这要求:
1.aPLib压缩引擎http://www.ibsensoftware.com/,这个库对于低于64K的文件压缩效果较好,速度较快。
2.JCALG1压缩引擎,相对于aPlib,JCALG1对于大文件效果好些。
3.LZMA压缩引擎http://www.7-zip.org/zh-cn/sdk.html,LZMA是7-Zip程序中7z格式的默认压缩算法,压缩率很高。
分享到:
相关推荐
《脱壳基础知识入门》电子书主要探讨的是计算机安全领域中的一个重要话题——脱壳技术。脱壳,简单来说,就是从程序的外壳中提取出原始代码的过程,通常用于对抗恶意软件的反逆向工程策略。在本电子书中,作者将为...
在当今的软件行业中,加壳技术已经成为常见的加密手段,它能保护软件免受逆向工程的攻击。脱壳,作为逆向工程中的重要环节...只有对这些基础知识和高级技术有了充分的认识,才能在软件安全和逆向工程的道路上走得更远。
脱壳入门基础 在一些计算机软件里有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序...目前有很多加壳工具,既然有矛,自然就有盾,脱壳即去掉软件所加的壳,软件脱壳有手动脱和自动脱壳之分,
大牛的脱VMP壳的插件,一般的VMP壳都能脱掉
本文通过详细介绍脱壳的基础知识和具体技巧,希望能帮助新手快速入门。不过需要注意的是,脱壳涉及版权法和道德规范的问题,在实践中必须确保合法合规。 最后,希望每位学习者都能保持高度的兴趣和耐心,不断探索与...
本课程"脱壳基础第一课"旨在教授初学者如何理解和执行这个过程。 首先,我们需要了解什么是壳。壳通常是指在原始可执行代码(payload)周围添加的一层额外代码,用于保护恶意代码免受分析和检测。这些壳可以是简单...
微信_砸壳包_脱壳 v8.0.20
解密之脱壳入门 好东西下载完以后一定不会后悔的。大牛整理的东西。
加壳脱壳 新手必看 初学者必须掌握原理 (壳,加壳,脱壳,介绍壳的一些基本常识).zip
"外能侦壳脱壳器FFI"是一个专门用于处理软件加壳技术的工具,它主要功能在于检测和移除程序的外壳,也就是所谓的“壳”。在计算机安全领域,壳通常指的是用来保护恶意代码免受分析和反编译的包装层。这个工具的亮点...
### 脱壳入门初级教学知识点汇总 #### 第一课:PE格式 - **定义**:PE即Portable Executable File Format(可移植的执行体),是当前Windows平台上的主流可执行文件格式。它包含了用于描述文件如何加载到内存以及...
"幻影脱壳"是一种针对特定类型的保护壳技术进行逆向工程的方法,主要用来破解或分析那些使用了“幻影壳”保护的可执行程序。幻影壳是一种流行且复杂的技术,它通过混淆代码和改变程序执行流程来保护程序免受逆向工程...
**通用脱壳辅助工具PEid查壳工具** 在IT安全领域,尤其是逆向工程和恶意软件分析中,"脱壳"是一项重要的技能。壳(Shellcode)通常指的是隐藏在程序中的代码,用于绕过反病毒软件的检测。"PEid"(Portable ...
第三课 认识壳 第四课 常见压缩壳与加密壳 第五课 文件类型分析 第六课 寻找OEP 第七课 Dump内存映像 第八课 重建输入表 第九课 手动确定IAT的地址与大小 第十课 DLL文件脱壳 第十一课 优化与自校验去除
超级巡警虚拟机自动脱壳机(VMUnpacker)完全基于虚拟机技术,对各种已知未知壳进行脱壳处理,适合病毒分析中对加壳的木马样本进行脱壳处理。由于所有代码均运行在虚拟机中,不会对系统造成任何危害。本版为第一个正式...
查壳 脱壳 待脱壳的软件查壳 脱壳 待脱壳的软件查壳 脱壳 待脱壳的软件
以下是关于"万能脱壳机"及其支持的几种壳类型——ASPack、FsG和UPX的详细知识讲解。 首先,ASPack是一种著名的文件压缩和加密工具,常用于减少可执行文件的大小,提高其加载速度。然而,由于其强大的混淆能力,...