@port139 Blog

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

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で比較した範囲では、ファイルやフォルダの差異は発生していないように見えます。

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