Windows系统的可执行PE文件的壳的设计过程预案.docx

Windows系统的可执行PE文件的壳的设计过程预案.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PE文件壳的设计过程 标题:pe文件壳的设计过程 作者:baccon(PEDIY论坛),或 chenxiang (软件发布者) 时间:2013年10月26日星期六 今天来讨论一下PE文件的壳,壳主要用于PE文件的商业保护,以此达到软件不被暴掉的可能性,随着破解知识的普及,软件的壳也愈加复杂才可勉强不被暴。。 壳的一个加载过程在许多书上都将过,这里就以图来复习一次: 这张图其实是一种情形,原程序被压缩引擎压过,还可以是在EXE文件上直接加壳不压缩,这样到省了壳的大小,但原EXE代码没有压缩,反而变大了一点,还有一种是在EXE文件的节区的空隙中添加,这样压缩过的文件和原文件一样大,但是对节区的大小有要求。这是三种常规的加壳思路。 如果单单是加一个简单的壳,象罗云彬的《windows32位环境下的汇编语言程序设计》中的那个AddCode就是一个典型代表。主要步骤如下: 首先在节区表上添加一个节区表信息,把代码写到文件的最后面(已经与新的节区表信息对应),主要注意一下,节区的SectionAlignment和FileAlignment,按照这两个参数写节区信息表,跳到节区表中对应文件偏移位置处,写入代码,代码在节区写不满,要填充0,保持文件对齐的值,通常200,最后是收尾工作,PE文件的NumberOfSections加1,SizeOfImage要加上新节区按照SectionAlignment的值对齐后的大小的值,SizeOfHeaders要按照FileAlignment对齐的,如果加上一个IMAGE_SECTION_HEADER,大小不过FileAlignment,就可能不用修改其值的,还有个SizeOfCode是添加代码的大小,就是将含有代码的节区的大小值相加(这个值已经按FileAlignment对齐,载节区表中)。 刚才讲的是上面说的第二个思路,还有两个思路,在下面的附件中有个与此类似的思路的一个,还有个是第三个思路的方法。 上面的这个方法实现是比较简单的,但是这种方法没有什么程序保护功能,下面讲一下又保护功能的方法。 要实现保护功能,可以保护的内容常见的有,导入函数,导出函数,代码段,数据段等。 如何实现导入函数的保护。 在PE文件的头中的DataDirectory有个导入函数的列表,指定RVA和大小,许多PE文件分析,如PEID,LoadPE,还有我的PE Scanner,都是根据这里找到函数的信息的。 这个RVA,在PE文件加载后,会指定到一个IMAGE_IMPORT_DESCRIPTOR,这个结构如下: typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; // 0 for terminatin gnull import descriptor DWORD OriginalFirstThunk; // RVA to original unbound IAT (PIMAGE_THUNK_DATA) } DUMMYUNIONNAME; DWORD TimeDateStamp; // 0 if not bound, // -1 if bound, and real date\time stamp // in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND) // O.W. date/time stamp of DLL bound to (Old BIND) DWORD ForwarderChain; // -1 if no forwarders DWORD Name; DWORD FirstThunk; // RVA to IAT (if bound this IAT has actual addresses) } IMAGE_IMPORT_DESCRIPTOR; typedef IMAGE_IMPORT_DESCRIPTOR UNALIGNED *PIMAGE_IMPORT_DESCRIPTOR; 在这个结构体中OriginalFirstThunk和FirstThunk虽然不指同一位

文档评论(0)

舞林宝贝 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档