先日はとあるAndroidデータ復元ソフトを利用して削除したファイルをスマホから復元してみましたが、制限がなかなか多いです。そして、このようなソフトの仕組みを調べると、ほかの選択肢が見つかりました、例えばPC向けのより強力なアルゴリズムを利用するデータ復元ソフトを借りてスマホのデータを回復すること。

スマホ機種について

この文はXiaomi Mi3とXiaomi会社の技術者からリリースされたNative Android 4.4 ROMに基づくものです。

アウトサイドインの視点で「ソフトは何をした」を理解する

はっきり言うと、AndroidはUnix系のシステムですよね。その視点で、Androidデータ復元ソフトの仕事はただ特定のマウント・ポイント下のデータをPCにコピーして、関連アルゴリズムによってデータを分析する、そして削除したフアイルを回復する、ということです。

1
2
1. 特定のマウント・ポイント下のデータをPCにコピーする。
2. 特定のアルゴリズムを利用し、データを分析と復元する。

次は上記の点を実現する問題です。複雑の部分はほとんど第一点にあります。2つのハードウェアが関与しているため、まずUSBケーブルを使って物理的な通信チャネルを確立する必要があります。その前にAndroidデバイスのUSBデバッグを有効にすることをわすれないでね。もちろんWiFiでハードウェアを同じLAN内に保証するという手段もOKですが、ネットワークのデータ伝送速度はケーブルより大幅に遅くなります。

それからはソフトウェアのこと。PC側はスマホから特定のマウント・ポイント下のデータをダウンロードするためにNetcatが必要です。もし進行状況を監視したいならPipe Viewerの準備も必要です。PCのシステムはUnix系ならいいですが、Windowsシステムの場合はLinuxのコマンドライン環境(CygwinやMSYS2など)を用意しなければなりません。スマホ側はPC側のダウンロード用のポートを提供するために、同じくNetcatでポートを開くことが必須です。なお、スマホ内部の/dataマウント・ポイントを確認のため、予めmount命令によって実際のディレクトリーを判明しなければなりません。考えなくて他のチュートリアルの使っているディレクトリーを直接に使うのはいけません。

次ぎ、スマホで上記の操作を実行するのは簡単ではありません。一つ目は権限、Androidは事前ROOT化しなければならない。二つ目はLinuxツール、Busyboxインストール済みのはスマホでNetcatを利用する前提です。三つ目は操作の手段、一つはPCでADBをインストールしてAndroidシェルにログインした後にコマンドを送信すること、もう一つはスマホでターミナルアプリを利用すること。

こう見ると、他のチュートリアルにたくさんの項目があることの原因はひと目見ただけでよく分かります。

ステップ

ツールの準備

  1. AndroidをROOT化すること。
  2. Busyboxをインストールすること。
  3. PCでコマンドライン環境を用意すること。
  4. ADBツールをダウンロードすること(現在、ADBの独立インストーラーがリリースされました,Android Studio全体をダウンロードしなくてもいい)。
  5. adb.exeAdbWinApi.dllAdbWinUsbApi.dllPATHに移動すること。
  6. nc.exepv.exeをダウンロードすること。

コマンドライン

一つ目

1
2
$ adb kill-server
$ adb devices

これにより、ADBサービスがリセットされ、既存の他のADBプロセスからの干渉が防止されます。

二つ目

1
2
3
4
5
$ adb shell
(Androidシェルにログインしたまま)
$ mount
$ su
$ busybox nc -l -s 127.0.0.1 -p <your port number> -e dd if=<data mount path>

/dataマウント・ポイントのパスを判明するために意識してmountを呼び出し、そのパスを次のコマンドで使うことに注意してください。
ちなみに、Netcatを使用する時にIPを指定する必要があるかどうかは状況次第です。時にIPを指定しないとtcp6ポートが開けてしまう状況になれます。その場合はもう一つコマンドプロンプトを起動し、Androidシェルにログインして下記の命令を呼び出してください。もしポートは本当にtcp6のものならば、後で-s 127.0.0.1を使ってtcpのポートを開くことを保証してください。

1
$ netstat lnt

三つ目
もう一つコマンドプロンプトを起動して下記の命令を呼び出します。

1
2
adb forward tcp:<your port number> tcp:<your port number>
nc 127.0.0.1 <your port number> | pv -i 0.5 > datablock.raw

ここはまずADBのforward機能を利用して、PCからAndroidへのポートマッピングを確立します。次にNetcatによってデータをダウンロードします、ファイル名はdatablock.rawです。

データ分析と復元

スマホから抽出された生データがありましたら、PC上のより専門的なデータ復元ソフトを利用することができます(例えばR-StudioやEasy Recoveryなど)。