CTF之壳与脱壳

Posted by LXH on May 13, 2025

写在前面

    • 用在二进制程序保护中,防止程序被逆向分析、破解或篡改。
    • 一般是Windows应用程序,类Unix应用不常见
壳类型
壳类型 功能说明 原理/特点 典型代表
压缩壳(Packer) 压缩原始程序代码和数据,减小体积,提高加载速度 启动后解压数据到内存,再跳转到原始程序入口点 UPX
加密壳(Crypter) 对程序加密,防止静态分析和反汇编 壳中运行时解密,再跳转到原始程序;常配合反调试、反虚拟机等技术使用 无特定代表(多为自定义)
保护壳(Protector) 集成多种保护机制,如加密、虚拟化、防调试、防转储等 使用虚拟机执行(如VMProtect);动态生成代码,反调试机制复杂 Themida、VMProtect、ASProtect
OEP原始入口点(Original Entry Point)
  1. 程序入口点ep:程序执行的第一条汇编指令
  2. 加壳会将ep变为壳开始的代码位置;
  3. 我们将程序本身开始的位置称为OEP;
  4. 加壳程序先执行壳程序,解压或解密后,跳转到程序原始逻辑。

因此,分析加壳程序的第一步,是要定位OEP、还原OEP

IAT导入地址表(import address table)

Windows 可执行文件(PE 文件)中的一个数据结构,用来支持程序调用外部 DLL(动态链接库)中的函数

加壳

UPX、ASPack、加密狗

UPX因其逆向难度过于简单,故妄图用UPX达到保护代码的效果几乎不存在,但脱壳的思想确实是值得思考的。

脱壳

dirsearch.exe -u http://47.105.113.86:40003/