@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

マルチユーザーのAVDを作成する

手元の Android 端末(Xperia Z Ultra)は、マルチユーザーに対応していませんので、マルチユーザー環境で adb backup がどの様に動作するかテストできません。

その為、SDK の Android Virtual Devie(AVD)を使い、エミュレータ上にマルチユーザー環境を作成してテストしてみたいと思います。

Android Virtual Device(AVD) Manager を起動し、AVD の作成メニュー上で Device は Tablet を指定しておきます。手元では 10.1"WXGA(Tablet)(1280x800:mdpi) を選択しました。マルチユーザーはタブレット用のもので、一定のサイズ以上でないと使えないようですが、テスト目的ですので素直に Tablet と書いてある項目を選択しています。

作成した AVD を起動し(言語は日本語へ変更)設定 の項目を確認してみると、肝心の「ユーザー」の項目が見当たりません。

少し検索してみると、どうやらデフォルトではユーザー数が 1 に設定されているようで、設定を変更してあげる必要があるようです。

Android:エミュレータでマルチユーザ機能を確認する
http://yuki312.blogspot.jp/2013/02/android.html

上記の内容を参考に、adb shell から下記のコマンドを実行したところ、設定⇒ユーザーが選択できるようになりました。(下記では 4ユーザーを指定しています)

root@generic:/ # setprop fw.max_users 4
setprop fw.max_users 4

後はユーザーを追加すれば、ホーム画面上で Owner 以外のユーザーが選択できるようになります。

エミュレータ上の端末ですので、adb shell から root 権限でアクセスできますので、フォルダ構造の確認などは容易です。マルチユーザーのフォルダ構造については下記URLがとても参考になります。

マルチユーザ対応 Android 4.2以降の内部ストレージと外部ストレージ (4.4対応を追記)

http://techbooster.org/android/application/16004/

 エミュレータには Google Play がありませんので、adb install コマンドで APK ファイルを指定してインストールする事になります。

例えば LINE の APK を adb install コマンドを使いインストールすると、両方のアカウントから LINE アプリケーションが見える状況になります。(個別のユーザーに対してだけ adb install でアプリケーションのインストールを実行するという事はできないようです)

 

Android_ID の確認と LINE のリストア

adb backup でバックアップしたアプリケーション(例えば LINE)のデータを、adb restore で(エミュレータ上の仮想Androidへ)リストアすると、アプリケーションがエラーで起動しなくなります。

この点について、Android_ID が異なる影響を受けるといった情報もありますので、Android_ID について検索した内容をメモしておきたいと思います。

[Android]端末識別子Android_IDを変更する[要ROOT]
http://uchidak.net/change_android_id

上記URLの内容によりますと、data/data/com.android.providers.settings/databases/settings.db ファイル内に Android_ID が定義されているということです。

このファイルへのアクセスには root 権限が必要になるという事で、例えば adb backup -system コマンドでバックアップを作成してたとしても apps\com.android.providers.settings フォルダ配下に settings.db は含まれていません。

エミュレータ上のAndroidのsettings.db を確認してみたところ、secureテーブル内にandroid_id の項目があり、以下のような値が入っている事が確認できました。

"25","android_id","b80a6ca83c6effe6"

これを別の値に切り替えてみました。エミュレータ上のAndroidですので、以下のコマンドで変更されたandroid_id を確認できます。(値は適当です)

root@generic:/ # settings get secure android_id
settings get secure android_id
5cb098378611129e

contentコマンドを使い adb shell content query --uri content://settings/secure でも確認することができますね。(いずれのコマンドも、root権限がなくても実機で同様にandroid_idを確認できます)

Google Playには実機上でこの値を表示してくれるアプリケーションもあるようですね。

 ANDROID_ID

http://developer.android.com/reference/android/provider/Settings.Secure.html#ANDROID_ID

 

 さて、android_id を実機と同じに設定した状態(かつ、ネットワークは切断した状態)で、adb backup で作成した LINE のアプリケーションバックアップを、adb restore コマンドからリストアしてみたところ、LINE アプリケーションがクラッシュせずに起動する事ができました。

