@port139 Blog

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

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

 

 

 

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

adb backup の -shared オプションですが、内蔵ストレージ、SDカード含めストレージのバックアップを取る事ができる点は便利なのですが、古いバージョンでは不具合があったり少し注意が必要なオプションです。

十分確認できていないのですが、Andrillerの作者がTwitterでAB経由でサイズの問題があったので修正したってコメントを書いてましたので、このあたりは使うツールによっても色々とあるのかもしれません。

また、Android 4 系では、SDカードへのアプリケーションのインストール自体が制限されているようですので、アプリケーションのバックアップという点だけで見た場合にはそれほど大きな意味はないかもしれません。

次に Android 4.4.x(KitKat)では、SDカードへのアプリケーションからの書き込みも制限という事のようですね。

KitKat端末では今後アプリからMicro SDカードへの書き込みができくなる模様
http://juggly.cn/archives/106598.html

Android 4.4でSDカードにファイルを書き込む
http://qiita.com/ariarijp/items/aa365ff47b6e572be3d4

試しに、手元の Android 4.4.2 で写真を撮り保存先としては内蔵ストレージを指定しておきます。次にSDカードへの移動またはコピーをしようとして写真を使って従来の共有のメニューから SD カードを指定する方法は取れないように見えます。

手元の Android は 4.4.2 ですので、標準でインストールされている File Commander を使った場合には、コピー&ペーストにより SD カード上のメディアにコピーする事ができました。

SDカードに写真データがある状態で、adb backup -shared -all コマンドを実行し、作成できた .ad ファイルを tar へ変換・展開して中身を確認してみます。

手元の Android は Xperia Ultra Z ですが、tar を展開すると shared フォルダ配下に 0 と 1 の二つのフォルダが作成されています。

フォルダ 0 が内蔵ストレージで、フォルダ 1 が SD カードという事になります。

保存しているデータ容量に依存しますが、例えば手元では(暗号化なしの状態)約 6GBのバックアップファイルが作成されました。

残念ながら手元の Experia Ultra Z ではマルチユーザーモードが使えない為、マルチユーザーモードでのストレージのバックアップがどうなるかは未確認です。

 

 

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

adb backup のオプションには -shared | -noshared があり、SDカード内データのバックアップを指定できます。

Android Backup Extractor の Readme.txt には下記記述があり、どうやら古いバージョン?のバックアップには問題があるようです。

Creating a backup with -shared flag has know issues (corruption)

具体的にどのバージョン段階でのお話か記述がないのですが、Googleで検索してみたところ下記のツールがありました。このツールではバージョン 4.0.4/4.0.4 では破損状況になる(データは大丈夫)という事のようですね。

rebuild-adb-backup
https://github.com/rmgrimm/rebuild-adb-backup

This program aims to rebuild ADB backup files that were corrupted by --shared on Android versions 4.0.3 / 4.0.4.

The corrupt ADB backup files are still fully usable and contain no data loss. Instead, the problem is that an uncompressed chunk of data is written to the file directly -- bypassing any encryption and all compression. Additionally, this happens before the encryption/compression are able to finish writing out the compressed data which causes decryption and inflation routines to fail.

 他にも Google で adb backup shared issues などで検索すると、4.2 段階でも既知の不具合があるといった情報があったりしますので、古いバージョンの 4 系を使っているケースでは、shared オプションの指定は避けた方が無難かもしれませんね。

もしくは、展開できるのを確認した上でオプションを付与するかですが。。。

 

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

adb backup のオプションで パッケージ名を指定する事で、個別アプリケーションのバックアップを行う事ができます。

デバイス内のアプリケーションを確認するには、adb shell pm list packages コマンドを使うことが出来ます。下記では -3オプションによりサードパーティのアプリケーションにリストを絞っています。

