PE是Portable Excutable的缩写,指“可移植可执行”文件,是32 位 Windows操作系统可执行文件的标准格式。在计算机安全领域中PE文件如果被修改或者被反编译,都会使计算机产生安全隐患或者使软件的核心技术被窃取,所以保护PE文件不被修改是一件很重要的工作,当前通常采用加壳的方法对PE文件进行保护,这其中UPX是具有代表性的压缩类外壳。
本文首先对PE文件格式进行了全面细致的研究,PE文件的头部结构对可执行文件进行了整体描述,是加壳脱壳工作的重要信息来源。接下来本文还分析了外壳的加载流程以及UPX的加壳流程,外壳的加载流程具有普遍规律,掌握外壳的加载流程是理解外壳的工作机制以及编写加壳脱壳程序的基础。最后针对UPX外壳采用动态脱壳设计方案,进行UPX动态脱壳算法的设计与实现,动态脱壳设计思路以外壳程序在内存中还原出原文件为突破口,将加壳文件载入内存使其自行脱壳,并抓取内存映像,完成原文件的构造。相比于静态设计方案,动态脱壳设计方案具有更强的通用性。