Windows 中的 PE 加载程序在哪里?

信息安全 视窗 逆向工程
2021-09-01 16:26:36

我读过PE加载器负责从磁盘加载可执行图像。控制流何时何地准确地传输到加载器?PE 格式有据可查,但似乎有一些关于加载程序本身功能的信息。

3个回答

要回答您的问题,我需要完整描述如何创建新流程。

Windows Internals 第 6 版第 1 部分的第 5 章对此进行了很好的描述(第 5 章可在 Microsoft 网站上免费在线获得),它准确地解释了所有这些是如何工作的。

我将解释书中所说内容的概述,因为逐字复制可能会有一些版权问题。

kernel32.dllPE 加载器由系列中的一组用户 API 公开CreateProcess有不同的 API 用于做不同的事情,例如在替代安全上下文下运行进程。

以下是它的工作原理:

  • 用户模式 ​​API 验证输入参数,并将它们转换为它们的系统(本机)对应物。
  • 然后它打开可执行文件并将其加载到内存中。
  • 在内核中创建执行进程对象。这涉及填充EPROCESS结构并在各种列表中注册进程。
  • 创建进程的主线程(堆栈、执行上下文、线程对象)
  • 执行子系统特定的初始化 - 例如 .NET 应用程序的 CLR 初始化。
  • 启动主线程(除非它是使用挂起标志集创建的)
  • 在进程的上下文中加载适当的 DLL。

其中大部分是在内核级别完成的,使用适当的Ps- 前缀本机函数。所涉及的全套步骤相当复杂(实际上,它在书中占据了整整 15 页)并且根据所使用的子系统涉及许多不同的操作。

您的问题的棘手部分是“加载器”并不是真正获得控制流的东西。在您调用 的那一刻CreateProcess,从技术上讲,您正在运行加载程序。但是,加载程序的内核部分在ntdll!NtCreateUserProcess转换到内核模式时开始。如果我们真的很严格,我们可能会说加载器的第一部分是PspAllocateProcess,因为这是分配初始结构的部分。

1\ NtCreateSection-->MmCreateSection-->ntoskrnl.exe 中的MiCreateImageFileMap。您可以搜索“wrk”或使用 IDA 进行反转。包含一些 PE 字段验证。

2\LdrpInitializeProcess 在 ntdll.dll 中。

这两个是最重要的。

在 Mastering Malware Analysis: The Complete 恶意软件分析师对抗恶意软件、APT、网络犯罪和 IoT 攻击的指南 [Alexey Kleymenov, Amr Thabet] 一书中,第 2 章中有 2 个部分称为“逐步加载进程”和“ PE 文件加载步骤”,其中记录了 Windows PE 加载程序是如何加载的以及它是如何工作的。

此视频LoaderWatch演示向您展示了 Windows PE 加载程序的示例跟踪:https ://www.youtube.com/watch?v=qxPEV4PJ6XY