とはいえ、エミュレータ上の Android にはスタンプのデータなどが無いようで、トークのメッセージは読めますが、スタンプや画像は×マークのアイコン表示となり確認する事はできませんね。

追加で、LINE アプリケーションの機能を使って作成したトーク履歴のバックアップをエミュレータ上の Android にリストアしたところ、バックアップデータ内に含まれていた画像と、恐らく有料ではないスタンプはリストアされ表示できていました。

ここまでのテストで、バックアップデータを実機ではない環境で読むことが可能なことは分かりましたが、実機で読める場合にはもちろんその方が簡単ですね。

 

第4回 Androidにおけるセキュリティ設計と動作(後編)
http://thinkit.co.jp/story/2012/03/09/3467/page/0/2

 

Android で LINE のバックアップをリストアする

adb backup を使えばアプリケーションのバックアップを取ることができ、バックアップしたデータは adb restore コマンドを使うことでリストアできます。

通常はバックアップを取得した実機へバックアップデータをリストアする事になりますが、いま使っている実機環境はそのままにしておき、別の Android 端末へリストアできれば便利ではないでしょうか?

Android SDK には Android Virtul Devicesという機能で仮想的な Android デバイスを作成し、エミュレータとして使う事ができます。この仮想 Android マシンにバックアップデータをリストアできれば、実機はそのままで、別環境上でバックアップデータの内容を読むことができるかもしれないと考えたわけですが、結論から言えばそうは問屋が卸さないという状況です。

adb backup コマンドで一括作成したバックアップファイルは android backup extractor に添付されている adb-split.sh スクリプトを使うことでパッケージ単位に分割できます。

例えば LINE であれば、jp.naver.line.android.ab というファイルに分割してくれますので、このバックアップファイルだけをエミュレータにリストアすれば良いという事になります。

しかし、実際にリストアしてみたところ、LINEの起動段階でエラーになってしまいアプリケーションを起動する事ができません。LINE の APK ファイルを adb install でインストールし、LINE アプリケーションがエミュレータ上で起動する事は確認できるのですが、adb backup で作成したバックアップをリストアするとエラーにより起動できなくなるのです。

少し調べてみたところ、どうやら Android ID という機器に固有の番号?による認証が入っているようで、その情報が一致しないことでアプリケーションがエラーになるようです。

【要root】LINEを丸ごとリストアする方法
http://reindex.hotcom-web.com/archives/252

Titanium BackupでAndroid IDだけを復元する方法
http://androidpeenats.blogspot.jp/2013/05/titanium-backupandroid-id.html

 理論的には、Android ID をバックアップし、それをエミュレータの Andorid へリストすればいけそうに思えますが、そもそも実機側で Android ID をバックアップする必要があります。

Android ID を root なしでバックアップできるのか?という点が未確認ですので、もし root なしでバックアップが可能であり、かつエミュレータにリストアできれば少し進展させる事ができるかもしれませんね。

 

Android で LINE のバックアップを作成する(2)

LINE の標準機能によるトークのバックアップですが、[すべてバックアップ]を使ってバックアップを取ってみたいと思います。

バックアップの選択で[すべてバックアップ]を選択した場合、画面上に以下のようなメッセージが表示されます。

トーク履歴ファイルが”/LINE_Backup/LINE_Android-backup-chat-93391111516.zip”にバックアップされました。メールに送信しますか?

この時にメール送信を選択すると更に下記の注意メッセージが表示されます。

トーク履歴をLINE専用ファイル形式でメール送信します。音声・動画メッセージの一部は再生できない可能性があります。

ここで確認をタップすると、取り扱うアプリケーションの選択画面になりますので、例えば GMAIL などを選択すれば ZIP ファイルを添付ファイルとして送信する事ができます。

