- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Pe文件实现信息隐藏
Pe文件实现信息隐藏 冯绍东 一 PE文件结构 PE文件框架构成 DOS MZ header DOS stub 节表 ( Section): typedef struct _IMAGE_SECTION_HEADER { BYTE????Name[IMAGE_SIZEOF_SHORT_NAME];//节表名称,如“.text” union { ????DWORD?? PhysicalAddress; //物理地址 ???? ????DWORD?? VirtualSize; //真实长度 } Misc; DWORD? VirtualAddress ; //RVA DWORD?? SizeOfRawData; //物理长度 DWORD?? PointerToRawData; //节基于文件的偏移量 DWORD?? PointerToRelocations; //重定位的偏移 DWORD?? PointerToLinenumbers; //行号表的偏移 WORD????NumberOfRelocations; //重定位项数目 WORD????NumberOfLinenumbers; //行号表的数目 DWORD?? Characteristics; //节属性 } 可用空间= SizeOfRawData(物理长度 )- VirtualSize(真实长度 ) 二 原理 (1) 原理(2)段隐藏空间 原理(3)PE文件头隐藏空间 三 实现 首先获得pe文件头的信息 获得段的信息 写文件,实现信息隐藏 获得pe文件头的信息 获得段的信息 写文件,实现信息隐藏 四 上述算法的一点改进 为了增强保密性,最好在隐藏资料前对资料进行加密,如使用rijnaedl等算法 为了能检测出,资料是否被修改,可以采取校验位方法 详细做法参看程序源代码 使用rijnaedl 可利用现成的控件 可以用程序接口 简单校验位方法 五 小结 pe文件具有一定的隐藏性.许多病毒程序就隐藏于它.和bmp图象隐藏相比有它自己的特点 Pe文件实现信息隐藏目的在于提供一种新想法 谢谢! 如有错误请指出 EMAIL:sudunfsd@163.com * * 主要内容: PE文件结构 原理 实现 上述算法的一点改进 小结 DOS MZ header DOS stub PE header Section table Section 1 Section 2 Section ... Section n PE文件结构的总体层次分布。 所有 PE文件(甚至32位的 DLLs) 必须以一个简单的 DOS MZ header 开始,在偏移0处有DOS下可执行文件的“MZ标志”,有了它,一旦程序在DOS下执行,DOS就能识别出这是有效的执行体,然后运行紧随 MZ header 之后的 DOS stub。DOS stub实际上是个有效的EXE,在不支持 PE文件格式的操作系统中,它将简单显示一个错误提示,类似于字符串 This program cannot run in DOS mode 或者程序员可根据自己的意图实现完整的 DOS代码。通常DOS stub由汇编器/编译器自动生成,对我们的用处不是很大,它简单调用中断21h服务9来显示字符串This program cannot run in DOS mode。 PE文件由于使用高级语言编写的,存在大量的冗余,我们需要做的是在不影响程序执行的基础上把我们的资料存放到那些程序没用到的空间。我们可在上边的节表中发现SizeOfRawData,VirtualSize,一个是物理长度,一个是实际长。SizeOfRawData-VirtualSize就是我们可利用的空间。我们只要找到这段空间的起始地址就行了。而PointerToRawData就是我们要的,这样问题都解决了。剩下的只是编程实现了。另外,除了段空间可利用外,文件头也有一大段的空间可用,CIH病毒就是利用它隐藏自己的。 为了加强隐密性,我们需要把VirtualSize的值改为VirtualSize+加入该段的长度。而这会导致后来还原不回来,所以要在文件中加入一段特殊的字符串,这样在还原时根据该字符串得到隐藏资料的起点。在程序中特殊字符串即用户输入的密码。这样不知道密码者就不容易获得其中隐藏资料。 段 程序占用空间 可利用空间 段首地址PointerToRawData 真实长度 VirtualSize 物理长度SizeOfRawData PE文件头 第一段的PointerToRawData DOS MZ header DOS stub PE header Section tabl
原创力文档


文档评论(0)