20 个稳定版本

5.11.1 2024年7月29日
5.9.17 2024年6月3日
5.9.5 2024年3月20日
5.8.14 2023年10月19日
5.4.4 2023年3月13日

#85 in 操作系统

Download history 26/week @ 2024-05-03 284/week @ 2024-05-10 49/week @ 2024-05-17 13/week @ 2024-05-24 191/week @ 2024-05-31 95/week @ 2024-06-07 107/week @ 2024-06-14 91/week @ 2024-06-21 42/week @ 2024-06-28 53/week @ 2024-07-05 112/week @ 2024-07-12 5/week @ 2024-07-19 202/week @ 2024-07-26 59/week @ 2024-08-02 34/week @ 2024-08-09 33/week @ 2024-08-16

每月328次下载

AGPL-3.0-or-later

340KB
5K SLoC

MemProcFS Rust API

MemProcFS crate 包含了对 MemProcFS 物理内存分析框架 的封装 API。必须编译或 下载 形状的 vmm.dllvmm.so 原生库,才能使用 memprocfs rust crate。

MemProcFS Rust Crate 和 API 的目标是使 Rust 上的 MemProcFS 使用简单流畅!请告诉我您的看法或任何改进建议!

物理内存分析可以在用于法医目的的内存转储文件上进行。分析还可以在实时内存上进行,无论是通过使用 PCILeech PCIe DMA 设备 捕获,还是通过使用驱动程序(如 WinPMEM、LiveCloudKd、VMware 或类似设备)。

Rust API 版本遵循 MemProcFS 主次版本号。始终使用与主次号匹配的 MemProcFS 原生库版本。但是,原生库中的 修订号 可能更高(但不是更低)。通常在原生库中修复错误,而 Rust API 不更新。例如,可以使用 Rust API 版本 5.8.1 与 MemProcFS 5.8.10 一起使用。不支持使用 Rust API 版本 5.8.1 与 MemProcFS 5.7.x 或 MemProcFS 5.9.x 一起使用。

MemProcFS API 的基础是 Vmm 结构。一旦初始化了原生 vmm,就可以以 VmmProcess 结构的形式检索进程。使用 VmmVmmProcess,可以执行各种操作,例如读取/写入内存和检索各种信息。

使用 mem_read()mem_read_ex()mem_write() 方法从 VmmVmmProcess 结构体中读取和写入内存。

高效读取和写入内存 使用 VmmScatterMemory 结构体。

获取信息 关于已加载的模块、内存区域、注册表、进程句柄、内核池分配等!

通过 Rust API 访问 VFS(虚拟文件系统),以获取内置和外部插件的完全访问权限。

MemProcFS Rust API 支持创建本机 MemProcFS 插件,形式为库 .dll.so,适用于更高级的用户。

示例

// Initialize MemProcFS on Linux targeting a live Windows system
// by reading memory using a PCILeech PCIe FPGA hardware device.
// After initialization list all processes.
let mut args = ["-printf", "-device", "fpga"].to_vec();
let vmm = Vmm::new("/home/user/memprocfs/vmm.so", &args)?
if let Ok(process_all) = vmm.process_list() {
    for process in &*process_all {
        println!("{} : {}", process.pid, process.info()?.name);
    }
}
// Initialize MemProcFS on Windows - analyzing a memory dump file.
// Also trigger the forensic mode and scan for VMs.
// List all processes in the virtual file system directory /name/.
let mut args = ["-printf", "-forensic", "1", "-vm",
                "-device", "C:\\dumps\\memory.dmp"].to_vec();
let vmm = Vmm::new("C:\\MemProcFS\\vmm.dll", &args)?
if let Ok(vfs_all) = vmm.vfs_list("/name/") {
    println!("Number of files/directories: {}.", vfs_all.len());
    for vfs in &*vfs_all {
        println!("{vfs}");
    }
}

示例项目

查看示例项目 example project 和示例 MemProcFS 插件 example MemProcFS plugin

项目文档

查看 MemProcFS、LeechCore 和 pcileech-fpga 的项目文档。

问题和评论

请随时与我联系!

开始吧!

查看 MemProcFS 文档示例项目

祝您 Rust 内存分析项目一切顺利!

依赖项

~0.6–6MB
~26K SLoC