c:\adt-bundle-windows-x86_64-20140624\sdk\platform-tools>adb shell pm list packages -3
package:com.linkedin.android
package:com.sonymobile.comicpirate
package:com.akazoo.music
package:jp.co.netvision.WifiConnectWI2
package:com.qoowaa.act
package:com.sonyericsson.trackid
package:jp.co.yahoo.android.yjtop
package:com.sonyericsson.androidapp.recorder
package:com.apalon.calculator.gp
package:com.evernote
package:la.droid.qr
package:com.hulu.plus.jp
package:jp.naver.line.android
package:de.gavitec.semc
package:jp.co.yahoo.android.apps.transit
package:com.sonymobile.androidapp.diagnostics
package:com.pixlr.express
package:com.ntt.voip.android.com050plus
package:jp.radiko.Player
package:com.mobisystems.office
package:com.whatsapp
package:wni.WeathernewsTouch.jp
package:com.twitter.android
package:jp.ad.iij.couponswitch
package:com.box.android
package:Unyverse.sony
package:com.facebook.orca
package:com.sony.gsmguxmk.xperiaprivilege2012
package:com.sony.playmemories.mobile
package:com.sony.tvsideview.phone

バックアップしたいアプリケーションを確認した後、adb backup コマンドでパッケージを指定してバックアップします。(Protectedの場合には、この方法ではバックアップは取れませんが)

例えば以下のようにパッケージ名を指定して実行します。

c:\adt-bundle-windows-x86_64-20140624\sdk\platform-tools>adb backup -apk -obb jp.naver.line.android
Now unlock your device and confirm the backup operation.

作成されたバックアップファイルを android backup extractor で tar 形式データに変換・展開すると、該当パッケージのフォルダのみが出力されている事を確認できます。

 

android backup extractor にはバックアップファイルを分割する sh スクリプトも含まれています。adb-split.sh を使うことでバックアップファイルをパッケージ毎に分割して出力してくれます。(先にCygwin環境にstar.exeをコピーしておく必要があります)

adb backup -apk -obb -all

バックアップを作成して、スクリプトを実行してみますがstarコマンドでこけました。

$ sh adb-split.sh backup.ab
Extracting ab archive...
Strong AES encryption allowed
Magic: ANDROID BACKUP
Version: 1
Compressed: 1
Algorithm: none
747075584 bytes written to backup.ab.tar.
Done
Extracting tar archive...
Done
Checking for apps folder...
Done
Checking if apps folder is not empty...
Done
Generating list of contents for each app...
Done
Creating individual tar archives...
star compression failed at android. Aborting.

 手元ではCygwin64 を使っていたのですが、32bit 版に変更してから実行してみたところ、問題なくパッケージ毎に分割されたバックアップファイルが作成できました。

$ sh adb-split.sh backup.ab
Extracting ab archive...
Strong AES encryption allowed
Magic: ANDROID BACKUP
Version: 1
Compressed: 1
Algorithm: none
747075584 bytes written to backup.ab.tar.
Done
Extracting tar archive...
cygwin warning:
MS-DOS style path detected: /cygdrive/c/backup/apps/com.google.android.apps.plus/sp/mm_utils\0.xml
Preferred POSIX equivalent is: /cygdrive/c/backup/apps/com.google.android.apps.plus/sp/mm_utils/0.xml
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
Done
Checking for apps folder...
Done
Checking if apps folder is not empty...
Done
Generating list of contents for each app...
Done
Creating individual tar archives...
Done
Creating individual adb backups...
Done
Checking for apk existence...
Warning: apk not found in android
Warning: apk not found in com.android.apps.tag

Warning: apk not found in com.sonymobile.twitter.account
Warning: apk not found in com.svox.pico
Warning: apk not found in com.vmware.mvp.enabled
There are one or more apk missing. Generating apk-missing.html
Cleaning temporal files...
Done
Backup splitting complete.

 APKファイルが無いパッケージについては、apk-missing.html というファイルが生成されていますので、そちらで確認する事ができます。

 

雑談: 週末読書 7/20

今週は「シャーロック・ホームズの思考術」を図書館で借りてきて読んでいました。この本も残念ながらKindle版がないのですが、内容的にはブラックスワンと同じく何度も読み返し、よく考える必要がある本ですね。 

シャーロック・ホームズの思考術

シャーロック・ホームズの思考術

 

 内容としては、シャーロックホームズを題材に、脳における追認バイアスをどう扱うべきか、どう観察し考えるか?という点をかなり詳細に説明しています。最初は謎解きの説明かと思って読み始めたのですが、そうではなくむしろブラックスワンの内容に近いと感じますし、実際タレブ氏の名前も出てきます。

この本が面白いのは、追認バイアスを避けて考える為にはどうすればよいのか?といった点について色々と解説されている点でしょうか。ホームズを題材としてはいますが、脳が勝手に考える間違いにどう対抗すべきか?ということが主題のようにも思えます。