さて、手元の Android は 4.4.2 なのですが、バックアップを実行したのち PC に接続して内蔵ストレージにある LINE_Backup フォルダを表示しても肝心のバックアップファイルが見当たりません。

これも Android 4.4 からの制限に引っかかっているものか、アプリケーション側の問題なのかは切り分けできませんが、少なくとも手元ではメール送信などで外部へ送らないとバックアップが出来ないようです。

見えてない可能性を考え、adb backup を -shared オプション付きでバックアップしたところ、adb backup で取得したバックアップファイルのLINE_Backup フォルダ配下には ZIP ファイルが存在していました。

念のため adb shell コマンドで確認してみたところ以下の状況でした。

shell@C6833:/sdcard/LINE_Backup $ ls -l
ls -l
-rw-rw---- root sdcard_r 87804 2014-07-17 12:41 LINE_Android-backup-chat-93391111516.zip

ファイルは存在しているが、MTPモードでのアクセスでは見えないという状況ですのでパーミッションによるものでしょうか?、もしくは手元のOS環境での問題かもしれませんが。

検索してみたところ、デバイスを再起動すると見えるようになるという情報がありましたので、試しにデバイスを再起動してから Windows に接続したところ ZIP ファイルを見ることができました。

Issue 38282: Android MTP support does not show recent files until the device is rebooted
https://code.google.com/p/android/issues/detail?id=38282

また、Facebook のほうで知ったのですが、com.android.providers.media/databases/external.db でファイル情報が管理されていて、この更新が追いついてないと?、不整合が発生するらしいです。

 

 バックアップしたZIPファイルは、LINE 独自の形式で読めないという事のようですが、image フォルダに作成される 47.thumb といったファイルは、中身としては JPEG ヘッダになってますので、拡張子を JPG に変更すれば普通に表示できるようですね。

チャットメッセージのほうはファイル形式が不明ですので、リストアしないと読むのは難しそうです。

 また、バックアップを作成したアカウントでなければリストアする事ができないようですので、その点でも注意が必要でしょうか。

トーク履歴をバックアップ(保存)するには?
http://help.line.me/line/android/categoryId/10000336/pc?lang=ja

[トーク履歴]を消しちゃった!復元できる?相手側も自分とのトーク消える?
http://linenavi.net/use/why_6/

機種変・トラブル対策に!LINEのトーク履歴をバックアップ&復元する方法(Q&A付き)
http://did2memo.net/2013/02/14/naver-line-talk-backup-and-restore/

 

Android で LINE のバックアップを作成する(1)

adb backup でアプリケーションのバックアップを取るのではなく、アプリケーションが個別に持っているバックアップ機能によりバックアップを取ることも出来ます。

例えば LINE であれば、指定したトークルームのメッセージをバックアップする事が出来ます。

トーク履歴をバックアップ(保存)するには?
http://help.line.me/line/android/categoryId/10000336/pc?lang=ja

各トークルーム毎にバックアップを指示する必要がある点がやや面倒ですが、バックアップの種類としては以下の二種類がある事が上記HELPで解説されています。

※[すべてバックアップ]を行うとトークルームでトーク履歴を復元することができます。
※[テキストでバックアップ]を行った場合、画像は保存・復元されません。

普通に考えると、リストア可能な[すべてバックアップ]を選択する事になると思います。

実際に Android 端末上で操作を行うと、バックアップの選択肢として上記 2つのメニューが表示されます。テキストでバックアップが上に表示されていますので先にテキストでバックアップを試してみます。

[テキストでバックアップ]を開始すると、処理が実行され完了するとアプリケーションの選択画面が表示されます。例えば GMAIL を選択すると、トーク内容のテキストファイルをメールに添付して指定アドレス宛に送ることができます。(ちなみにテキストファイルの文字コードは UTF-8 ですが、文字によっては󾭛になるケースもあるようですね)

