PE文件壳的设计过程
标题:pe文件壳的设计过程
作者:baccon(PEDIY论坛),或 chenxiang /Hsiang Chen(软件发布者)
时间:2013年10月26日星期六
注:若要转载,请注明出自http://blog.csdn.net/baccon,谢谢合作。
今天来讨论一下PE文件的壳,壳主要用于PE文件的商业保护,以此达到软件不被暴掉的可能性,随着破解知识的普及,软件的壳也愈加复杂还是难以不被暴。。
壳的一个加载过程在许多书上都讲过,这里就以图来复习一次:
这张图其实是一种情形,原程序被压缩引擎压过,还可以是在EXE文件上直接加壳不压缩,这样到省了壳的大小,但原EXE代码没有压缩,反而变大了一点,还有一种是在EXE文件的节区的空隙中添加,这样压缩过的文件和原文件一样大,但是对节区的大小有要求。这是三种常规的加壳思路。
如果单单是加一个简单的壳,象罗云彬的《windows32位环境下的汇编语言程序设计》中的那个AddCode就是一个典型代表。主要步骤如下:
首先在节区表上添加一个节区表信息,把代码写到文件的最后面(已经与新的节区表信息对应),主要注意一下,节区的SectionAlignment和FileAlignment,按照这两个参数写节区信息表,跳到节区表中对应文件偏移位置处,写入代码,代码在节区写不满,要填充0,保持文件对齐的值,通常200,最后是收尾工作,PE文件的NumberOfSections加1,SizeOfImage要加上新节区按照SectionAlignment的值对齐后的大小的值,SizeOfHeaders要按照FileAlignment对齐的,如果加上一个IMAGE_SECTION_HEADER,大小不过FileAlignment,就可能不用修改其值的,还有个SizeOfCode是添加代码的大小,就是将含有代码的节区的大小值相加(这个值已经按FileAlignment对齐,载节区表中)。