[记录]手机数据恢复

warning 1

以下言论思考完全只是我个人没脑子的想法,作为门外汉,对于各领域的知识并没有深刻的了解。
所以如果写错了不要打我2333

warning 2

不确认刷机是否会 真 · 清空 手机上所有数据的,谨慎操作,或者拼死一搏,刷入第三方 recovery 刷机获取 root 权限应该安全点。
太贵重的资料也不建议去外面的手机店找回,因为会泄露,这么多 XX门 应该是是最好的例证了吧

前言

玩手机不可避免会出现不小心删掉文件想要找回文件,以及想找回以前被删掉的文件的情况,但是市面上的很多工具都是收费的(当然是真的能用),或者是无法正常运行的(面对X米的官方root授权毫无办法,当然你可以刷第三方root XD,但是我没有去尝试,是个思路),这个时候就很头疼了。

幸运的是从网上找到了一种方法,原理是:

  • 通过 ADB 进入获得安卓root授权
  • 通过 nc(netcat) 监听端口 tpc 连接并提供 来传输文件
  • dd 命令提供输入文件(应该说是分区文件?例如 /dev/block/mmcblk0,如果有挂在 sdcard 的话,应该还能看到 sdcard)

工具环境

  • 科学上网
  • 已 root 手机(红X5 plus,官 root)
  • ubuntu
  • adb
  • nc
  • pv

流程

第一步:在root手机上安装 busybox

详情查看 google play 23333
一般会遇到的问题:

busybox 安装失败

在本环境中会出现很玄学的无法对 system 写入 busybox 的问题,导致各种安装失败。
解决方法是重启后第一时间安装 busybox ,怀疑是手机系统会对 system 的 rw 修改给禁止掉,导致无法将 system 从 r 模式修改为 rw 模式。
总之重启就对了

第二步:在Linux上安装 adb nc pv

参考文章中使用 cygwin 来模拟 linux 的运行环境,但是在 nc pv 方面遇到了很多问题,包括 nc 之间连接不上,pv 无法正确监控进程,或者是 pv 没有正确打印等等,所以后来选择了实体 linux 系统并通过实测。
简单来说就是 Cygwin 模拟 linux 凉了,当然小伙伴门还是可以选择尝试一波的,可能我的 Cygwin 环境有问题。

install adb

# 如果安装失败可以根据提示 sudo 或者 update 一下
apt install android-tools-adb android-tools-fastboot
# 检查版本,或者直接 adb 显示用法来检查是否安装成功
adb version

install nc

apt install netcat

install pv

apt install pv

第三步:adb 连接手机并使用 nc dd 设置输入文件

# 让 adb 监听某一个 tcp 端口
adb forward tpc:23333 tcp:23333
# 让 adb 以 root 权限执行命令,有些机型进入 adb shell 后 su 命令没有权限,可以尝试这个命令
adb root
# 连接手机
adb shell
su
# nc 监听端口连接 并 dd 设置输入文件,输入文件其实是设备,这样外部 nc 就可以扫描到整个设备的数据并导出了
# busybox nc -l -p 23333 -e busybox dd if=/dev/block/mmcblk0

第四步:寻找正确的分区进行导出

先放结论:

因为手机内存的分区格式是 sdcardfs ,所以第三部导出的镜像虽然包含了所有的分区,但是内存数据所在的分区格式是 sdcardfs ,而 sdcardfs 是VFS和其它文件系统之间的一个中间件,并不是实际的真实访问物理存储设备的文件系统,所以是无法通过数据恢复软件读取分区格式恢复的
因此需要通过 mount 、 df 找出手机内存底层文件系统(实际分区) 并使用第三步进行导出。

原来想要讲的话:
咳咳,上面的命令我遇到了问题, mmcblk0 应该是整个系统挂载的设备
这里就有个问题了,(现在) 安卓机的存储分区格式是 sdcardfs ,不被主流的数据恢复软件识别
但是经过 通读 sdcardfs.h 全文 我看得懂的部分,知道了 sdcardfs 是基于 Wrapfs 的一种文件管理系统。

# 只有头文件注释是我看的懂得那部分代码2333
 fs/sdcardfs/sdcardfs.h

 The sdcardfs v2.0
   This file system replaces the sdcard daemon on Android
   On version 2.0, some of the daemon functions have been ported
   to support the multi-user concepts of Android 4.4

 Copyright (c) 2013 Samsung Electronics Co. Ltd
   Authors: Daeho Jeong, Woojoong Lee, Seunghwan Hyun,
               Sunghwan Yun, Sungjong Seo

 This program has been developed as a stackable file system based on
 the WrapFS which written by

 Copyright (c) 1998-2011 Erez Zadok
 Copyright (c) 2009     Shrikar Archak
 Copyright (c) 2003-2011 Stony Brook University
 Copyright (c) 2003-2011 The Research Foundation of SUNY

 This file is dual licensed.  It may be redistributed and/or modified
 under the terms of the Apache 2.0 License OR version 2 of the GNU
 General Public License.

找出重点: This program has been developed as a stackable file system based on the WrapFS
好了又要翻资料了,什么是 WrapFS 呢?

简单来说:

  • 要有一个已经通过其它文件系挂载好的底层文件系统目录,mount -t ext4 /dev/block/mmcblk0p1 /system
  • 要将这个已有的、挂载好的目录再挂载到/mnt/wrapfs目录,mount -t ext4 /system /mnt/wrapfs
  • 现在可以通过 wrapfs 来通过底层文件系统访问物理储存设备了

同理可得 知道不,所以 sdcardfs 应该也是同样的道理,于是 使用 df 查看分区信息 ,看能否辨别出手机内存分区。
好了我们现在看到了那个 52G 的大兄弟了,分别是 /data/media 跟 /dev/block/dm-1 选手。

可以看到, 系统将 dm-1 设备挂载在 /data 目录下 ,使得可以通过 /data 访问 dm-1 的文件数据,再将目录 /data/media 挂载到 /mnt/runtime/default/emulated 下,至于这个 /mnt/runtime/default/emulated 是个啥我也不清楚,但是结合上面可以很马后炮地看出,这是一个 VFS和其它文件系统之间的一个中间件,哦对它就是 sdcardfs !好了下面的话可以略过了2333.
df 命令结果
我不知道这个究竟是个啥东西,决定 mount 查看系统的分区挂载信息 再说。
mount 命令结果
显而易见, /data/media 被挂载并通过 sdcardfs 文件系统访问,而 /data 被挂载在 /dev/block/dm-1 上,并通过 ext4 文件系统访问!

第五步,恢复数据

到这里为止,可以决定导出 /dev/block/dm-1 的镜像了, 使用第三步导出镜像即可。
最后是通过 R-Studio 和 Active@ Partition Recovery 测试 (拯救) 了下,确能够恢复删除的文件。

需要注意的是 ,手机官方的云备份服务的某些项目(相册)有可能存放在个人数据中,刷机是会清除个人数据的,为了用户安全肯定是真正删除的 (所以谨慎存放)


工具下载:


参考文章(注意科学上网):

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值