手元のAndroid 4.4 ではアプリケーションの選択肢として、 SD カードへ保存する項目の表示がありませんでした。この部分は Android のバージョンに依存する項目かもしれません。Android 4.4 からは SD カードへの書き込みが制限されてますので、それ以前のバージョンでは SD カードの項目が表示されたりするかもしれませんが、未確認です。

テキストでバックアップを選択した場合、バックアップされるトークメッセージのテキストは下記のような形になります。(遡れる範囲は端末上に残っているデータに依存)

2014/06/07(土)
18:02 hoge いま新宿これから帰るよー
18:02 fuga [スタンプ]
18:03 fuga [画像]
18:03 hoge お疲れちゃん

スタンプや画像は文字列だけになりますので、実際にどのようなスタンプや画像だったのかはこれでは分からなくなりますね。

Android端末を MTP モードで PC に接続し、内蔵ストレージに自動的に作成されている「LINE_Backup」フォルダを確認してみましたが、テキストでバックアップを行ってもこのフォルダ配下にはデータは残らない状況です。

このため、テキストでバックアップを実行し、作成したテキストデータをどのアプリケーションに行わせるかの選択画面でキャンセルしてしまうとバックアップは何も残ってない状況になりますね。

 

adb backup で Android 端末のバックアップを作成する(14)

adb backup では個別のファイルを指定してバックアップを取ることはできません。adb コマンドには pull コマンドがありますので、個別ファイルは adb pull コマンドを使うことで取得できます。

しかし、コマンドラインから対象ファイルのフルパスを指定する必要があり、あまり使い勝手が良いとは言えない印象が個人的にはあります。*1

 

エクスプローラのような GUI ベースでファイルを閲覧してファイルをコピーできると便利だと思いその様なツールを探してみたところ、これが意外に厄介である事に気が付きました。

まず、SDK のToolsフォルダにある DDMS を呼び出し、File explorer を使う方法があるかと思います。File Exploere を使うと GUI ベースでツリー構造を表示してくれます。アクセス権が無いフォルダ配下にあるファイルは表示されません。Root 権限が無い状況では、かなり限定された範囲でのみアクセス可能です。

DDMS の File Exploere には、ファイルのコピー機能があり、フォルダを指定すれば一括してそのフォルダ配下にあるファイルをWindows 上の指定フォルダ配下にコピーする事が可能です。ただし、問題が一つあり日本語文字列を含むファイル名が対象フォルダ配下に存在すると、そのファイルのコピー時点でコピー処理が中断・終了されてしまいます。

対象フォルダ配下に日本語を含むファイルがなければ、フォルダ構造を維持してコピーする事ができるので便利ですが、途中で終了したのか、正常に全てコピーが終わって終了したのかを判断することが確認できません。(コピー途中に日本語ファイル名があると、そこでコピー操作が終了し特にエラーなどは表示されません)

これは、日本語文字列を含むファイルを個別に指定してコピーを取ろうとした場合にも発生するので、気になる方は簡単に試せるかと思います。コピー先として指定したフォルダに何もファイルが出来ないはずです。

 

また、Facebook のタイムラインで知ったのですが、Windows 上で adb pull コマンドを使い日本語文字列を含むファイルをコピーしようとした場合、ファイル名部分が文字化けするようですね。

Android では UTF-8 でファイル名が管理されているようですが、Windows 側のコンソールを CHCP コマンドで UTF-8(65001)に切り替え、日本語を含むファイル名を正しく表示できたとしても、出力先のファイルシステム側は UTF-16LE ですので、文字コードが一致せずに化けることになるようです。

Googleで少し検索してみたところ、ドイツ語でもウムラウトを含む文字列では問題になるようで似たような話題が出ていました。残念ながらこの部分については解決策を発見する事ができず、UTF-8 でそのまま扱える環境で操作した方が簡単そうです。(adb backup の対象範囲であれば adb backup した方が早い気もしますが)

 

