什么是pe系统
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是pe系统相关的知识,希望对你有一定的参考价值。
什么是pe系统
Windows Preinstallation Environment(Windows PE),Windows预安装环境,是带有有限服务的最小Win32子系统,基于以保护模式运行的Windows XP Professional及以上内核。它包括运行Windows安装程序及脚本、连接网络共享、自动化基本过程以及执行硬件验证所需的最小功能。
Windows PE主要的使用环境是虚拟机,虚拟机环境与实际PC环境几乎没有区别(就是说如果你不清楚虚拟机也没关系,就当是在真实PC上直接运行)。
将Bios中设置成光驱引导,并开始启动系统,当屏幕画面上出现"Press any key boot from cd"时,按任意键从光驱上的Windows PE引导启动。如果你的存储设备驱动不被支持,在启动时按下F6键可加载特殊设备的驱动。
扩展资料:
Windows PE启动相当快捷,而且对启动环境要求不高;其功能几乎相当于安装了一个 Windows 的命令行版本。因此,对于个人计算机用户,只要将其写入U盘(或刻录在一张光碟上),便可放心地去解决初始化系统之类的问题;而对小型网络环境(如网吧等)用户来说,这一功能尤其实用。
在Windows系统下的可执行文件的一种(还有NE、LE),是微软设计、TIS(Tool Interface Standard,工具接口标准)委员会批准的一种可执行文件格式。PE的意思是Portable Executable(可移植可执行)。所有Windows下的32位或64位可执行文件都是PE文件格式,其中包括DLL、EXE、FON、OCX、LIB和部分SYS文件。
参考资料:百度百科-WindowsPE
参考技术APE系统一般指Windows PE。
Windows Preinstallation Environment(Windows PE),Windows预安装环境,是带有有限服务的最小Win32子系统,基于以保护模式运行的Windows XP Professional及以上内核。它包括运行Windows安装程序及脚本、连接网络共享、自动化基本过程以及执行硬件验证所需的最小功能。
Windows PE含有Windows XP、Windows Server 2003、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 10的PE内核。
扩展资料
在PE体系里边就能够对你电脑磁盘操作了,比如格局C盘(体系盘),这是因为pe是独自的保护体系,及时电脑自身的体系坏了也能够通过pe来发动电脑,然后修正或重装体系。因为PE体系具有轻盈,灵敏等长处,所以pe体系上面只要满足根本的体系功用。
现在许多电脑都没有装置光驱,其实只要有一个U盘就能够装体系,这就得归功于PE了。想要用PE装体系就得先把PE体系装置到U盘上(几十M左右,所以只要有U盘就能够装置PE),然后把U盘插在电脑上,设置从U盘发动电脑。这样就能够 进入pe体系。
参考资料
百度百科-Windows PE
基于保护模式下运行Windows XP Prodessional内核,是一个精简的Win32子系统。
pe系统的版本类型
我们熟悉的pe大致有:
1.U盘装系统里PE启动的U盘PE。例如口袋PE 里的Windows8PE、Win2003PE维护系统。
2.光盘装系统中WindowsPE的光盘PE。
3.以及电脑自带的WindowsPE。
pe系统的作用
pe是急救系统,在电脑无法开机时,可以通过pe系统修复电脑里的各种问题,比如删除顽固病毒,修复磁盘引导分区,给硬盘分区,数据备份等。
总结来说,可以实现Windows安装、网络共享、自动底层处理进程、硬件验证等作用。
pe系统运行机制
pe运行是依靠镜像释放(在PE运行时就释放了),在计算机内存和硬盘缓存文件中运行。
PS:由此我们可以知道,PE系统不能运行主要原因是硬件驱动无法加载、缓存无法写入造成。而缓存无法写入的原因最大,有CHS、LBA的原因,也有硬盘自身加载的问题。
pe系统的注意事项
尽管pe系统有诸多优点,同样我们要注意以下两点:
1.若PE核心过于精简无法通过驱动加载会导致蓝屏死机。
2.Pe无法运行,选择的模式错误也可能是原因之一。要注重CHS、LBA模式。
【温馨提示】很多情况下,我们都可以使用PE来进行问题解决。例如电脑中了顽固病毒,在安全模式下由于杀毒软件CPU占用率过高,很容易造成电脑假死或死机,导致病毒无法查杀,而PE就不会出现该情况,还能完美解决病毒问题!
为了更加方便用户重装系统,windows7之家现推出windows系统之家重装大师,windows之家系统重装大师内集成了windows之家更新的各类最新 windows系统,包括XP/Win7/Win8/Win10等系统。让您在也不用为不会装机而烦恼了,强烈推荐大家使用! 参考技术D pe系统是一般安装在U盘 或者 CD上的系统
Windows PE 是带有限服务的最小Win32子系统,基于以保护模式运行的Windows XP Professional内核。它包括运行Windows安装程序及脚本、连接网络共享、自动化基本过程以及执行硬件验证所需的最小功能。”换句话说,你可把Windows PE看作是一个只拥有最少核心服务的Mini操作系统。微软推出这么一个操作系统当然是因为它拥有与众不同的系统功能,如果要用一句话来解释,我认为与Win9X/2000/XP相比,Windows PE的主要不同点就是:它可以自定义制作自身的可启动副本,在保证你需要的核心服务的同时保持最小的操作系统体积,同时它又是标准的32位视窗API的系统平台。当然,现在这么说也许难以理解,没有关系
PE有趣的硬盘使用功能
自定义的Windows PE不仅可放到那些可移动存储设备如CD上,还可以放在硬盘上使用。因为许多朋友会认为将Windows PE的自定义版本放在硬盘上没有什么意义,其实不然。把Windows PE放在硬盘上应该是最为有趣的地方,且不说你的操作系统损坏无法进入的情况下启动硬盘上的Windows PE可以方便地修复,关键是由于Windows PE在硬盘上,所以在Windows PE环境下安装应用程序就有了可能。呵呵,撇开题外话不讲,这里看一下如何把自定义的Windows PE放到硬盘上吧(只能在硬盘上放置Windows PE的32位版本)。
首先要安装恢复控制台:
(1)将Windows XP Professional CD放在CD-ROM驱动器中,这里指定其为cd_drive。
(2)在命令行CMD窗口中运行cd_drive\i386\winnt32.exe /cmdcons。
然后将Windows PE自定义可引导副本放置在硬盘上,如下操作:
(1)在目标硬盘上,创建“C:\Minint”的目录(这里必须将目录命名为“Minint”)。
(2)将Windows PE“根目录\i386”下的所有内容复制到C:\Minint。
(3)从Windows PE根目录下将Winbom.ini复制到目标硬盘的根目录。
(4)在目标硬盘上,将“C:\Cmdcons\txtsetup.sif”的只读属性改为读/写。
(5)在目标硬盘上,将“C:\Minint\txtsetup.sif”复制到“C:\Cmdcons”进行覆盖。
(6)重新启动目标计算机。在“引导”菜单上,选择引导到“命令控制台”,计算机将使用Windows PE引导。本回答被提问者采纳
逆向工程——PE
在(一)中我们主要讨论了什么是PE以及PE头的组成结构,由此我们继续深入学习PE头的核心内容——IAT(IMPORT Address Table)和EAT(EXPORT Address Table)。
在进行Windows程序编程时,我们会使用到windows的各种API,那么在C语言里有类似的include语句,而在实现方面,操作系统是并不认识include语句的,其次,Windows使用了较为庞大的库函数来支持环境,因此运行多个进程,每个程序运行时都包含相同的库,会造成严重的内存浪费。这个时候,操作系统就使用一种手段,称为动态链接库(Dynamic Link Library,简称DLL),DLL的功能很强大,它是用来连接程序与库之间的联系,像桥梁的关系。在PE头(程序的PE头)里有一个IAT表,里面记录了程序正在使用哪些库中的哪些函数,而在DLL的PE头中则存在一张EAT表,它可以准确地求得从相应库中导出函数的起始地址。
使用DLL的好处主要有以下三点:
- 不需要把整个库加载进内存,需要什么用什么就行了。
- 进行内存映射以后,DLL文件可以被多个进程共享,不会造成资源的浪费。
- 更新库函数,只需要修改DLL里对应的地址即可。
- IAT
IAT的结构体为IMAGE_IMPORT_DESCRIPTOR,是PE头中可选项IMAGE_OPTIONAL_HEADER32里的DataDirectory[1],起始地址为IMAGE_OPTIONAL_HEADER32.DataDirectory[1].VirtualAddress(是RVA值,图中为1F4AC),Size为230。
1 typedef struct _IMAGE_IMPORT_DESCRIPTOR { 2 union { 3 DWORD Characteristics; // 0 for terminating null import descriptor 4 DWORD OriginalFirstThunk; // RVA to original unbound IAT (PIMAGE_THUNK_DATA) 5 }; 6 DWORD TimeDateStamp; // 0 if not bound, 7 // -1 if bound, and real date ime stamp 8 // in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND) 9 // O.W. date/time stamp of DLL bound to (Old BIND) 10 11 DWORD ForwarderChain; // -1 if no forwarders 12 DWORD Name; 13 DWORD FirstThunk; // RVA to IAT (if bound this IAT has actual addresses) 14 } IMAGE_IMPORT_DESCRIPTOR; 15 typedef IMAGE_IMPORT_DESCRIPTOR UNALIGNED *PIMAGE_IMPORT_DESCRIPTOR; 16 17 typedef struct _IMAGE_IMPORT_BY_NAME { 18 WORD Hint; 19 BYTE Name[1]; 20 } IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;
执行一个文件通常需要导入多个库,导入多少库就有多少个IMAGE_IMPORT_DESCRIPTOR结构体,这些结构体组成数组,结构体数组最后以NULL结束。
由上图的RVA地址(1F4AC)----->文件偏移地址为1C0AC(1F4AC - 所在节区的VirtualAddress(1F000) + PointerToRawData(1BC00) ),下图灰色选中区域即为第一个结构体。
Address values tips
1 01C0AC 0001F6DC OriginalFirstThunk(INT) 2 01C0B0 00000000 TimeDateStamp 3 01C0B4 00000000 ForwarderChain 4 01C0B8 0001FC7E Name 5 01C0BC 0001F000 FirstThunk(IAT)
-
- Name
Name是一个字符串指针,指向导入函数所属的库文件名称。(RVA 1FC7E ---> FOA 1C87E)
-
- OriginalFirstThunk(INT)
INT的各个元素的值为IMAGE_IMPORT_BY_NAME结构体指针,是由IMAGE_IMPORT_BY_NAME数组构成的表,每4个字节存放着对应的函数名称和Hint。
01C2DC 0001FB84 IMAGE_IMPORT_BY_NAME
...... ...... ...... ......
我们查看IMAGE_IMPORT_BY_NAME(数组中第一个元素)(RVA 1FB84 ---> FOA 1C784)。下图就是存放函数名字的空间。前2个字节为Hint编号,也称为Ordinal,是库中函数的编号,后面一长串是函数的名字。
01C784 0215 Hint 01C786 4F70656E50...... Name
-
- FirstThunk(IAT)
IAT数组中存放的每一个元素中的值是函数的地址(RVA 1F000 ---> FOA 1BC00)。有时IAT也拥有和INT一样的值,如下图。(1FB84转换为FOA与IAT的值一样)
IAT的输入(装载)顺序:
- 读取IMAGE_IMPORT_DESCRIPTOR结构体中的name成员,获取库名称字符串。
- 装载相对应的库(LoadLibrary("库名称字符串"))
- 读取IMAGE_IMPORT_DESCRIPTOR的OriginalFirstThunk成员,获取INT入口地址。
- 再逐一读取INT中数组的值,获取相对应IMAGE_IMPORT_BY_NAME地址(RVA地址)。
- 使用IMAGE_IMPORT_BY_NAME的Hint或者是Name成员,获取相应函数的起始地址。eg: GetProcAddress("GetCurrentThreadld")
- 读取IMAGE_IMPORT_DESCRIPTOR的FirstThunk(IAT)成员,获取IAT的地址。
- 最后将第5步求得的函数地址输入相应的IAT数组中。
- 重复以上4—7步骤,直到最后遇到NULL(NULL为结束)时结束。
- EAT
也有细心的读者发现了,在notepad.exe文件里的IMAGE_OPTIONAL_HEADER32.DataDirectory[0]的地址和大小都为0,也就是说,可执行文件只需要“保管好”自己的IAT表就可以了,而DLL文件则“保管好”自己的EAT值。以下是Kernel32.dll文件中的EAT值。
1 000168 00091020 RVA of EXPORT DIRECTORY 2 00016C 0000D850 size of EXPORT DIRECTORY
-
- IMAGE_EXPORT_DIRECTORY结构体
1 typedef struct _IMAGE_EXPORT_DIRECTORY { 2 DWORD Characteristics; 3 DWORD TimeDateStamp; 4 WORD MajorVersion; 5 WORD MinorVersion; 6 DWORD Name; 7 DWORD Base; 8 DWORD NumberOfFunctions; 9 DWORD NumberOfNames; 10 DWORD AddressOfFunctions; // RVA from base of image 11 DWORD AddressOfNames; // RVA from base of image 12 DWORD AddressOfNameOrdinals; // RVA from base of image 13 } IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
NumberOfFunctions 实际Export函数的个数 NumberOfNames Export函数中具名的函数个数 AddressOfFunctions Export函数地址数组(数组元素个数 = NumberOfFunctions) AddressOfNames 函数名称地址数组(数组元素个数 = NumberOfNames) AddressOfNameOrdinals Ordinal地址数组(数组元素个数 = NumberOfNames)
由上图可知,结构体位置在73020(RVA 91020 ---> FOA 73020)
1 073020 00000000 Characteristics 2 073024 AE0A74BF TimeDateStamp 3 073028 0000 MajorVersion 4 07302A 0000 MinorVersion 5 07302C 00094E96 Name 6 073030 00000001 Base 7 073034 0000063B NumerOfFuctions 8 073038 0000063B NumberOfNames 9 07303C 00091048 AddressOfFunctions 10 073040 00092934 AddressOfNames 11 073044 00094220 AddressOfNameOrdinals
-
- 函数名称数组(AddressOfNames) RVA 92934 ---> FOA 74934,以下图即为数组。每4个字节代表函数名称的RVA地址。
我们以94F02为例,(RVA 94F02 ---> FOA 76F02),以下深色选中区域即为函数名称。
我们再查找Ordinal数组。(RVA 94220 ---> FOA 76220),每2个字节代表索引号(Ordinal)。94F02处的函数名的索引号为0003。
最后我们再根据索引号,查出此函数的实际函数地址。通过AddressOfFunctions成员(RVA 91048 ---> FOA 73048 )的入口地址,再加上索引号产生的偏移量来确定函数地址。
AddressOfFunctions[Ordinal] = RVA (ordinal = 3 , RVA = 94F1A)
Kernel32.dll的ImageBase = 6B800000,因此,此函数的实际地址(VA)为6B894F1A(ImageBase + RVA)。
以上演示的过程的原理其实就是模拟了GetProcAdress()API函数的操作原理:
- 利用AddressOfNames成员转到“函数名称数组”。
- “函数名称数组”中存储着字符串地址。通过比较函数(strcmp)字符串,来查找函数名称。找到以后产生一个索引值(name_index)
- 利用AddressOfNameOrdinals成员,转到ordinal数组。
- 在ordinal数组中通过name_index查找与之相对应的ordinal值:AddressOfNameOrdinals[index] = ordinal
- 再利用AddressOfFunctions成员转到“函数地址数组”(EAT)
- 最后在“函数地址数组”中将求得的ordinal值用作数组索引,获得指定数组的起始地址。
以上是关于什么是pe系统的主要内容,如果未能解决你的问题,请参考以下文章