我使用该工具fmem
创建内存转储 dd 文件。效果很好。
但我怎样才能访问这个图像呢?我已经尝试过,mount
但它说我必须指定一个文件系统。但给定的可能性都不起作用(ext4、vfat 等)。
答案1
fmem
是一个内存快照工具。它创建 RAM 内容的映像。
虽然这对于取证或低级调试可能有用,但它不是文件系统映像,无法通过任何方式安装。
答案2
在我自己尝试这个过程中,这个文件只不过是内存的原始数据转储/快照。因此,您可以使用任何十六进制编辑器或诸如 之类的工具hexdump
或适当的取证分析工具来检查它。
下载并编译
我在这里找到了最新版本fmem
:
解压后,你可以像这样编译它:
$ make
rm -f *.o *.ko *.mod.c Module.symvers Module.markers modules.order \.*.o.cmd \.*.ko.cmd \.*.o.d
rm -rf \.tmp_versions
make -C /lib/modules/`uname -r`/build SUBDIRS=`pwd` modules
make[1]: Entering directory `/usr/src/kernels/3.14.4-100.fc19.x86_64'
CC [M] /home/saml/Downloads/fmem/fmem_1.6-0/lkm.o
LD [M] /home/saml/Downloads/fmem/fmem_1.6-0/fmem.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/saml/Downloads/fmem/fmem_1.6-0/fmem.mod.o
LD [M] /home/saml/Downloads/fmem/fmem_1.6-0/fmem.ko
make[1]: Leaving directory `/usr/src/kernels/3.14.4-100.fc19.x86_64'
要加载fmem
内核模块,您可以run.sh
使用存档运行包含的脚本:
$ sudo ./run.sh
Module: insmod fmem.ko a1=0xffffffff81090ca0 : OK
Device: /dev/fmem
----Memory areas: -----
reg01: base=0x000000000 ( 0MB), size= 2048MB, count=1: write-back
reg02: base=0x080000000 ( 2048MB), size= 1024MB, count=1: write-back
reg03: base=0x100000000 ( 4096MB), size= 4096MB, count=1: write-back
reg04: base=0x200000000 ( 8192MB), size= 1024MB, count=1: write-back
reg05: base=0x23c000000 ( 9152MB), size= 64MB, count=1: uncachable
reg06: base=0x0bc000000 ( 3008MB), size= 64MB, count=1: uncachable
-----------------------
!!! Don't forget add "count=" to dd !!!
然后,您可以将约 10MB 的数据收集到文件中tst.dd
:
$ sudo dd if=/dev/fmem of=tst.dd bs=1MB count=10
10+0 records in
10+0 records out
10000000 bytes (10 MB) copied, 0.0541226 s, 185 MB/s
检查生成的文件
如果我们在这个文件中使用典型的工具,您会发现它除了原始二进制数据之外不包含任何其他内容。
文件
$ file tst.dd
tst.dd: data
磁盘驱动器
$ fdisk -l tst.dd
Disk tst.dd: 9 MB, 9999872 bytes, 19531 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
十六进制转储
$ hexdump -C tst.dd | head -10
00000000 53 ff 00 f0 53 ff 00 f0 c3 e2 00 f0 53 ff 00 f0 |S...S.......S...|
00000010 53 ff 00 f0 54 ff 00 f0 c9 a3 00 f0 53 ff 00 f0 |S...T.......S...|
00000020 a5 fe 00 f0 87 e9 00 f0 9f 11 00 f0 9f 11 00 f0 |................|
00000030 9f 11 00 f0 9f 11 00 f0 57 ef 00 f0 49 f5 00 f0 |........W...I...|
00000040 14 00 00 c0 4d f8 00 f0 41 f8 00 f0 9f c7 71 e1 |....M...A.....q.|
00000050 39 e7 00 f0 59 f8 00 f0 99 66 71 e1 d2 ef 00 f0 |9...Y....fq.....|
00000060 57 ff 00 f0 f2 e6 00 f0 6e fe 00 f0 53 ff 00 f0 |W.......n...S...|
00000070 53 ff 00 f0 a4 f0 00 f0 c7 ef 00 f0 01 9b 00 c0 |S...............|
00000080 9f 11 00 f0 9f 11 00 f0 9f 11 00 f0 9f 11 00 f0 |................|
调2fs
$ tune2fs -l tst.dd
tune2fs 1.42.7 (21-Jan-2013)
tune2fs: Bad magic number in super-block while trying to open tst.dd
Couldn't find valid filesystem superblock.
山
$ sudo mount -o loop -t auto tst.dd /mnt/
mount: /dev/loop0 is write-protected, mounting read-only
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
消息
[332140.394396] fmem init_module 449: init
[332140.394401] fmem find_symbols 439: set guess_page_is_ram: ffffffff81090ca0
[333010.390836] loop: module loaded
如果您想了解有关可以转储内存的工具类别的更多信息,请fmem
查看参考部分中的资源列表。
那么我可以用 fmem 的转储文件做什么呢?
我发现这篇文章讨论了创作和分析这些文件。它位于以下标题为的文章中:追踪线索:内存分析 - 管理网络与安全杂志。文章提到了2个工具,尸鬼&挥发物。
摘录
尸鬼
Python 脚本 Draugr 是 Linux 上最早的内存分析工具之一。 Draugr 脚本允许用户直接通过伪设备调查正在运行的系统的内存
/dev/mem
。但是,Draugr 还分析文件中可用的内存转储。 Draugr 的缺点是其功能有限,仅限于列出进程和提取特定内存区域。 Draugr 的开发于 2009 年停止。挥发物
另一个内存分析工具是 Volatilitux,它长期以来被誉为 Linux 的等价物Windows系统上使用的波动率工具。波动率分析框架现在具有内置的 Linux 支持,我将在本文后面介绍。 Volatility 是可用 Linux RAM 分析工具中功能范围最大的;然而,值得注意的是,Volatility 缺乏 Volatilitux 中的两个重要特征。
...
...
除了 Draugr 已知的功能之外,Volatilitux 还允许您查看和提取进程的打开文件。 2011 年 12 月的新版本添加了 64 位支持。
笔记:Windows 工具,挥发性还可以用来分析fmem
文件的输出!