さて、他に GUI ベースで adb コマンドを操作できるツールがないかGoogleで検索してみたところ、QtADB というツールを発見し早速使ってみました、結果としては、残念ながら手元では肝心のファイルリストを表示することが出来ませんでした。

QtADB
http://qtadb.wordpress.com/

今のところ発見できていませんが、文字コードを意識して UTF-8 のファイル名を適切に Windows 上で扱ってくれるツールがあれば、ファイル名が化けずにコピーできるようになるので嬉しいですね。

 

*1:Windowsにデバイスを接続し MTP 経由でアクセス可能なファイルであれば問題ありませんが、それ以外でアクセス可能な範囲にあるファイルの場合には pull コマンドを使う事になりますね。

adb backup で Android 端末のバックアップを作成する(13)

Androidデバイスの内蔵ストレージとSDカードのデータをバックするのに、adb backup -shared オプションを使わずとも、PC に USB ケーブルで MTP(Media Transfer Protocol) モードで接続すれば Windows 上のエクスプローラから簡単にアクセスすることができます。

USBデバイスの接続モードには幾つか種類がありますが、Mass Storage Class で接続すると内蔵ストレージにはアクセスできません。SDカードについて論理ドライブが割り当てられてアクセスできます。

Wikiの記述によると、Android は API Level 12 から MTP がサポートされているようで、手元の 4.4.2 でも(もちろん)MTP での接続が可能です。*1

 

MTPモードで接続した場合、エクスプローラからはアクセス可能になりますが、論理ドライブを割り当てて robocopy などコマンドプロンプト経由でコピーするというのは難しそうです。少し検索してみたところでは、MTPモードで接続したデバイスを論理ドライブにマッピングする方法は発見できませんでした。 

下記 SANS の資料によると、MTP デバイス上のファイルを直接開いた場合、Windows 7 では Temp フォルダ配下に  WPDNSE フォルダが作成され、そこにファイルが一時的に置かれるようですが、手元の Windows 8.1 ではこの資料のような動作になっていませんでした。

USB Devices and Media Transfer Protocol

https://digital-forensics.sans.org/summit-archives/dfir14/USB_Devices_and_Media_Transfer_Protocol_Nicole_Ibrahim.pdf

 例えば PDF を開いた場合には下記フォルダに一時的なファイルが作成されていました。

C:\Users\port139\AppData\Local\Microsoft\Windows\INetCache\IE\PLO0Q839\1401.6444v1[1].pdf

いずれにしても、バックアップを取るという目的の場合には、直接ファイルを開くのではなく、ローカルへコピーを取ってから操作を行う事になるかとは思います。

エクスプローラ経由でファイルをコピーした場合、作成日時はコピーした日時になりますが、ファイルの最終更新日時は元ファイルの日付が維持されてコピーされます。(秒レベルまでの精度で、仮にそれ以下の精度のタイムスタンプ値がコピー元ファイルシステム側にはあったとしても、取ってこないと思いますが)

 

*1:デバイス側でUSBデバッグモードは事前に切っておく必要があります。

adb backup で Android 端末のバックアップを作成する(12)

Content Provider 経由でアクセス可能な標準的なデータのバックアップを取る方法として、アプリケーションをインストールし、アプリケーション経由でデータをコピーする方法も案としてはあります。

HOWTO: Use AFLogical OSE for Logical Forensics of an Android Device
https://santoku-linux.com/howto/howto-use-aflogical-ose-logical-forensics-android

Santoku Linux に含まれている AFLogical OSE は、個別にも APK 形式で提供されているもので、対象デバイスにインストールして使う事が出来、MMS, SMS, Contacts, Call Logs をコピーする事ができます。とはいえ、最終更新が 2011年12月のアプリケーションですので、4.4.2 環境でどこまで使えるのか?という懸念点もありますので、試してみたいと思います。(SDカードへの出力で制限されないの?という素朴な疑問)

AFLogical-OSE_1.5.2.zip — Build v1.5.2 of AFLogical Open Source Edition
https://github.com/viaforensics/android-forensics/downloads