この書籍では「ワトスン・システム」と「ホームズ・システム」という二つの考え方について解説しており、章によっては練習問題?みたいなものが出てきます。

自分がやった練習問題はどれも間違えて「ワトスン・システム」による考え方になってしまいました。なかなかホームズのように考えることは出来ない、ということが良く分かります(笑)

シャーロック・ホームズの物語からの引用部分もかなりあり、ついついそちらのお話を再度読み直したくなります。この本を読み進めては正典を読んで楽しみ、再びこの本に戻るという読み方になってしまいましたが、久しぶりに読むシャーロック・ホームズはやはり面白いですね。

 この本で正典として参照している内容としては以下などがありますので、手元に置いておくとこの本は読み進めやすいと思います。個人的には新潮文庫のを揃えていますが、いまだと青空文庫ふくめ色々と種類がありますね。

緋色の研究 (新潮文庫)

緋色の研究 (新潮文庫)

 

   

四つの署名 (新潮文庫)

四つの署名 (新潮文庫)

 

  

バスカヴィル家の犬 (新潮文庫)

バスカヴィル家の犬 (新潮文庫)

 

  

シャーロック・ホームズ最後の挨拶 (新潮文庫)

シャーロック・ホームズ最後の挨拶 (新潮文庫)

 

  

シャーロック・ホームズの冒険 (新潮文庫)

シャーロック・ホームズの冒険 (新潮文庫)

 

  

シャーロック・ホームズの帰還 (新潮文庫)

シャーロック・ホームズの帰還 (新潮文庫)

 

  

恐怖の谷 (新潮文庫)

恐怖の谷 (新潮文庫)

 

 

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

adb backup で取得したバックアップデータ内にあるパッケージフォルダと、adb shell pm list packages で取得したリストを比較してみます。

手元の Xperia Ultra Z には幾つかのアプリケーションを追加でインストールしていますが、adb shell pm list packages では 308件が確認できました。

これに対して、adb backup コマンドで取得したデータを変換・展開してみたフォルダとしては 202件と、106件の差異がありました。

以下は、adb backup コマンドで取得したバックアップファイル内でパッケージのフォルダが確認できなかったサンプルリストになります。

android.res.overlay
com.android.backupconfirm
com.android.bluetooth
com.android.browser.res.overlay
com.android.certinstaller
com.android.defcontainer
com.android.exchange
com.android.inputdevices
com.android.internal.res.overlay
com.android.keychain
com.android.location.fused
com.android.packageinstaller
com.android.phone
com.android.printspooler
com.android.providers.contacts
com.android.providers.partnerbookmarks.res.overlay
com.android.settings
com.android.sharedstoragebackup
com.android.shell
com.android.stk
com.android.systemui
com.android.vpndialogs
com.box.android
com.dsi.ant.server
com.estrongs.android.pop
com.evernote
com.google.android.apps.books
com.google.android.apps.magazines
com.google.android.configupdater
com.google.android.gms
com.google.android.gsf
com.google.android.partnersetup
com.jensdriller.contentproviderhelper
com.kakao.talk
com.pixlr.express
com.qualcomm.location
com.qualcomm.wfd.service
com.sony.nfx.service.WirelessControllerManagerService
com.sonyericsson.advancedwidget.clock
com.sonyericsson.advancedwidget.music
com.sonyericsson.advancedwidget.onoff
com.sonyericsson.advancedwidget.photo
com.sonyericsson.advancedwidget.recentcalls
com.sonyericsson.advancedwidget.weather
com.sonyericsson.album.overlay
com.sonyericsson.android.bootinfo
com.sonyericsson.android.semcrilextension
com.sonyericsson.android.servicemenu
com.sonyericsson.android.wakeup
com.sonyericsson.capabilities.res.overlay
com.sonyericsson.crashmonitor
com.sonyericsson.credentialmanagerservice
com.sonyericsson.customizedsettings
com.sonyericsson.extras.liveware.product.res.overlay
com.sonyericsson.idd.agent
com.sonyericsson.initialbootsetup
com.sonyericsson.mtp.extension.factoryreset
com.sonyericsson.mtp.extension.update
com.sonyericsson.music
com.sonyericsson.music.product.overlay
com.sonyericsson.psm.sysmonservice
com.sonyericsson.r2r.client.res.overlay
com.sonyericsson.settings
com.sonyericsson.settings.wifi
com.sonyericsson.setupwizard
com.sonyericsson.setupwizard.res.overlay
com.sonyericsson.shutdownanim
com.sonyericsson.simcontacts.res.overlay
com.sonyericsson.soundenhancement
com.sonyericsson.startupflagservice
com.sonyericsson.textinput.uxp
com.sonyericsson.textinput.uxp.dictionaries
com.sonyericsson.trackid.res.overlay
com.sonyericsson.tvout.mhl
com.sonyericsson.unsupportedheadsetnotifier
com.sonyericsson.updatecenter
com.sonyericsson.usbotg
com.sonyericsson.uxp
com.sonyericsson.vendor.backuprestore
com.sonyericsson.xhs
com.sonymobile.advancedwidget.sonyselect
com.sonymobile.advancedwidget.topcontacts
com.sonymobile.anondata
com.sonymobile.aptx.notifier
com.sonymobile.cameracommon.permission
com.sonymobile.crashmonitor.system
com.sonymobile.drm.ui
com.sonymobile.enterprise.service
com.sonymobile.faceregistration
com.sonymobile.mirrorlink.system
com.sonymobile.moviecreator
com.sonymobile.phoneusage
com.sonymobile.playanywhere
com.sonymobile.premiumsmsupdate
com.sonymobile.remotefileaccess
com.sonymobile.remotestorage
com.sonymobile.runtimeskinning.core
com.sonymobile.settings.wifi.hotspot2
com.sonymobile.simlockunlockapp
com.sonymobile.smallapps.clipper
com.sonymobile.superstamina
com.sonymobile.tvout.wifidisplay
com.sonymobile.whitebalance
org.codeaurora.bluetooth
org.codeaurora.ims
org.simalliance.openmobileapi.service

 

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

