【问题标题】:Programmatically extract files from dd image in C以编程方式从 C 中的 dd 图像中提取文件
【发布时间】:2011-02-02 19:22:10
【问题描述】:

我有一些 dd 图像,我想知道使用 C 从这些图像中提取文件的最佳方法。这些图像是混合文件系统(fat32、ntfs、ext2/3)的,进行提取的主机会是一个 Ubuntu 机器,所以你可以假设内核头文件和 GNU C 库等。

本地最好,但可以完成这项工作的外部库也可以。一个示例的链接将是完美的。

【问题讨论】:

    标签: c linux image file extract


    【解决方案1】:

    这是一项重大的努力。您必须从根本上重新实现 NTFS、FAT 和 EXT2 的文件系统驱动程序。我已经为 FAT 和 NTFS 完成了这项工作,但花了两年多的时间,尽管其中大部分是对 NTFS 进行逆向工程。

    考虑使用 mount 命令的file mount 选项,这样您就可以使用 Ubuntu 文件系统驱动程序,而不必重新发明非常大的轮子。然后你就可以细读挂载的文件系统了。

    【讨论】:

    • 您不能使用内核头文件链接到 Linux 的文件系统模块并完成相同的任务吗?
    • 你可以,但只能对内核上的所有依赖项进行大量调整。如果这是一个不允许用户实际挂载文件系统的权限问题,那么您可能会更容易在用户空间中的整个 linux 内核的上下文中进行提取,而不是一个片段 - 即用户模式 ​​linux .显然,一旦您开始使用内核的一部分,使用它的一部分和使用整个内核之间就没有许可差异。
    • 许可没有问题,这主要是出于好奇并尝试用我的编程经验做一些新的事情。我以前没有做过文件系统级编码,所以我认为这是了解 Linux 如何处理它们的好方法
    【解决方案2】:

    为什么要用 C 编程?

    sudo mount -o loop,offset=[offset] -t auto [where] [what]

    在哪里

  • offset 是从磁盘开头的偏移量,以字节为单位
  • where 是在当前文件系统上挂载映像的位置
  • 什么是您要挂载的磁盘映像
  • 【讨论】:

    • 第一个原因是好奇心 :)。我知道有很多替代方法可以做到这一点。
    • 为什么是 C?因为。请参阅man 2 mount,对于循环设备,有足够多的简单示例随处可见(因为没有手册页)。
    • @user562374:仔细阅读。为什么以编程方式 使用 C 是问题所在。这是为了好奇而重新发明一个巨大的项目,这没关系。
    • 感谢 man 2 mount 命令。不过,我还没有找到一个用于循环设备的示例,愿意分享其中一个吗?
    【解决方案3】:

    查看The Sleuth Kit,它应该适用于您列出的所有文件系统类型:

    Sleuth Kit 的原始部分是一个 C 库和命令行文件和卷系统取证分析工具的集合。文件系统工具允许您以非侵入方式检查可疑计算机的文件系统。由于这些工具不依赖操作系统来处理文件系统,因此会显示已删除和隐藏的内容。它在 Windows 和 Unix 平台上运行。

    如果您正在寻找可以使用的示例代码,Sleuth Kit 的现有工具集是一个很好的起点。

    【讨论】:

      【解决方案4】:

      退房:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 2021-02-11
        • 2017-01-24
        • 1970-01-01
        • 2021-05-03
        • 1970-01-01
        • 2012-07-18
        相关资源
        最近更新 更多