加壳与脱壳

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
加壳与脱壳

1.什么是壳? 2.加壳与脱壳 3.加壳的加载过程 4.脱壳的实现过程
什么是壳?
在一些计算机软件里也有一段专门负 责保护软件不被非法修改或反编译的程序。 它们一般都是先于程序运行,拿到控制权, 然后完成它们保护软件的任务。由于这段 程序和自然界的壳在功能上有很多相同的 地方,基于命名的规则,就把这样的程序 称为“壳”了。
什么是壳?
壳的加载过程
1.获取壳自己所需要使用的API地址 如果用PE编辑工具查看加壳后的文件,会发 现未加壳的文件和加壳后的文件的输入表不一样, 加壳后的输入表一般所引入的DLL和API函数很少, 甚至只有Kernel32.dll以及GetProcAddress这个 API函数。 壳实际上还需要其他的API函数来完成它的 工作,为了隐藏这些API,它一般只在壳的代码 中用显式链接方式动态加载这些API函数
脱壳
一般的压缩壳,都有专用的脱壳机,或者 用万能脱壳机也可以,如:procdump。而 加密壳一般很少有脱壳机,必须手动脱 壳手动脱壳----三步 1.查找程序的真正入口点(OEP) 2.抓取内存映像文件 3.输入表重建
注:OEP是Original Entry Point缩写
查找OEP
1.根据跨段指令寻找OEP 2.根据堆栈平衡原理找OEP 3.根据变异语言特点找OEP 4.用内存断点找OEP
壳的加载过程
5.跳转到程序原入口点(OEP) 从这个时候起壳就把控制权交还给原 程序了,一般的壳在这里会有明显的一个 “分界线”。但现在的猛壳己没这界限了, 壳里有肉,肉里有壳。
常见的加壳工具
1.压缩壳 (主要目的是减小程序体积) ASPack UPX 等等 2.加密壳 ASProtect Xtreme-Protector 等等
注:使用OllyIce实现
抓取内存映像文件
外壳程序解压还原后就会跳到OEP处执 行,此时内存映像wk.baidu.com件是己解压的程序。 这时就可抓取内存映像文件了(该过程称 为Dump)。
注:使用LordPE实现
输入表重建
程序总是需要与系统打交道,与系统交道的途 径是API,而API的地址已经替换成了壳的 HOOK-API的地址,那程序每一次与系统打交道, 都会让壳的代码获得一次控制权。重建输入表的 关键是获得没加密的IAT ,一般的做法是跟踪加 壳程序对IAT处理过程,修改相关指令,不让外 壳加密IAT。
壳的加载过程
3.重定位 文件执行时将被映像到指定内存地址 中,这个初始内存地址成为基地址。 对于EXE的程序文件来说,Windows 系统会尽量满足,所以加壳软件把源程序 文件中用于保存重定位信息的区块干脆也 删除了。
壳的加载过程
4.HOOK-API 程序文件中的输入表的作用是让 Windows系统在程序运行时提供API的实际 地址给程序使用。在程序的第一行代码执 行之前,Windows系统就完成了这个工作。 壳一般都修改了原程序文件的输入表, 然后自己模仿Windows系统的工作来填充 输入表中相关的数据。
注:使用ImportREC实现
谢谢!!!
壳的加载过程
2.解密原程序的各个区块(Section)的数据 壳出于保护原程序代码和数据的目的, 一般都会加密原程序文件的各个区块。在 程序执行时外壳将会对这些区块数据解密, 以让程序能正常运行。 壳一般按区块加密 的,那么在解密时也按区块解密,并且把 解密的区块数据按照区块的定义放在合适 的内存位置。
相关文档
最新文档