ここまでの adb backup コマンドでは、-apk は指定していませんでした。今回は -apk を指定して実行してみます。

adb backup -apk -all

オプションとして apk を指定した場合、インストールされているアプリケーションの apk ファイルもバックアップ対象に含まれる事になりますが、注意点としてバックアップされないアプリケーションもあるということです。

Android Backup Extractor の Readme.txt には下記の記述があります。

- Some apps include a policy where the apk is never backed up even if specified.

 apkオプションを付与してadb backup を実行し、.ab ファイルを tar 形式に変換・展開すると、アプリケーション毎に a フォルダが作成され、そこに .apk ファイルが保存されている事が確認できます。

 デバイスにインストールされているアプリケーションは、adb shell から pm(パッケージマネージャ)コマンドを使うことで確認できます。

Using package manager (pm)

http://developer.android.com/tools/help/adb.html#shellcommands

 オプションとして -f を指定するとパスを含めて確認できます、サードパーティだけに絞る場合には -3 が使えます。

shell@C6833:/ $ pm list packages -f
pm list packages -f
package:/system/app/CameraExtensionPermission.apk=com.sonyericsson.cameraextension.permission
package:/system/priv-app/DefaultContainerService.apk=com.android.defcontainer
package:/system/priv-app/CameraCommon.apk=com.sonymobile.cameracommon
package:/system/app/OrangeTheme.apk=com.sonyericsson.orangetheme
package:/system/priv-app/SemcPhone.apk=com.android.phone
package:/system/app/Initial-boot-setup.apk=com.sonyericsson.initialbootsetup
package:/system/priv-app/filecommander.apk=com.mobisystems.fileman
package:/system/app/UnsupportedHeadsetNotifier.apk=com.sonyericsson.unsupportedheadsetnotifier
package:/system/priv-app/PMSservice.apk=com.sonyericsson.providers.protectedmedia
package:/system/priv-app/SEMCFacebookProxy.apk=com.sonyericsson.facebook.proxylogin
package:/data/app/com.linkedin.android-1.apk=com.linkedin.android
package:/system/app/Bluetooth.apk=com.android.bluetooth
package:/system/priv-app/CalendarProvider.apk=com.android.providers.calendar
package:/system/app/SmallAppsLauncher.apk=com.sony.smallapp.launcher

ここで、パスに /priv-app/ が含まれている場合には保護されているのでバックアップ対象になってきません。

