最近学习了壳,自己手动编写了简单的壳,功能比较简单,现在简单整理成笔记,供大家参考。个人能力有限,如有谬误,请不吝赐教,万分感谢。
参考资料:《黑客免杀攻防》,看雪论坛等
简介
“壳”是一种现实比较常见的东西,比如:花生壳、瓜子壳等等。这些壳主要是用来保护其自身的果实的,要想吃到这些果实,我们就需要将其剥掉。在我们的软件行业也存在这样类似的东西,这种东西我们也称之为“壳”,我们自身的软件就类似于花生仁,而“壳”用来保护我们自身的软件,避免被其他人窥探。
壳根据作用,一般分为两种:压缩壳、加密壳。无论哪种他们的原理大致是相同的。我们给自身软件加壳后就会产生新的软件,新的软件是由壳和原软件组成,在执行的时候,先执行壳,由壳对原程序进行解密并还原到内存中去,接着执行原来的程序。如下图:
当我们将带壳的程序运行后,壳就会加载自己的API函数,然后对已知的加密区进行解密,对压缩进行解压,并按照PE结构将其释放到正确的内存位置上,并进行重定位,然后跳转到原程序的入口点(OEP),运行原程序。如图:
搭建环境
开发环境
Win7x64 旗舰版vs2013
010Edit6.03
OD1.1(吾爱破解版)
PEid0.94
LordPE
说明:
我们想程序的界面与逻辑进行分开,这样可以使两者互不干扰。
创建三个项目
a、创建一个名称为PackBase的mfc项目,用于界面操作b、创建一个名称为Pack_Base的dll项目,编写加壳逻辑
c、创建一个名称为Stub的dll项目,编写壳的信息