PCILeech 使用 PCIe 硬件设备来读写目标系统内存。这是通过使用 PCIe 上的 DMA 实现的。目标系统上无需驱动程序。
PCILeech 在没有硬件的情况下也能与 LeechCore 库支持的多种软件内存获取方法配合使用——包括使用 DumpIt 或 WinPmem 捕获远程实时内存。PCILeech 还支持本地内存捕获以及多种内存转储文件格式。
PCILeech 支持多种内存获取设备,包括基于硬件和软件的。基于 USB3380 的硬件仅能原生读取 4GB 内存,但如果首先将内核模块(KMD)插入目标系统内核,则可以读取所有内存。基于 FPGA 的硬件以及基于软件的方法能够读取所有内存。
PCILeech 能够将多种内核植入物插入目标内核——从而通过“挂载的驱动器”轻松访问实时内存和文件系统。还可以移除登录密码要求、加载未签名驱动程序、执行代码以及生成系统 Shell。PCILeech 在 Windows 和 Linux 上运行。目前支持的目标系统为 x64 版本:UEFI、Linux、FreeBSD 和 Windows。这需要对内存具有写入权限(USB3380 硬件、FPGA 硬件、LiveCloudKd 或 CVE-2018-1038 “Total Meltdown”)。
要开始使用,请克隆仓库中的源代码,或下载最新的二进制文件、模块和配置文件。
PCILeech 的 PushPin GUI 前端 使常见的 RedTeam 任务变得极其简单。请注意,PushPin 不属于官方 PCILeech 发行版的一部分。