残念ながら手元の Android には有料アプリケーション入れていませんので、/data/priv-app/ になっているものがないので実物確認できていませんが。。。

 

KakaoTalk のように package:/data/app/com.kakao.talk-1.apk=com.kakao.talk となっていて、/priv-app で ない 場合でもバックアップ対象に含まれないものがあるそうで、これは別の制御によるもののようですね。

大徳さんから教えていただいた情報によると、AndroidManifest.xml ファイルにて android:allowBackup="false" が設定されている影響ではないか?ということでしたので、実際に確認してみたところそうなっていました。

APK のみをバックアップ対象外にするのか、アプリケーション全体でバックアップの対象外にするのかを細かく制御できるのか理解できていませんが、パッケージリストと比較して取れてパッケージを確認ですかね。

 

adb backup のオプションで -apk を指定すれば APK ファイルのバックアップが可能ですが、アプリケーションが拡張ファイルを持っている場合には、-obb オプションを指定する事でバックアップが可能になります。

(-obb|-noobb enable/disable backup of any installed apk expansion (aka .obb) files  associated with each application; the default is noobb.)

 

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

adb backup コマンドでバックアップを取る際、端末側の確認画面でパスワードを指定する事により、バックアップファイルを暗号化する事ができます。

Android Backup Extractor に添付されている Reame.txt には以下の記載があります。

- Android debugging bridge is very slow: about 1 MBps if the backup is password encrypted, 1.6 MBps if not, so consider that backing and restoring may take a long time.

バックアップにパスワードを設定した場合、かなりバックアップ速度が遅くなり、おおよそ 1MBps という事ですので対象サイズによってはかなり待つ事になります。60MB/分、3,600MB/時間 だとすると、35GB のデータがあると、暗号化した場合には 10時間程度かかるという事でしょうかね。

 

暗号化されたバックアップファイルを、Android Backup Extractor  に追加モジュールなしで tar ファイルに変換しようとした場合、以下のようにエラーになります。

c:\backup>java -jar abe.jar unpack backup.ab backup.tar 139
Strong AES encryption not allowed
Magic: ANDROID BACKUP
Version: 1
Compressed: 1
Algorithm: AES-256
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)
Caused by: java.lang.RuntimeException: java.security.InvalidKeyException: Illega
l key size
at org.nick.abe.AndroidBackup.extractAsTar(AndroidBackup.java:350)
at org.nick.abe.Main.main(Main.java:64)
... 5 more
Caused by: java.security.InvalidKeyException: Illegal key size
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1024)
at javax.crypto.Cipher.implInit(Cipher.java:790)
at javax.crypto.Cipher.chooseProvider(Cipher.java:849)
at javax.crypto.Cipher.init(Cipher.java:1348)
at javax.crypto.Cipher.init(Cipher.java:1282)
at org.nick.abe.AndroidBackup.extractAsTar(AndroidBackup.java:264)
... 6 more

Readme.txt に記載がありますが、AES 256bit 暗号に対応したバックアップファイルを展開するには、Java の環境に追加のパッケージが必要になります。(輸出規制の関係ですね)

ポリシーファイルを適用(Javaの対象フォルダにコピー)すると、暗号化されたバックアップファイルを tar ファイルに変換できるようになります。