ZIPファイルをダウンロードし、展開すると APK ファイルを確認できます。

adb install コマンドを使ってアプリケーションをインストールします。

>adb install AFLogical-OSE_1.5.2.apk
1974 KB/s (28794 bytes in 0.014s)
pkg: /data/local/tmp/AFLogical-OSE_1.5.2.apk
Success

提供元不明のアプリ、の設定はチェックしていませんがインストールはそのまま可能でした。

アプリケーションの一覧に AFlogical OSE のアイコンが出来ていますので、これをタップして実行します、コピー対象の項目一覧が出ます。デフォルトでCallLog Calls、Contacts Phones、MMS、MMSParts、SMSがチェックされた状態です。

Capture を実行すれば開始され、「Data extraction completed」という表示が出て完了とかなりシンプルな作りです。

データは /sdcard/forensics/フォルダ配下に日時でフォルダが作成され、ファイルが出力されます。

-rw-rw---- root sdcard_r 230 2014-07-10 09:21 CallLog Calls.csv
-rw-rw---- root sdcard_r 338 2014-07-10 09:21 Contacts Phones.csv
-rw-rw---- root sdcard_r 247 2014-07-10 09:21 MMS.csv
-rw-rw---- root sdcard_r 62 2014-07-10 09:21 MMSParts.csv
-rw-rw---- root sdcard_r 758 2014-07-10 09:21 SMS.csv
-rw-rw---- root sdcard_r 255082 2014-07-10 09:21 info.xml

手元の Xperia Ultra Z ではこの forensics フォルダは SD カードではなく、内蔵ストレージに作られていましたので、この辺りは注意が必要なのかもしれません。

 設計の古さによるものかとは思いますが、取得できるデータ範囲もかなり限定的ですので、adb shell content コマンド経由でアクセスする方がよさそうですね。

 

 

adb backup で Android 端末のバックアップを作成する(11)

adb backup で取れないデータについても、Content Provider 経由でデータをバックアップする事ができる場合があります。

Facebook のほうで知ったのですが、adb shell conetnt コマンドというものがあり、このコマンド経由でアクセスする事が出来るようです。

Android:contentコマンドでContentProviderを呼び出す

http://yuki312.blogspot.jp/2013/02/androidcontentcontentproviderdb.html

adb shell content コマンドを使うには、対象としている ContentURI を指定する必要があります。

Content URIs
http://developer.android.com/guide/topics/providers/content-provider-basics.html#ContentURIs

上記のWeb では例として content://user_dictionary/words が書かれていますが、この場合 Words の部分がテーブルになります。対象に複数のテーブルがあるようなケースでは、それぞれ毎に URI が決まってくるという仕組みのようです。

例えば、カレンダーのeventsテーブルに対するクエリは以下の構文になります。

adb shell content query --uri content://com.android.calendar/events

adb backup で取得しているSQLite のデータベースファイルを確認してみると、events テーブルの内容が読み込まれている事が分かります。カレンダーは adb backup 経由でバックアップされ、apps\com.android.providers.calendar\db 配下にファイルがあるのでこの方法を取る必要はないと思いますが、動きを確認するには便利なデータだと思います。上記の URI では com.android.calendar ですが、DB 自体のパスは com.android.providers.calendar と異なる点も興味深いところです。

他にもカレンダー関連のテーブルは複数ありますが、下記もクエリを実行することが出来ます。

adb shell content query --uri content://com.android.calendar/attendees
adb shell content query --uri content://com.android.calendar/calendar_alerts
adb shell content query --uri content://com.android.calendar/event_entities
adb shell content query --uri content://com.android.calendar/reminders

どの様なコンテントプロバイダーがあるか、使えそうかを判断するのに、下記のアプリケーションを使うと便利です。検索機能もあります。

Content Provider Helper
https://play.google.com/store/apps/details?id=com.jensdriller.contentproviderhelper&hl=ja

