用python读取整个物理文件,包括文件松弛?

时间:2015-01-30 21:20:49

标签: python

是否有一种简单的方法可以使用python读取给定文件的所有已分配集群?通常的python read()似乎只允许我读取文件的逻辑大小(当然这是合理的),但我想读取包括松弛空间在内的所有集群。

例如,我有一个名为" test.bin"的文件。这是1234字节的逻辑大小,但由于我的文件系统使用大小为4096字节的簇,因此该文件在磁盘上的物理大小为4096字节。即,文件松弛空间中有2862个字节。

我不知道从哪里开始解决这个问题...我知道我可以从/ dev / sda读取原始磁盘,但我不确定如何找到感兴趣的集群。 ..当然这是拥有文件系统的全部要点(将文件名称与磁盘上的扇区相匹配),但我不太了解python如何与文件系统交互以解决这个问题。 ......但是......任何帮助或参考指针都将非常感激。

2 个答案:

答案 0 :(得分:1)

假设有一个ext2 / 3/4文件系统,正如你猜测的那样,你最好的选择可能是:

  1. 在debugfs周围使用包装器(如this one)来获取与给定文件关联的块列表:

    debugfs:  blocks ./f.txt
    2562 
    
  2. 从块设备/图像文件中读回/那些块

    >>> f = open('/tmp/test.img','rb')
    >>> f.seek(2562*4*1024)
    10493952
    >>> bytes = f.read(4*1024)
    >>> bytes
    b'Some data\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
    \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
    \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
    \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
    ...
    
  3. 不是很花哨,但那会奏效。请注意,您无需安装FS即可执行上述任何步骤。这对于法医应用程序尤其重要,在这些应用程序中,您无法信任磁盘内容和/或每个规则不允许安装磁盘映像。

答案 1 :(得分:0)

有一个C开源取证工具可以成功实现文件访问。 以下是工具Link的概述。 您可以下载here。 它基本上使用 POSIX系统调用 open() ,它返回一个原始文件discriptor(整数),可以与POSIX系统调用 read() write()没有在EOF停止的重新启动,这使您无法访问文件松弛。

网上有很多例子如何使用python进行系统调用,例如this one