Posted on 2009-09-07 22:09
S.l.e!ep.¢% 阅读(331)
评论(0) 编辑 收藏 引用 所属分类:
PE
下面我简单介绍一下在不同的系统平台下可执行文件的异同以及外壳程序的要求:
1、DOS 平台:
DOS 下面的可执行文件格式分为两种,一种是以.COM 结尾的纯代码文件。COM 文件没有文件头部分,缺省的总是从100H处开始执行,没有重定位项,这也限制了它的所有代码和数据必须控制在64K以内。对这种程序进行外壳加密是十分简单的,只要加密后的代码必须保证在64K以内就可以了。另外一种是以.EXE结尾的文件,这种文件以MZ开头,通常我们称之为MZ文件。MZ文件有一个文件头,用来指出每个段的定义,以及重定位表。.EXE文件摆脱了64K的限制,是DOS下最主要的文件格式。外壳加密程序主要应处理好的就是重定位项的问题。
2、Windows 16 位平台:
在Windows 3.1平台下Microsoft推出了一种新的可执行文件格式,在MZ文件头之后又有一个以NE开始的文件头,我们称之为NE文件。由于Windows的可执行文件同DOS相比增加了很多内容,如资源、动态库等。NE格式表现极为复杂,NE格式文件装载程序读取磁盘上的文件后,需要在内存中成一个完全不同的数据结构。但Microsoft可预见到这种格式的弱点,它允许用户编写自装载代码,也就是说你大可不必理睬 NE 格式的种种要求,只要你的程序能够在内存中生成 Windows 所需要的结构,Windows 不关心你存储在磁盘上的文件是什么结构的。正是利用这个特性,使Windows 16 位平台的外壳加密成为可能。因为你的自装载代码中除了装载代码外,还可以干一些你想干的事情。
3、Windows 32 位平台:
在 Windows 95/NT/2000 上,Microsoft又推出了一种被称之为Portable的新的可执行文件格式。PE文件格式是从COFF的OBJ格式发展而来的,它同NE格式相比进了一大步, 其文件在磁盘中的格式同内存中的格式区别不大,装载程序实现起来相当简单,通过文件内存映像机制将磁盘文件映射到虚拟地址空间,并进行一下重定位及设定引入地址表即可。但由于 PE 文件不支持自装载,很多程序都用自己的方法来管理程序中的数据(如VB、VF等),标准很不统一,给外壳加密的实现带来了很大的困难。另外还有一些技术细节资料的匮乏,也造成外壳加密实现上的困难。现有的外壳加密程序大多都是绕过一些敏感的内容来进行的,所以说PE下的外壳加密距离标准化、通用化还有一定的距离。
外壳加密程序也不是没有缺点的,有很多网上免费的外壳加密程序兼容性很差,加密后的程序在某些计算机或某些操作系统下无法运行。但通常一个好的外壳加密程序足以抵挡大多数解密者的进攻,起码也会大大增加解密所花费的时间。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dennishan/archive/2008/10/09/3043667.aspx