Velocidex/WinPmem

GitHub: Velocidex/WinPmem

WinPmem 是一款开源的 Windows 物理内存获取工具,为数字取证和事件响应提供可靠的内存镜像采集能力。

Stars: 998 | Forks: 147

# WinPmem —— 一款物理内存获取工具 ![替代文本](site/figures/128x128/winpmem_with_eye.png "WinPmem —— 一款物理内存获取工具") **WinPmem** 长期以来一直是 Windows 默认的开源内存获取驱动。它曾经属于 Rekall 项目,但最近已被拆分到其独立的代码库中。 这是 *Windows* 版本。*Linux* 版本,**Linpmem**,位于:[https://github.com/Velocidex/Linpmem](https://github.com/Velocidex/Linpmem) ## 版权 此代码最初由 Google 开发,但在 Apache 许可证下发布。 ### 描述 WinPmem 是一款物理内存获取工具,具有以下功能: - 开源 - 支持 Win7 - Win10,x86 + x64。可使用 WDK7600 来包含对 WinXP 的支持。 默认情况下,提供的 WinPmem 可执行文件将使用 WDK10 编译,支持 Win7 - Win10,并采用更现代的代码。 - 三种独立的读取方法,其中两种方法可创建完整的内存转储。 其中一种方法即使在面临内核模式 rootkit 时也始终有效。 - 支持原始(RAW)内存转储镜像。 - 使用读取设备接口,而不是像其他一些镜像工具那样从内核写入镜像。这允许我们拥有复杂的用户空间镜像工具(例如跨网络复制、哈希等),以及在实时系统上运行分析(例如可以直接在此设备上运行)。 此目录中的文件(包括 WinPmem 源代码和已签名的二进制文件),均在以下许可证下提供:Apache License, Version 2.0 ### 如何使用 有两个 WinPmem 可执行文件:winpmem_mini_x86.exe 和 winpmem_mini_x64.exe。 这两个版本都同时包含了驱动程序(32 位和 64 位版本)。 二进制文件名中的“mini”表示这是一个极其简单的镜像工具——它只能生成 RAW 格式的镜像。过去,我们发布过基于 AFF4 的 WinPmem 镜像工具,但该工具尚未更新以支持新驱动程序。如果您需要基于 AFF4 的镜像工具,请告诉我们。 ### Python 获取工具 winpmem.py 该 Python 程序目前正在构建中,但可以作为演示,展示如何从 Python 中使用该镜像工具。 ### winpmem_mini_x64.exe(独立可执行文件) 此程序最适用于事件响应,因为它除了可执行文件本身之外不需要任何其他依赖项。该程序将自动加载正确的驱动程序(32 位或 64 位)并且是完全自包含的。 ##### 示例: `winpmem_mini_x64.exe physmem.raw` 使用默认的获取方法将原始镜像写入 physmem.raw。 `winpmem_mini_x64.exe` 调用用法打印 / 简短手册。 要专门使用 MmMapIoSpace 方法获取原始镜像: `winpmem.exe -1 myimage.raw` 获取镜像后,驱动程序将自动卸载! ### 限制 由于 Microsoft 设计 MJ READ 函数的方式,如果指定的物理地址*大于* UINT64 最大值的一半,在 Winpmem 中从物理内存读取将会失败并返回 STATUS_INVALID_PARAMETER。例如,如果有人想要读取物理内存的较高部分**并且**拥有庞大的物理内存(超过 9,223,372,036,854,775,807 字节),就会出现这种情况。这听起来极不可能,但如今的 RAM 容量还在不断增加。 ## 实验性写入支持 WinPmem 源代码支持写入内存以及读取内存。 此功能是一个极佳的学习工具,因为许多 rootkit 隐藏技术都可以通过直接写入内存来模拟。 使用此功能时必须格外谨慎! 注意:由于这是一项相当危险的功能,已签名的二进制驱动程序已禁用写入支持。如果你想使用此功能,可以重新编译驱动程序以生成测试签名的二进制文件。未签名的二进制文件(实际上是使用测试证书进行自签名的)由于是测试自签名的,因此无法在常规系统上加载,但你可以通过发出以下命令(参见 https://docs.microsoft.com/en-us/windows-hardware/drivers/install/the-testsigning-boot-configuration-option)来允许在测试系统上加载未签名的驱动程序: `Bcdedit.exe -set TESTSIGNING ON` 然后重新启动。你会在桌面上看到一个小小的“Test Mode”文字,提醒你这台机器已配置为支持测试签名的驱动程序。 此外,写入支持还必须在加载时启用: `winpmem.exe -w -l` 这将加载驱动程序并开启写入支持。
标签:SecList, UML, 内存取证, 内存获取, 取证工具, 客户端加密, 数字取证, 网络安全监控, 自动化脚本, 逆向工具, 驱动开发