[記錄]手機數據恢復

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 測試 (拯救) 了下,確能夠恢復刪除的文件。

需要注意的是 ,手機官方的雲備份服務的某些項目(相冊)有可能存放在個人數據中,刷機是會清除個人數據的,爲了用戶安全肯定是真正刪除的 (所以謹慎存放)


工具下載:


參考文章(注意科學上網):

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章