写在前面
- 壳
- 用在二进制程序保护中,防止程序被逆向分析、破解或篡改。
- 一般是Windows应用程序,类Unix应用不常见
壳类型
壳类型 | 功能说明 | 原理/特点 | 典型代表 |
---|---|---|---|
压缩壳(Packer) | 压缩原始程序代码和数据,减小体积,提高加载速度 | 启动后解压数据到内存,再跳转到原始程序入口点 | UPX |
加密壳(Crypter) | 对程序加密,防止静态分析和反汇编 | 壳中运行时解密,再跳转到原始程序;常配合反调试、反虚拟机等技术使用 | 无特定代表(多为自定义) |
保护壳(Protector) | 集成多种保护机制,如加密、虚拟化、防调试、防转储等 | 使用虚拟机执行(如VMProtect);动态生成代码,反调试机制复杂 | Themida、VMProtect、ASProtect |
OEP原始入口点(Original Entry Point)
- 程序入口点ep:程序执行的第一条汇编指令
- 加壳会将ep变为壳开始的代码位置;
- 我们将程序本身开始的位置称为
OEP
; - 加壳程序先执行壳程序,解压或解密后,跳转到程序原始逻辑。
因此,分析加壳程序的第一步,是要定位OEP、还原OEP。
IAT导入地址表(import address table)
Windows 可执行文件(
PE
文件)中的一个数据结构,用来支持程序调用外部DLL
(动态链接库)中的函数
加壳
UPX、ASPack、加密狗
UPX因其逆向难度过于简单,故妄图用UPX达到保护代码的效果几乎不存在,但脱壳的思想确实是值得思考的。
脱壳
dirsearch.exe -u http://47.105.113.86:40003/