plz save my android data bro
warning 1
以下言論思考完全只是我個人沒腦子的想法,作爲門外漢,對於各領域的知識並沒有深刻的瞭解。
所以如果寫錯了不要打我2333
warning 2
不確認刷機是否會 真 · 清空 手機上所有數據的,謹慎操作,或者拼死一搏,刷入第三方 recovery 刷機獲取 root 權限應該安全點。
太貴重的資料也不建議去外面的手機店找回,因爲會泄露,這麼多 XX門 應該是是最好的例證了吧。
前言
玩手機不可避免會出現不小心刪掉文件想要找回文件,以及想找回以前被刪掉的文件的情況,但是市面上的很多工具都是收費的(當然是真的能用),或者是無法正常運行的(面對X米的官方root授權毫無辦法,當然你可以刷第三方root XD,但是我沒有去嘗試,是個思路),這個時候就很頭疼了。
幸運的是從網上找到了一種方法,原理是:
- 通過 ADB 進入獲得安卓root授權
- 通過 nc(netcat) 監聽端口 tpc 連接並提供 來傳輸文件
- dd 命令提供輸入文件(應該說是分區文件?例如 /dev/block/mmcblk0,如果有掛在 sdcard 的話,應該還能看到 sdcard)
工具環境
流程
第一步:在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 環境有問題。
# 如果安裝失敗可以根據提示 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.
我不知道這個究竟是個啥東西,決定 mount 查看系統的分區掛載信息 再說。
顯而易見, /data/media 被掛載並通過 sdcardfs 文件系統訪問,而 /data 被掛載在 /dev/block/dm-1 上,並通過 ext4 文件系統訪問!
第五步,恢復數據
到這裏爲止,可以決定導出 /dev/block/dm-1 的鏡像了, 使用第三步導出鏡像即可。
最後是通過 R-Studio 和 Active@ Partition Recovery 測試 (拯救) 了下,確能夠恢復刪除的文件。
需要注意的是 ,手機官方的雲備份服務的某些項目(相冊)有可能存放在個人數據中,刷機是會清除個人數據的,爲了用戶安全肯定是真正刪除的 (所以謹慎存放)。
工具下載:
參考文章(注意科學上網):