c:\backup>java -jar abe.jar unpack backup.ab backup.tar 139
Strong AES encryption allowed
Magic: ANDROID BACKUP
Version: 1
Compressed: 1
Algorithm: AES-256
IV: 12DBE921F10A0F2AD12D3086BCDFE35D
MK: 2EFB0CC5EE17B49B3F418A8C442261119E1327A1AD9578F8EBC627F611CBF548
MK checksum: 6286D0A09C6BF549F1129255BACA9CBE7E28C956074AB79ED1DFCBB359CBA08D
key bytes: 2EFB0CC5EE17B49B3F418A8C442261119E1327A1AD9578F8EBC627F611CBF548
salt bytes: C6F298CBA06A053DE9D0C5162CFC0FBE6AC4ADEC380692DF0EBA4E0B18CC1047D708
09413232A244463496A60DC9230B3FCD27F74A0A61CBB439E7336ACFC321
MK as string: [.????ロ?AハフD"a゙'??ユx???'???H]
Key format: RAW
Calculated MK checksum (use UTF-8: false): 2D8040C3E91E8823FC72F813FC68FB2AEBCBD
E42ACDC80361836373730D52743
Checksum does not match.
key bytes: 2EFB0CC5EE17B49B3F418A8C442261119E1327A1AD9578F8EBC627F611CBF548
salt bytes: C6F298CBA06A053DE9D0C5162CFC0FBE6AC4ADEC380692DF0EBA4E0B18CC1047D708
09413232A244463496A60DC9230B3FCD27F74A0A61CBB439E7336ACFC321
MK as string: [.????ロ?AハフD"a゙'??ユx???'???H]
Key format: RAW
Calculated MK checksum (use UTF-8: false): 6286D0A09C6BF549F1129255BACA9CBE7E28C
956074AB79ED1DFCBB359CBA08D
234758656 bytes written to backup.tar.

暗号化した場合と、暗号化しなかった場合での差異についてですが、手元で連続して取得したデータを WinMargeで比較した範囲では、ファイルやフォルダの差異は発生していないように見えます。

デフォルトのオプション以外を指定して実行した場合に、取得範囲に差異が出るかは未確認です。

 

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

adb backup コマンドを使いバックアップファイルを作成しましたが、このバックアップファイルの内容を展開・確認するには環境の準備が必要になります。

①Java 環境、②Cygwin環境 を手元の Windows 環境で設定しておく必要がありますので、それぞれ配布元のページからインストールしておきます。

Javaはインストール後に環境変数PATHに Java をインストールしたパスを設定しておきます。

次に、バックアップファイルを展開する為のツールとして、Android Backup Extractor を下記 URL からダウンロードします。adb backup で作成したバックアップファイルはそのままでは取り扱いが出来ないので、Android Backup Extractor  などのツールを利用して一般的に扱いが可能なデータ形式に変換する必要があります。*1

Android Backup Extractor

http://sourceforge.jp/projects/sfnet_adbextractor/

 Windows用のandroid-backup-extractor-20140615-bin.zipを展開すると、abe.jar ファイルがありますので、これをバックアップファイルと同じ場所にコピーしておきます。

*2

Javaのインストールと、環境変数にパスが設定されていれば、コマンドプロンプトからabe.jar を実行してバックアップファイルを tar 形式ファイルに変換する事ができます。

下記では事前に Backup フォルダに abe.jar ファイルと、adb backup コマンドで作成したバックアップファイル(暗号化なし)をコピーして置き、それをtar形式ファイルへ変換しています。

c:\backup>java -jar abe.jar unpack backup.ab backup.tar
Strong AES encryption not allowed
Magic: ANDROID BACKUP
Version: 1
Compressed: 1
Algorithm: none
234871296 bytes written to backup.tar.

作成した backup.tar ファイルを Cygwin 環境で tar コマンドを使って展開してみます。

 $ tar -xvf backup.tar

appsというフォルダが作成され、その配下にファイルが展開されている事が確認できるはずです。

さて、tar 形式ファイルの展開ですが、WinRAR でも展開する事ができますが、Cygwin の tar で展開した時とでは、手元では差異が発生しています。TARファイルを展開する時に使うツールによって差異が出るのは個人的にはよくあるケースだと考えています。

Cygwinで展開した場合:

ファイル数: 5829

フォルダ数: 538

サイズ: 219MB

バイト数:230,122,305

WinRARで展開した場合:

ファイル数:5826

フォルダ数: 539

サイズ: 219MB

バイト数: 230,077,935

 具体的な差異内容については確認していませんが、WinRARで展開した場合には同一パスのエラーが出たりしますので、Cygwin 環境下のtarコマンドで展開する方が安全ではないかと思われます。(少なくとも正しく展開できると確認できているツールを選択する必要があります)

もし、Cygwinのtarではなく別のツールを使う場合には、事前に出力される件数に差異が発生しないかを確認してから使う方がよいと思います。

Cygwinのtarにより展開されたファイルのタイムスタンプですが、作成日時は展開日時になりますが、ファイルの最終更新日時はオリジナルが維持された状態になっているはずです。

 

*1:Android Backup Extractor ツールは、Javaベースになっていますので使う為にはJavaの環境が必要になります。

*2:暗号化されたバックアップファイルの展開には更に追加でファイルが必要になります、Readme.txt に詳細が書かれています。