什么是NE和PE

rote_jodz 2002-03-16 05:18:24
听说是种文件格式,有谁能具体介绍一下吗~~
...全文
638 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rote_jodz 2002-03-19
  • 打赏
  • 举报
回复
可以发给我吗
jodz@163.com
Sword_Sharp 2002-03-16
  • 打赏
  • 举报
回复
一、 什么是PE格式?

说的这么热闹,什么是PE格式呢?PE( Portable Executable 可移植的可执行文件 )大
部分的WIN32程序都是用的PE格式。

二、PE格式概貌
以下只是PE格式的大致结构请跟着本教程一步步理解他们吧!
+---------------+
| DOS MZ header |
+---------------+
| DOS stub |
+---------------+
| PE header |
+---------------+
| Section table |
+---------------+
| Section 1 |
+---------------+
| Section 2 |
+---------------+
| Section ... |
+---------------+
| Section n |
+---------------+
1) DOS MZ header
这一模块有64个字节(我所看到的大都如此),我们所关心的是开始和结尾的四个字节.
开始的四个字节是16 BIT的标志位 IMAGE_DOS_HEADER 4D 5A(ASC2码就是'MZ')
这就和BMP文件以'BM'为起始一样仅作标识,了解即可.查看一下刚才打开的文件(以后例子)
在文件最开始就能看见4D 5A(MZ)
最后的四个字节是从文件起始到PE header模块的偏移量.例子中是E0 00 00 00(对于
格式我们最关心的不就是偏移量吗?还不记住?)。

2) DOS STUB
这一模块没有什么好说的.实际上是个有效的 EXE,在不支持 PE文件格式的操作系统中,
它将简单显示一个错误提示,类似于字符串 "This program requires Windows"

3) PE header
这一模块比较重要.他包含很多重要的信息(如:支持在什么样的机器上运行,有多少section
是可执行文件还是DLL等.这个模块的起始地址可由DOS MZ header模块的的最后四个字节读出。
如读到的是 E0 00 00 00 则此模块的起始地址是0000000E,这样PE LOADER可根据此地址跳过
DOS STUB直接定位到此模块。

4) section table
PE格式真正的内容都是以 section为单位的,section table是一个结构数组,该数组中成员的
个数就是该文件的SECTION个数,由PE header模块读出。每个SECTION对应一个结构其
包含对应节的属性、文件偏移量、虚拟偏移量等。

5) 以下就是各个SECTION的内容了

了解了大概的模块让我们看看PE LOADER的装载顺序(以下摘自iczelion的PE教程)

.当PE文件被执行,PE装载器检查 DOS MZ header 里的 PE header 偏移量。
如果找到,则跳转到 PE header。
.PE装载器检查 PE header 的有效性。如果有效,就跳转到PE header的尾部。
.紧跟 PE header 的是节表。PE装载器读取其中的节信息,并采用文件映射方法将这些节映射到内存,
同时付上节表里指定的节属性。
.PE文件映射入内存后,PE装载器将处理PE文件中类似 import table(引入表)逻辑部分。

不是很明白吗?没关系,接下来几章会详细介绍的。
学习完本章之后你应该对PE格式有了概念上的了解了。再看看例子熟悉熟悉吧!
SaintNiya 2002-03-16
  • 打赏
  • 举报
回复
建议你去汇编版看一看,哪里有不少关于pe和ne的文章。
rote_jodz 2002-03-16
  • 打赏
  • 举报
回复
说得好像不是太清楚
zhouzicn 2002-03-16
  • 打赏
  • 举报
回复
最早的外壳程序应该是PKLITE,它是鼎鼎大名的PKZIP公司所写的一个小程序,其作用是对DOS下的可执行文件进行压缩,压缩后的文件一般只有原来的一半大小,但执行起来毫无问题。说穿了就是给原来的程序加了个壳,用户执行的实际上是这个外壳的程序,而这个外壳程序负责把用户原来的程序在内存中解开压缩,并把控制权交还给解开后的真正的程序。
病毒也是一种外壳。在每天都有新病毒产生的今天,被动杀毒已经赶不上病毒的产生速度,于是有人提出了主动预防的观点,这就是通用病毒免疫程序。它的原理是先在未被感染的文件上主动加上个壳,这个壳在执行的时候检查是否外面还有一个壳,如果有那么很可能是被病毒感染了,它会自动把外面的壳脱掉。
如果在外壳程序中加入对软件锁或钥匙盘的验证部分,它就是我们所说的外壳加密了。其实外壳加密的作用还不止于此,在Internet上面有很多程序是专门为加壳而设计的。它的主要特点在于反跟踪,加密代码和数据,保护你的程序数据完整性。
当然外壳程序也可能是以上几种应用的结合体,例如软件锁的外壳加密,一方面它要验证软件锁的正确性,另一方面它要有强大的反跟踪机制来防止黑客修改外壳本身,另外还要对用户真正的程序进行数据加密。

下面我简单介绍一下在不同的系统平台下可执行文件的异同以及外壳程序的要求:
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下的外壳加密距离标准化、通用化还有一定的距离。
外壳加密程序也不是没有缺点的,有很多网上免费的外壳加密程序兼容性很差,加密后的程序在某些计算机或某些操作系统下无法运行。但通常一个好的外壳加密程序足以抵挡大多数解密者的进攻,起码也会大大增加解密所花费的时间。

到北京飞天诚信公司的网址上浏览!
www.dongle.com.cn
rote_jodz 2002-03-16
  • 打赏
  • 举报
回复
不会吧,50分还嫌少啊,有没有热心的人呀!!!!

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