如何挂载通过 fmem(内存转储工具)创建的 dd-image

如何挂载通过 fmem(内存转储工具)创建的 dd-image

我使用该工具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文件的输出!

参考

相关内容