|
|
51CTO旗下网站
|
|
移动端

用Scalpel紧急找回丢失的文件

备份失败且文件丢失时,应采取紧急措施。可用Scalpel深入丢失的分区并恢复丢失的文件。

作者:布加迪编译来源:51CTO|2019-07-17 09:20

用Scalpel紧急找回丢失的文件

【51CTO.com快译】系统管理员的部分职责是帮助用户管理数据。这么做的一个重要方面是,确保贵公司有良好的备份计划,用户定期备份,或者使定期备份实现自动化。

然而糟糕的情况时而会发生。文件误删除,文件系统损坏或分区丢失,无论出于何种原因,备份都未含有你需要的内容。

在试图恢复丢失的数据之前,你得先查明数据丢失的原因。用户可能只是放错了文件,或者用户不知道有备份。但如果用户确实删除了没有备份的文件,你就需要恢复删除的文件。不过如果分区表被打乱了,文件其实根本没有丢失,你可能需要考虑用TestDisk(https://www.redhat.com/sysadmin/recover-partition-files-testdisk)来恢复分区表或分区本身。

如果文件或分区恢复不成功,或只恢复了一部分,该如何是好?这时候Scalpel(https://github.com/sleuthkit/scalpel)出场了。 Scalpel基于描述独特文件类型的模式来执行文件雕复(file carving)。它基于二进制字符串和正则表达式查找这些模式,然后相应提取文件。

该工具目前未加以维护,但向来可靠,编译和运行起来完全符合预期。如果你运行Red Hat Enterprise Linux(RHEL)7、RHEL 8或Fedora,可以从klaatu.fedorapeople.org下载Scalpel的RPM安装程序及依赖项libtre。

Scalpel入手

Scalpel捆绑有全面的文件类型及独特的识别功能。有时,可以通过头尾部的可预测文本来识别文件:

  1. htm n 50000 

而有时需要神秘的十六进制代码:

  1. jpg y 200000000 \xff\xd8\xff\xe0\x00\x10 \xff\xd9 

Scalpel要求你复制/etc/scalpel.conf,编辑副本以添加希望恢复的文件类型,将不需要的文件类型排除在外。比如,如果你知道没有或不关心.fws文件,就在文件中将该行注释掉。这么做可以加快恢复过程并减少误报。

在配置文件中,文件定义的格式从左到右如下:

  • 文件扩展名。
  • 头尾部是不是区分大小写(y或n)。
  • 希望Scalpel找到的最小和***的文件。
  • 识别文件开始的标准头部。
  • 识别文件结束的标准尾部。

footer字段是可选的。如果未提供footer,Scalpel提取你设为文件类型***值的字节数。

你可能发现恢复工作只抢救了文件的一部分,比如这个主体恢复的JPG:

图1. 不完整的JPG文件

此结果意味着你可能需要增加文件的边界***值,然后重新扫描,以便文件的末尾也能恢复:

图2. 修复后的JPG文件

定义新文件类型

首先拷贝Scalpel配置文件。如果你的所有用户生成类似的数据,整个公司可能只需要一个配置文件。或者,每个部门都有一个配置文件可能更好。

要将自己的文件类型添加到Scalpel配置,先做一番调查取证分析。

若是文本文件,***有某种可预测的结构。比如说,XML文件可能以

  1. $ head --bytes 8 example.xcf | hexdump --canonical  
  2. 00000000 67 69 6d 70 20 78 63 66 |gimp xcf|  
  3. 00000008 

此输出来自Red Hat Enterprise Linux 8系统。在较旧系统上,可能需要较旧的语法:

  1. $ head --bytes 8 example.xcf | hexdump -C  
  2. 00000000 67 69 6d 70 20 78 63 66 |gimp xcf|  
  3. 00000008 

hexdump的标准输出在最左列显示地址,在最右边显示解码值。中间列显示的是XCF文件***行的前8个字节的十六进制字节。

/etc/scalpel.conf中的大多数二进制文件看起来与该输出很相似,只是这些值以\ x换码序列开头,表示这些数字实际上是十六进制数字。比如说,JPG文件在配置文件中看起来这样:

  1. jpg y 200000000 \xff\xd8\xff\xe0\x00\x10 \xff\xd9 

将该值与你的系统上任何JPG文件的前6个字节的测试十六进制值(因为这是scalpel.conf在其JPG定义中包含的字节数)进行比较:

  1. $ head --bytes 6 example.jpg | | hexdump --canonical  
  2. 00000000 ff d8 ff e0 00 10 |......|  
  3. 00000006 

将尾部与***2个字节进行比较以匹配配置文件显示的内容:

  1. $ tail --bytes -2 example.jpg | hexdump --canonical  
  2. 00000000 ff d9 |..|  
  3. 00000002 

这些值匹配,因此你可以确信有效的JPG文件可能都以可预测的顺序开始和结束。

注意:scalpel.conf文件中的Ogg条目具有误导性,因为它没有\ x换码序列。如果你需要恢复Ogg文件,请解决此问题或替换其定义。

开始动手

现在,为你需要恢复的所有文件(比如前面例子中的XCF)获得同样的信心级别。重申一下,这是你定义问题驱动器常见的二进制文件类型的工作流程:

1. 使用head -bytes n命令,获取文件类型的前几个字节的十六进制值。

2. 使用tail --bytes -n命令,获取***几个字节。

3. 对几个相同类型的不同文件重复此过程,以确认此模式的一致性,根据需要调整头部和尾部模式的长度。

4. 在自定义Scalpel配置中输入头部值和尾部值,使用\ x表示法将每个字节标识为十六进制字符。

针对需要恢复的每个重要的二进制文件类型,按此顺序操作。

如果文件是纯文本,提供通用头部和尾部,比如代表shell脚本的#!/bin/sh、代表带有h1级标题的标记文件的#(#后面的空格很重要)、代表XML文件的

准备好运行Scalpel时,创建一个可以放置已抢救文件的目录:

  1. $ mkdir /run/media/seth/rescuer/scalped 

注意:请勿在含有丢失数据的同一个卷上创建此目录。

如果问题驱动器尚未挂载,请挂载,然后运行Scalpel:

  1. $ scalpel -c my-scalpel.conf \  
  2. -o /run/media/seth/rescuer/scalped \  
  3. /run/media/seth/victim 

还可以在磁盘映像上运行Scalpel:

  1. $ scalpel -c my-scalpel.conf \  
  2. -o ~/scalped ~/victim.img 

Scalpel运行完毕后,请在指定的抢救目录中查看文件。

总之,***进行备份,那样可以避免文件恢复。但万一发生最坏的情况,不妨试试Scalpel、慎重雕复。

原文标题:Find lost files with Scalpel,作者:Seth Kenlon

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【编辑推荐】

  1. 使用防火墙让你的Linux更加强大
  2. 在Linux中如何从命令行查找VirtualBox版本
  3. 微软更新Linux子系统,编译WSL 2内核只需3步
  4. 程序员必备!非常全的Linux基础知识点,你知道多少?
  5. Linux系统CPU占用率较高问题排查思路
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

超级网管员——网络设备

本书深入细致地介绍了用于构建网络的最重要的硬件设备——交换机、路由器、安全设备和无线设备,涵盖了原理、参数、分类、适用、规划、接口...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客