CTF逆向Re:零基础系统性入门教程-4-程序壳
目录
上一章投票:脱壳1票,动态分析1票。那么我先从脱壳讲起吧。
第三章:程序壳类型和脱壳方法
简单谈谈壳
简单来说,程序壳是一种软件保护技术,通常用于对程序进行压缩、加密或反调试处理,以防止逆向工程和破解。
在做逆向题时,最常见的是UPX壳,大部分都可以用工具脱壳,小部分是魔改壳,需要手动脱壳。
壳的分类和对策
程序壳可以由原理分几大类,在赛场上比较常见的是以下的几种:
| 维度 | 压缩壳 | 加密壳 | VM 壳 |
|---|---|---|---|
| 核心目的 | 减小体积 | 防静态分析 | 防动态 / 静态分析 |
| 逆向难度 | 低(自动工具可解) | 中(需绕过反调试) | 极高(需逆向 VM 指令集) |
| 典型操作 | 压缩→解压 | 加密→解密→反调试 | 指令转换→VM 解释执行 |
| 脱壳关键 | 定位 OEP 后直接 dump | 绕过反调试 + 修复 IAT | 逆向 VM 指令集 + 代码重建 |
总结一个解题步骤

一、压缩壳
- 核心功能:压缩程序代码 / 数据以减小体积,运行时自动解压。
- 反逆向原理:提前压缩代码,运行时解压,因为IDA静态分析不执行程序,因此无法看到原本程序。
| 压缩壳 | 核心特点 | 脱壳难度 |
|---|---|---|
| UPX | 逆向题目最常见的程序壳,简单题多数可以用程序自带脱壳命令(upx -d 程序地址)自动脱壳,部分魔改需要手动脱壳。 | ★☆☆☆☆ |
| ASPack | 压缩率略高于 UPX,加入简单 CRC 校验防止篡改。用Aspackstripper自动脱壳。 | 不常见 |
| PECompact | 支持 “固实压缩”(将所有区段合并压缩),压缩后体积更小,但解压速度较慢。 | 不常见 |
下以64位程序的UPX壳为例
显示明显的红色字体:UPX(3.96)

尝试自动脱壳
upx自动脱壳网上有非常详细的教程,这里就不复述了。

成功了,因此可以直接进行常规分析流程(第三章讲过)
手动脱壳
如果自动脱壳不成功,那么就需要手动脱壳,或者修复后再自动脱壳。我们先不介绍魔改壳,因为我也不是很熟。先展示手动脱常规UPX壳。不同位数的脱壳不一样。这个程序是64位的,先将程序拖入x64DBG。

这个界面真的会劝退很多初学者,不过没关系我会带着大家一步步走。
按下F9(运行),跳到默认断点,也就是看到很多个push的地方。接着按F8(单步),执行过push之后,右键右边的RSP,在弹出来的窗口点击“在内存窗口中转到”,右键左下角第一个00(栈顶)——断点——硬件,访问——4字节。

下好断点后,F9运行到很多个pop的地方,往下找大跳转,观察到箭头所指跳转地址很远,因此可以初步判断此次是主函数入口。直接按F8或者下断点执行到跳转函数,

跳转过去后,跟着图示步骤走。

得到 xxx_dump_SCY文件,就可以进入IDA分析了,和用工具脱壳结果还是有区别的,不过能解出flag就行。
剩下的两种壳一般用工具自动脱壳就行,手动脱壳就不讲了,一方面是不常见,一方面是我也不会。
二、加密壳
- 核心功能:加密程序内容,需解密后才能运行,防静态分析。
- 代表: Themida/WinLicense(强加密 + 反调试)、Armadillo、VMProtect(虚拟机加密)。
| 加密壳 | 核心特点 | 脱壳难度 |
|---|---|---|
| Themida | 集成 AES 加密 + 多层反调试(检测虚拟机、内存断点)+ 代码虚拟化(部分功能),商业级防护。 | ★★★★★ |
| Armadillo | 支持 “硬件绑定”(用 CPU / 主板 ID 生成密钥),加密后脱离原始机器无法运行,适合软件授权。 | ★★★★☆ |
| Obsidium | 轻量级加密 + 花指令混淆,反调试较弱但体积小,适合共享软件。 | ★★★☆☆ |
三、VM 壳
- 核心功能:将程序指令转换为自定义虚拟机指令,逆向难度极高。
- 代表:VMProtect、SVKP、TitanEngine。
| VM 壳 | 核心特点 | 逆向难度 |
|---|---|---|
| VMProtect | 支持 x86/x64/ARM 架构,VM 指令集动态生成(每次加壳不同),集成反调试 + 反 dump。 | ★★★★★ |
| SVKP | 轻量级 VM 壳,指令集简单(约 50 条),但混淆极强(大量无效指令)。 | ★★★★☆ |
| TitanEngine | 企业级 VM 壳,支持 “VM 嵌套”(VM 引擎本身被另一层 VM 保护),几乎无法手动逆向。 | ★★★★★ |
小结
加密壳和VM壳现在只做个了解就行了,难度太大了,UPX壳才是我们逆向题的常考点和重点。
脱壳这部分属于逆向的一个难点,特别是手动脱壳的部分,需要大量的练习熟悉流程以及应对不同的情况。多研究,总会成功的。
var code = "49e9e2dc-7677-4809-8765-8c2468d7637f"

浙公网安备 33010602011771号