デフォルトで提供されている URI についても同じく Content Provider Helper のプロジェクトページに記載があります。 

Content Provider Helper
https://github.com/jenzz/ContentProviderHelper
The following content providers are provided by default:

content://browser/bookmarks
content://browser/searches
content://call_log/calls
content://com.android.calendar/attendees
content://com.android.calendar/calendar_alerts
content://com.android.calendar/calendars
content://com.android.calendar/event_entities
content://com.android.calendar/events
content://com.android.calendar/reminders
content://com.android.contacts/aggregation_exceptions
content://com.android.contacts/contacts
content://com.android.contacts/data
content://com.android.contacts/groups
content://com.android.contacts/raw_contact_entities
content://com.android.contacts/raw_contacts
content://com.android.contacts/settings
content://com.android.contacts/status_updates
content://com.android.contacts/syncstate
content://drm/audio
content://drm/images
content://icc/adn
content://icc/fdn
content://icc/sdn
content://media/external/audio/albums
content://media/external/audio/artists
content://media/external/audio/genres
content://media/external/audio/media
content://media/external/audio/playlists
content://media/external/images/media
content://media/external/images/thumbnails
content://media/external/video/media
content://media/external/video/thumbnails
content://media/internal/audio/albums
content://media/internal/audio/artists
content://media/internal/audio/genres
content://media/internal/audio/media
content://media/internal/audio/playlists
content://media/internal/images/media
content://media/internal/images/thumbnails
content://media/internal/video/media
content://media/internal/video/thumbnails
content://mms
content://mms/inbox
content://mms/outbox
content://mms/part
content://mms/sent
content://mms-sms/conversations
content://mms-sms/draft
content://mms-sms/locked
content://mms-sms/search
content://settings/secure
content://settings/system
content://sms/conversations
content://sms/draft
content://sms/inbox
content://sms/outbox
content://sms/sent
content://telephony/carriers
content://user_dictionary/words

これら以外に、アプリケーションが独自に持っているものは個別に調べていく必要がありますが、指定してもエラーになる事が多いので、実際に対象アプリケーションからデータを取り出してバックアップできるかはアプリケーション次第でしょうか。 

 

Get a list of available Content Providers
http://stackoverflow.com/questions/2001590/get-a-list-of-available-content-providers

 

 

adb backup で Android 端末のバックアップを作成する(10)

adb backup コマンドによるバックアップでは、root を取得しているわけではありませんので、バックアップされていないデータも存在するようです。基本的な部分として、SMSやカレンダー、コンタクトが含まれてこないと下記では注記があります。

Full Backup of non-rooted devices
http://android.stackexchange.com/questions/28296/full-backup-of-non-rooted-devices
NOTE: This solution will not back up and restore contact, SMS or calendar information

 試しに、adb backup -apk -system -all でバックアップを作成し、その内容を確認してみたいと思います。

まず、SMS ですが、デバイス内では下記に SMS の DB ファイルがあります。

/data/data/com.android.providers.telephony/databases/mmssms.db

バックアップファイルを tar に変換・展開して確認してみたところ、バックアップ内にcom.android.providers.telephonyフォルダがあり、DBファイルも確認できました。SQLite Manager で DB を開いて確認した範囲ではメッセージも確認できましたので、4.4.2 の段階では取れているように見えますね。(Kitkatからデフォルトのパスが変更になったようですね)*1

 

次に Calendar を確認してみます。バックアップの tar ファイルを展開して確認してみたところ、apps\com.android.providers.calendar\db フォルダ配下に DB ファイルがありました。こちらもDBファイルの内容を確認したところEventsテーブルで内容を確認する事ができました。

 

最後に連絡先(Contacts)ですが、これはバックアップ内には無いようです。パッケージのパスを確認したところ、 priv-app 配下ですのでバックアップ対象外になっていますね。

package:/system/priv-app/SemcContactsProvider.apk=com.android.providers.contacts