*) macOS High Sierra 及以上版本不受支持。
PCILeech 同时支持基于硬件和基于软件的内存获取方法。所有内存获取均由 LeechCore 库处理。
以下是支持的基于硬件的内存获取方法摘要。所有基于硬件的内存获取方法均在 Windows 和 Linux 上受支持。然而,基于 FPGA 的方法在 Linux 上性能稍有下降,最高约 90MB/s,而在 Windows 上约为 150MB/s。
以下是支持的基于软件的内存获取方法摘要。请注意,LeechService 仅提供到远程 LeechCore 库的网络连接。连接后,可以使用硬件和基于软件的内存获取方法。
请确保您拥有最新版本的 PCILeech,访问 PCILeech GitHub 仓库:https://github.com/ufrisk/pcileech
获取最新的二进制文件、模块和配置文件。或者克隆仓库并从源代码构建。
请参阅 PCILeech on Windows 指南,了解在 Windows 上运行 PCILeech 的信息。
如果使用 USB3380 硬件,则必须安装 Google Android USB 驱动程序。从以下位置下载 Google Android USB 驱动程序:http://developer.android.com/sdk/win-usb.html#download 解压驱动程序。
如果使用带有 FT601 USB3 附加卡或 PCIeScreamer 的 FPGA,则必须安装 FTDI 驱动程序。从 FTDI 下载 64 位 FTD3XX.dll 并将其放置在 pcileech.exe 旁边。
要在 Windows 中将实时内存和目标文件系统挂载为驱动器,必须安装 Dokany2 文件系统库。请从 https://github.com/dokan-dev/dokany/releases/latest 下载并安装最新稳定版本的 Dokany2。
请参阅 PCILeech on Linux 指南,了解在 Linux 上运行 PCILeech 的信息。
请参阅项目维基页面获取更多示例。维基页面正在建设中,可能仍缺少信息。
挂载目标系统实时 RAM 和文件系统,需要加载 KMD。此示例使用 0x11abc000。
pcileech.exe mount -kmd 0x11abc000显示特定内核植入物的帮助,本例中为 lx64_filepull 内核植入物。
pcileech.exe lx64_filepull -help显示转储命令的帮助。
pcileech.exe dump -help从目标系统转储所有内存,假设内核模块已加载到地址:0x7fffe000。
pcileech.exe dump -kmd 0x7fffe000强制转储 4GB 以下的内存,包括可访问的内存映射设备,在 USB3380 上使用更稳定的 USB2 方法。
pcileech.exe dump -force -device usb3380://usb=2接收 PCIe TLP(事务层数据包)并在屏幕上打印(需要正确配置的 FPGA 开发板)。
pcileech.exe tlp -vv -wait 1000探测/枚举目标系统的可读内存页和最大内存(仅限 FPGA 硬件)。
pcileech.exe probe转储地址在最小值和最大值之间的所有内存,遇到失败页面时不停止。仅在 FPGA 硬件上支持原生 64 位内存访问。
pcileech.exe dump -min 0x0 -max 0x21e5fffff -force转储所有内存,尝试从目标系统注册表中定位内存映射,以避免转储可能无效的内存,以免导致目标系统冻结。
pcileech.exe dump -memmap auto强制使用特定设备(而不是默认自动检测)。pmem 设备不会被自动检测。
pcileech.exe pagedisplay -min 0x1000 -device pmem从远程 LeechAgent 转储远程内存,连接通过 kerberos 加密并进行相互认证。
pcileech.exe dump -device pmem -remote rpc://[email protected]使用 LeechAgent 嵌入式 Python 环境在远程计算机上执行 Python 分析脚本 find-rwx.py。
pcileech.exe agent-execpy -in find-rwx.py -device pmem -remote rpc://[email protected]修补 PID 432(本例中为 lsass.exe)的虚拟进程内存。
pcileech.exe patch -pid 432 -sig unlock_win10x64.sig是否觉得这一切有点难以招架?或者只是想快速提问?加入 PCILeech 和 MemProcFS DMA 社区 Discord 服务器吧!
二进制文件位于此仓库的发布版块中。如果需要构建自己的版本,也可以这样做。请参阅 PCILeech on Windows 或 PCILeech on Linux 以获取有关构建 PCILeech 的更多信息。PCILeech 还依赖 LeechCore,并且(对于某些额外功能)可选地依赖 Memory Process File System,这两个都必须单独构建。
PCILeech、MemProcFS 和 LeechCore 是开源的,但非开放贡献。PCILeech、MemProcFS 和 LeechCore 提供高度灵活的插件架构,允许以插件形式进行贡献。如果您希望为核心项目做出贡献(而非插件),请在开始开发前与我联系。
v1.0-v3.6
v4.0
leechcore.dll/leechcore.so 库。新增设备包括:
v4.1
agent-forensic 命令进行远程内存分析。
./pcileech mount /home/user/fusemnt/leechfs -kmd <your_kmd_address>none 命令。-bar-ro 和 -bar-rw 选项。-psname 选项。Latest:
-no-kmd-mem 选项,用于在加载 KMD 时可选禁用 KMD 内存访问(某些情况下可能有助于稳定性)。-kmd WIN11_X64 - Windows 11 KMD 签名(WIN10_X64_3 的别名)。| 设备 | 类型 | 接口 | 速度 | 64位内存访问 | PCIe TLP 访问 | 项目 赞助者 |
|---|
| ZDMA | FPGA | Thunderbolt3 | 1000MB/s | 是 | 是 | 💖 |
| GBOX | FPGA | OCuLink | 400MB/s | 是 | 是 | 💖 |
| LeetDMA | FPGA | USB-C | 190MB/s | 是 | 是 | 💖 |
| CaptainDMA M2 | FPGA | USB-C | 190MB/s | 是 | 是 | 💖 |
| CaptainDMA M2 100T | FPGA | USB-C | 220MB/s | 是 | 是 | 💖 |
| CaptainDMA 4.1th | FPGA | USB-C | 190MB/s | 是 | 是 | 💖 |
| CaptainDMA 75T | FPGA | USB-C | 200MB/s | 是 | 是 | 💖 |
| CaptainDMA 100T | FPGA | USB-C | 220MB/s | 是 | 是 | 💖 |
| AC701/FT601 | FPGA | USB3 | 190MB/s | 是 | 是 | |
| USB3380-EVB | USB3380 | USB3 | 150MB/s | 否 | 否 | |
| DMA 修补版 HP iLO | BMC | TCP | 1MB/s | 是 | 否 |
| 设备 | 类型 | 易失性 | 写入 | Linux 支持 | 插件 |
|---|
| 原始物理内存转储 | 文件 | 否 | 否 | 是 | 否 |
| 完整 Microsoft 崩溃转储 | 文件 | 否 | 否 | 是 | 否 |
| 完整 ELF 核心转储 | 文件 | 否 | 否 | 是 | 否 |
| VMware | 实时内存 | 是 | 是 | 否 | 否 |
| VMware 内存保存文件 | 文件 | 否 | 否 | 是 | 否 |
| TotalMeltdown | CVE-2018-1038 | 是 | 是 | 否 | 否 |
| DumpIt /LIVEKD | 实时内存 | 是 | 否 | 否 | 否 |
| WinPMEM | 实时内存 | 是 | 否 | 否 | 否 |
| LiveKd | 实时内存 | 是 | 否 | 否 | 否 |
| LiveCloudKd | 实时内存 | 是 | 是 | 否 | 是 |
| Hyper-V 保存状态 | 文件 | 否 | 否 | 否 | 是 |
| LeechAgent* | 远程 | 否 | 否 |