关于Linpmem
Linpmem是一款功能强大的Linux物理内存提取工具,该工具专为x64 Linux设计,可以帮助广大研究人员在执行安全分析过程中快速读取Linux物理内存数据。
该工具类似Windows下的Winpmem,Linpmem不是一个传统的内存转储工具,该工具提供了一个API来从任何物理地址读取数据。除此之外,Linpmem还提供了多种读取物理内存的访问模式,例如字节、dward、qward和缓冲区访问模式等,其中缓冲区访问模式适用于大多数情况。
功能介绍
1、支持使用多种访问模式从内存物理地址读取数据;
2、CRS信息服务(可以通过pid指定目标进程);
3、虚拟地址转物理地址转换服务;
工具下载
广大研究人员可以使用下列命令将该项目源码克隆至本地:
git clone https://github.com/Velocidex/Linpmem.git
工具配置
内核驱动器构建
在使用该工具之前,我们必须按照下列步骤手动构建Linpmem驱动器。
第一步:获取正确的Header
我们需要使用到make工具和一个C编译器,这里推荐使用gcc。
确保安装好了linux-headers,具体的包名可能取决于Linux发行版的版本,下列命令可以检查是否已经安装好了linux-headers:
ls -l /usr/lib/modules/`uname -r`/
需要注意的是,
第二步:make
切换到项目目录中,并使用下列命令即可完成项目编译:
cd Linpmem make
除此之外,你还需要在当前目录下生成linpmem.ko。
加载驱动器
linpmem.ko模块可以通过下列命令完成加载:
insmod path-to-linpmem.ko
或使用下列命令卸载模块:
rmmod path-to-linpmem.ko
加载之后,为了与Linpmem驱动器交互,我们还需要创建下列服务:
mknod /dev/linpmem c 42 0
工具使用演示
演示代码
下面给出的演示代码详细说明了如何与驱动器进行交互,我们可以在“./userspace_interface/linpmem_shared.h”路径下找到用户空间API参考信息:
cd demo gcc -o test test.c (sudo) ./test
请注意,这份代码非常重要!
命令行接口工具
$ ./pmem -h Command-line client for the linpmem driver Usage: pmem [OPTIONS] [COMMAND] Commands: insmod 加载Linpmem驱动器 help 打印工具帮助信息和退出 Options: -a, --address <ADDRESS> 需要执行物理读取操作的地址 -v, --virt-address <VIRT_ADDRESS> 将地址转换成目标进程的地址空间(默认:当前进程) -s, --size <SIZE> 缓冲区读取操作大小 -m, --mode <MODE> 读取操作所使用的读取模式,可选byte, word, dword, qword, buffer -p, --pid <PID> 目标进程CR3信息 --cr3 查询目标进程的CR3值(默认:当前进程) --verbose 显示调试输出 -h, --help 打印帮助信息 -V, --version 打印工具版本
许可证协议
本项目的开发与发布遵循GPL-2.0开源许可证协议。
项目地址
Linpmem:【GitHub传送门】
参考资料
https://github.com/Velocidex/WinPmem