Window 加密壳实现

Posted 不会写代码的丝丽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Window 加密壳实现相关的知识,希望对你有一定的参考价值。

前言

加密壳是比较初级的壳,本文最后源码链接中有两套不同实现。实现加密粒度完全不一样。

壳概述

壳一般可以启到压缩作用和防逆向工程的作用。

DbgView.exe是一个原始程序,Dbgview_pack.ext是被加密后的程序,你可以发现占用磁盘大小减少了一半。

当然本文的源码未做重定向处理所以运行可能会奔溃。但对位于不需要重定向的程序是没有太多问题的。如源码中的扫雷程序。

本文的加密壳原理图:

源码构建

我们首先编写一个GUI程序让用户选择一个加密的exe程序.

Ui代码的编写工程就跳过、
我们常看点击后的事件处理:

//szSrcExePath 加壳的exe
//szDstExePath 输出加壳后的 exe
bool 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整个加密。分为两个仓库存储 一个是shellcode 负责解压缩,一个压缩工具

压缩工具 源码
shellcode 源码

以上是关于Window 加密壳实现的主要内容,如果未能解决你的问题,请参考以下文章

滴水Win32练习壳的学习与实现

代码自我清除 自我加密解密的实现

手工脱壳之 未知IAT加密壳 IAT加密+混淆+花指令哈希加密OD脚本

手工脱壳之 PESpin加密壳SHE链硬件反调试IAT重定向混淆+花指令

转载C++实现壳

加壳学习