Window 加密壳实现

前言
加密壳是比较初级的壳,本文最后源码链接中有两套不同实现 。实现加密粒度完全不一样 。
壳概述
壳一般可以启到压缩作用和防逆向工程的作用 。
.exe是一个原始程序,.ext是被加密后的程序,你可以发现占用磁盘大小减少了一半 。
当然本文的源码未做重定向处理所以运行可能会奔溃 。但对位于不需要重定向的程序是没有太多问题的 。如源码中的扫雷程序 。
本文的加密壳原理图:
源码构建
我们首先编写一个GUI程序让用户选择一个加密的exe程序.
Ui代码的编写工程就跳过、
我们常看点击后的事件处理:
//szSrcExePath 加壳的exe//szDstExePath 输出加壳后的 exebool CPacker::Pack(const char const* szSrcExePath, const char const* szDstExePath){/** 1.解析PE*/if (!AnalyzePE(szSrcExePath)){return false;}/** 获取导入表信息*/if (!GetImpInfos()){return false;}/** 2.压缩节 获取压缩数据*/if (!Compress()){return false;}/** 3.获取壳代码*/if (!GetCode()){return false;}/** 4.构造带壳PE*///1. 准备节区数据if (!GetSecData()){return false;}//2. 构造新的节表if (!GetNewSecHdrs()){return false;}//3.构造新的PE头if (!GetNewPeHdr()){return false;}//4. 写入文件if (!WriteNewPE2File(szDstExePath)){return false;}return true;}
我们将根据函数调用序列讲解
源码链接
分别对节压缩 , 对导入表抹除
加密壳源码 抹除导入表等
对原始EXE整个加密 。分为两个仓库存储 一个是 负责解压缩,一个压缩工具
压缩工具 源码
【Window 加密壳实现】 源码