问题
1、 什么是壳?它是干嘛的?
2、 有哪些壳类型?
3、 壳是怎么加载的?
4、 加壳软件有哪些?
什么是壳?
加壳的目的:为了隐藏程序真正的OEP(入口点),防止被破解。
加壳软件是一种在编译好可执行文件之后,为了一些特定的需求,而做的一些事情,常见需求有:
- 有一些版权信息需要保护起来,不想让别人随便改动
- 为了让程序小一点,从而方便使用(把可执行文件进行压缩使用)
- 在黑客界给木马等软件加壳以避免杀毒软件
软件的壳的分类:
- 加密壳
- 压缩壳
- 伪装壳
- 多层壳
- …
壳的加载过程
加壳过的exe是可执行文件,它可以像正常的exe一样执行。
用户执行的实际上是外壳程序,外壳程序负责把用户原来的程序在内存中解压缩,并把控制权交还给解开后的真正程序,这一整个都是在内存中运行的,对于用户来说是透明的。
壳比原程序代码更早获得控制权。
壳的加载过程:
一般壳的装载过程:
- 获取壳所需要使用的API地址
加壳后的文件,比未加壳的文件的输入表所引入的API少(甚至只有Kernel32.dll以及GetProcAddress这个API函数);壳实际上还需要其他API函数来完成一些事情,它为了隐藏这些API,一般只在壳的代码中用显式链接的方式来动态加载这些API - 解密原程序的各个区块(Section)的数据
壳一般是按区块加密的,那么解密的时候也是按区块解密,并且把解密的