内側を見て、ADBバックアップ作成されたファイルを調整する方法はありますか? -- backup フィールド と adb フィールド android 関連 問題

Is there a way to look inside and modify an adb backup created file?


43
vote

問題

日本語

adb backup で、Galaxy Nexusのバックアップを作成しました。結果のファイルはbackup.dbという名前で、どういうわけか暗号化されています。

バックアップを復元したいが、 998877666544335 の復元になると停止します。 <コード> 99887766544336 を使用して、復元プロセス中に<コード> 99887765544337 がクラッシュすることを見つけて見つけました。

バックアップのデータにアクセスし、連絡先データベースを削除してすべての携帯電話に戻します。バックアップからデータを復元する他の方法はありますか?

英語

I created a backup of my Galaxy Nexus with adb backup. The resulting file is named backup.db and it's somehow encrypted.

I wanted to restore the backup, but it stops when it comes to restoring com.android.providers.contacts. I used adb logcat to find out what's going on and found out that com.android.acore crashes during the restore process.

I'd like to gain access to the data in the backup and remove the contacts database to restore everything back to my phone. Are there any other ways restoring the data from the backup?

     
 
 

回答リスト

57
 
vote

私はこれに取り組んできました。私はここでここで私の結果を「コミュニティウィキ」としての2つの理由で答えています。まず、他の誰かが参加したい場合は、話す場所があります。第二に、私がこのプロジェクトから引き離すと、他の誰かが作業を開始するためのヒントがあるでしょう。

ホスト上のバックアップロジックは、 https://に完全に含まれています。 github.com/android/platform_system_core/blob/master/adb/commandline.cpp 。 998877665444333 。この関数は eerm> simple:コマンドラインオプションを検証し、コマンドをAS-IS-IS-IS-IS-ISEに電話機のADBデーモンに送信し、電話の出力をファイルに書き込みます。エラーチェックさえもありません。たとえば、電話でバックアップを拒否した場合、<コード> 998877666544334 は空のファイルを書き出します。

電話機では、バックアップロジックは https://github.com/android/platform_system_core/blob/master/adb/services.cpp 。この関数は、ホストからのコマンドが<コード> 9988777666554336 であることを識別し、 9988776654337 に渡します。 Android / platform_frameworks_base / blob / master / cmds / bu / bu "rel =" noreferrer "> Trivial Shell Script 新しいAndroidアプリプロセスのメインクラスとして<コード> 99887766544338 を起動します。これは、 99887766654339 を呼び出して、バックアップサービスを<コード> 998877666666666543310 として取得し、 9988776666543311 を呼び出し、それを静止していないファイル記述子(非常に間接的に)接続されている<コード> 9988776666433312 ファイルのホスト上のファイルに。

コントロールは com.android.server.backup.backupManagerService は、ユーザーにバックアップを確認/拒否するようにGUIをポップアップします。ユーザーがそうすると、<コード> 99887766655443314 (同じファイル)が呼び出されます。ユーザーが要求を承認した場合、バックアップが暗号化されている場合は、<コード> adb uninstall com.google.android.apps.maps 5 は、メッセージを<コード> 998877665444333317 に渡します。インスタンス化してキックオフをオフにして(href = "https://github.com/android/platform_frameworks_base/blob/8e7057cf3824d1421a12abad7a2ba8b07e877c6/services/backup/java/com/android/server/backup/backupManagerService .java#l4004 "REL =" NOREFERRER ">同じファイル、4004 書き込み時点で

最後に、行4151 と行4330 。

最初に、<コード> backup20 は4つまたは9つのASCII回線で構成されているヘッダーを書き込みます。

  1. <コード> restore1
  2. バックアップ形式のバージョン:現在 backup22
  3. 998877655443323 99887766543324
  4. の場合
  5. 暗号化方法:現在<コード> 998876655443325 または<コード> 998877665443326
  6. (暗号化されている場合)、Hexでエンコードされた「ユーザーパスワード塩」
  7. (暗号化されている場合)、Hexでエンコードされた「マスターキーチェックサムソルト」
  8. (暗号化されている場合)、10進数として「使用されているPBKDF2ラウンド数」:現在<コード> 998876655443327
  9. (暗号化されている場合)、HEXでエンコードされた「ユーザーキーのIV」、すべてのCAPS
  10. (暗号化されている場合)、Hexでエンコードされた「マスターIV +キーBLOB」、すべてのCAPS
  11. でエンコードされています。

    実際のバックアップデータは、(圧縮と暗号化に応じて)<コード> 9988877665443328 、<コード>、<コード>、<コード>、<コード>、<コード>、または<コード>、または<コード>、または<コード>、または<コード> 99887666554443333 。

    todo :TAR出力を生成するコードパスを書き込みます - エントリが正しい順序にある​​限り、Tarを使用することはできます(下記参照)。

    tarアーカイブ形式

    アプリデータはApp / Directory、STの下に格納されています _manifestファイル、apk(要求されている場合)は、a / db / db / db / sp /の共有環境設定で、a / appファイル内のAPK(要求された場合)。外部ストレージバックアップを要求した場合(-Sharedオプションを使用)、外部ストレージファイルを含むアーカイブに共有/ディレクトリがあります。

     <コード> backup32  

    暗号化の詳細

    1. AES 256キーは、ランダムに生成された512ビット塩で10000ラウンドのPBKDF2を使用してバックアップ暗号化パスワードから派生しています。
    2. AES 256マスターキーはランダムに生成されています
    3. マスターキー 'checksum'は、新しいランダムに生成された512ビット塩で10000ラウンドのPBKDF2を介してマスターキーを実行して生成されます。
    4. ランダムなバックアップ暗号化IVが生成されます。
    5. IV、マスターキー、およびチェックサムは連結され、1に派生したキーで暗号化されています。結果のBLOBは、ヘッド文字列としてヘッダーに保存されます。
    6. 実際のバックアップデータはマスターキーで暗号化され、ファイルの終わりに追加されます。
    7. サンプルパック/アンパックコード実装(プロダクション/使用)tarアーカイブ: https://github.com/nelenkov/android-backup-extractor

      ここでの詳細: http://nelenkov.blogspot.com /2012/06/unpaking-android-backups.html

      梱包/解凍および壊れたアーカイブの固定のためのPerlスクリプト:

      http://forum.xda-developers.com/ShowThread。 PHP?P = 27840175#Post27840175

 

I started working on this. I'm posting my results so far here as a "community wiki" answer for two reasons: first, if someone else wants to join in, there's a place to talk; second, if I get pulled away from this project, there'll be hints for someone else to start working.

xc2xa0

The backup logic on the host is entirely contained within https://github.com/android/platform_system_core/blob/master/adb/commandline.cpp, in the function named backup. The function is very simple: it validates the command line options, sends the command mostly as-is to the adb daemon on the phone, and writes the phone's output to the file. There isn't even error-checking: if, for example, you refuse the backup on the phone, adb just writes out an empty file.

On the phone, the backup logic starts in service_to_fd() in https://github.com/android/platform_system_core/blob/master/adb/services.cpp. The function identifies that the command from the host is "backup", and passes the unparsed command to /system/bin/bu, which is a trivial shell script to launch com.android.commands.bu.Backup as the main-class of a new Android app process. That calls ServiceManager.getService("backup") to get the backup service as an IBackupManager, and calls IBackupManager.fullBackup(), passing it the still-unused file descriptor (very indirectly) connected to the backup.ab file on the host.

Control passes to fullBackup() in com.android.server.backup.BackupManagerService, which pops up the GUI asking the user to confirm/reject the backup. When the user do so, acknowledgeFullBackupOrRestore() (same file) is called. If the user approved the request, acknowledgeFullBackupOrRestore() figures out if the backup is encrypted, and passes a message to BackupHandler (same file.) BackupHandler then instantiates and kicks off a PerformAdbBackupTask (same file, line 4004 as of time of writing)

We finally start generating output there, in PerformAdbBackupTask.run(), between line 4151 and line 4330.

First, run() writes a header, which consists of either 4 or 9 ASCII lines:

  1. "ANDROID BACKUP"
  2. the backup format version: currently "4"
  3. either "0" if the backup is uncompressed or "1" if it is
  4. the encryption method: currently either "none" or "AES-256"
  5. (if encrypted), the "user password salt" encoded in hex, all caps
  6. (if encrypted), the "master key checksum salt" encoded in hex, all caps
  7. (if encrypted), the "number of PBKDF2 rounds used" as a decimal number: currently "10000"
  8. (if encrypted), the "IV of the user key" encoded in hex, all caps
  9. (if encrypted), the "master IV + key blob, encrypted by the user key" encoded in hex, all caps

The actual backup data follows, either as (depending on compression and encryption) tar, deflate(tar), encrypt(tar), or encrypt(deflate(tar)).

xc2xa0

TODO: write up the code path that generates the tar output -- you can simply use tar as long as entries are in the proper order (see below).

Tar archive format

App data is stored under the app/ directory, starting with a _manifest file, the APK (if requested) in a/, app files in f/, databases in db/ and shared preferences in sp/. If you requested external storage backup (using the -shared option), there will also be a shared/ directory in the archive containing external storage files.

$ tar tvf mybackup.tar -rw------- 1000/1000      1019 2012-06-04 16:44 apps/org.myapp/_manifest -rw-r--r-- 1000/1000   1412208 2012-06-02 23:53 apps/org.myapp/a/org.myapp-1.apk -rw-rw---- 10091/10091     231 2012-06-02 23:41 apps/org.myapp/f/share_history.xml -rw-rw---- 10091/10091       0 2012-06-02 23:41 apps/org.myapp/db/myapp.db-journal -rw-rw---- 10091/10091    5120 2012-06-02 23:41 apps/org.myapp/db/myapp.db -rw-rw---- 10091/10091    1110 2012-06-03 01:29 apps/org.myapp/sp/org.myapp_preferences.xml 

Encryption details

  1. An AES 256 key is derived from the backup encryption password using 10000 rounds of PBKDF2 with a randomly generated 512 bit salt.
  2. An AES 256 master key is randomly generated
  3. A master key 'checksum' is generated by running the master key through 10000 rounds of PBKDF2 with a new randomly generated 512 bit salt.
  4. A random backup encryption IV is generated.
  5. The IV, master key, and checksum are concatenated and encrypted with the key derived in 1. The resulting blob is saved in the header as a hex string.
  6. The actual backup data is encrypted with the master key and appended to end of the file.

Sample pack/unpack code implementation (produces/uses) tar archives: https://github.com/nelenkov/android-backup-extractor

Some more details here: http://nelenkov.blogspot.com/2012/06/unpacking-android-backups.html

Perl scripts for packing/unpacking and fixing broken archives:

http://forum.xda-developers.com/showthread.php?p=27840175#post27840175

 
 
         
         
15
 
vote
vote
ベストアンサー
 

バックアップを作成するときに指定した場合を指定しない限り、ファイルは暗号化されません。しかし、圧縮されています(デフレートを使用)。 Androidソース(COM / Android / Server / BackupManagice.java)コードを見ることで、正確なフォーマットを調べることができます。そして、技術的には特定のデータを抽出できるはずです。ただし、IIRC、一部のファイルの整合性チェックがありますので、それはただそれからのデータを削除するだけではおそらく機能しません。残念ながら 9988776554432 コマンドは、特定のApp / Packageのみを復元するか、パッケージを除外するオプションを持っていないようです。

 

The file is not encrypted, unless your specify so when creating the backup. It is however compressed (using deflate). You can find out the exact format by looking at Android source (com/android/server/BackupManagerService.java) code, and, technically, should be able to extract specific data from it. However, IIRC, there are some file integrity checks in place, so it most probably won't work if you just delete a bunch of data from it. Unfortunately the restore command doesn't seem to have an option to restore a particular app/package only or exclude a package.

 
 
         
         
7
 
vote

Nikolay Elenkov 。しかし、私はすでにそのままでそれをここでパッケージ化するソフトウェアをすでに開発するように追加する必要があります。 http:// SourceForge。ネット/プロジェクト/ adbextractor /

パッケージには、JavaツールとPerlツールの両方が含まれています。私は自分自身がJavaを介して任意の日を好むので、私はPerlコードを抽出し、それらが実行可能なものであることを確認し、必要なPerlライブラリをインストールし、 998877666543333 をADBバックアップファイルに対して実行して変換します。問題なしのTARまたはGZIPのtarファイル。

Bash 3で1つのライナーを形成したことさえ、gzipped tarファイルに直接ADBバックアップを行うことを可能にする:

<事前> <コード> backup34

それが役立つことを願っています。

 

Great and detailed answer from Nikolay Elenkov. However I should added that somebody already develop a software that do just that and package it here: http://sourceforge.net/projects/adbextractor/

The package contains both Java and Perl tool. I myself prefer Perl over Java any day, so I extracted the Perl codes, make sure they are executable, installed the required Perl library, and run the backupdecrypt.pl against an adb backup file, and it convert it into a tar or gzipped tar file without any issue.

I even formed a one liner in Bash 3 that allow me to do adb backup directly to gzipped tar file:

adb backup -f >(backupdecrypt.pl -D -z - backup.tgz) -all 

Hope it helps.

 
 
   
   
-4
 
vote

既存のバックアップファイルを探るために、<a href="https://www.adb-backup.com/www.adb-backup.com/www.adb-backup.com/www.adb-backup.com/www.adb-backup.com http://www.adb-backup.com 、「DD」、「tar」、... </p>なしでは簡単です。

データはこのサーバには保存されません。 DD / TARで操作せずにバックアップを表示する、または追加のソフトウェアをインストールすることなく、このオンラインサービスを開発しました。私はwww.adb-backup.com

を作っています

 

For explore existing backup file, try http://www.adb-backup.com page, it is simple without "dd", "tar", ...

Data is not stored on this server. I've developed this online service to make it easier to view backups without manipulating with dd / tar or installing additional software. I'm author www.adb-backup.com

 
 
       
       

関連する質問

50  ADB Backupは0バイトのファイルを作成します。一つを設定しない場合でも、現在のバックアップパスワードの入力を求めます。デスクトップバックアップパスワードの場合は「パスワードの設定に失敗しました」  ( Adb backup creates 0 byte file prompts for current backup password even though ) 
問題: ADBバックアップを実行するたびに、 99887766544334 の後に 998877666544355 を数秒間 <> にするメッセージが続きます。後で私が17 GBのデバイスメモリを使用しているという事実にもかかわらず、結果として生じるバック...

2  Android携帯電話(コンピュータなし)にはどのようなバックアップ/同期アプリがお勧めですか? [閉まっている]  ( What backup sync app is recommended for android phones without computer ) 
閉じたこの質問はオフトピックです。現在答えを受け付けていません。 この質問を改善したいですか? ...

31  ADBを介したAndroidの設定とアプリケーションをバックアップおよび復元します  ( Backup and restore android settings and application through adb ) 
ADBを介してすべてのAndroid設定とアプリケーションをバックアップして復元することが可能なかどうかを尋ねたいです。 私は試してみました: <事前> <コード> adb backup -all adb: unable to connect for bac...

1  人から人へのWhatsAppの履歴を転送する  ( Transferring whatsapp history from person to person ) 
私は私のwhatsapp履歴をPerson Xで削除しましたが、会話履歴はXの電話にまだ存在します。だから私はXの電話から履歴を取り戻すことができますか? ...

3  バックアップを実行するときに私の電話が停止し続けるのはなぜですか?  ( Why does my phone keep getting stuck when performing a backup ) 
私は私の電話を根ざしていて、現在私のSprint HTC Heroに古いバージョンのシアノーゲンMODを持っています。 ROMマネージャを使用してバックアップを実行しようとすると、電話機は再起動しようとするが、起動を終了することはありません。最新バージョンのシ...

4  バックアップ連絡先、写真、アプリ、Googleアカウントを削除し、ダミーアカウントに置き換える  ( Backup contacts photos apps remove google account and replace with dummy acc ) 
私の電話から私の主なGoogleアカウントをリンクして、代わりにダミーアカウントを使用したいです。セキュリティ、紛失の理由から、Googleの声などのGoogleのサービスのいずれかは本当に使用していません。望んでおり、私のオンラインのGoogleアカウントを...

1  ADB経由でAPN設定をバックアップして復元する方法  ( How to backup and restore apn setting via adb ) 
ADBを介したAPN設定のバックアップと復元方法は? 私はrootなしのAndroid 6.0にいます。 ...

1  専用バックアップアプリを使用するのと同じくらい効果的なSkyDriveまたはDropboxを使用して、SkyDriveまたはDropboxを使用してAndroidデバイスをクラウドにバックアップしていますか?  ( Is backing up my android device to the cloud using skydrive or dropbox equally a ) 
Google Play Storeの専用バックアップアプリケーションを使用して、MS SkyDriveまたはDropboxを使用して、My Androidスマートフォン(非根本的な)のMy Apps、写真、連絡先、SMSテキストなどをバックアップするのに似て...

6  yaffs2との.imgファイルにアクセスするにはどうすればよいですか。  ( How do i access img files with yaffs2 ) 
私はUbuntuでそれらを取り付ける試みました、運ずれ、<コード> ./unyaffs21 はyaffs2ファイルシステムを認識しません。 <コード> 99887665544332 および<コード> 99887665544333 では実際にはIMGファイルを解...

1  Android 5.1 ADBバックアップはAndroid 6.0と互換性がありませんか?  ( Is an android 5 1 adb backup incompatible with android 6 0 ) 
最近、私のNexus 4にCyanogenModをロードしました。復元を必要とする唯一のものはCandyCrushデータですが、ADB Restoreは仕事をしていないようです。それは単に/ sdcard / android / dataに空のフォルダを作成し...

0  Old HTC Wildfifre Android 2.1からLG Optimus VUへのすべての連絡先をどのように転送できますか  ( How can i transfer my all contacts from old htc wildfifre android 2 1 to lg opti ) 
私はただAndroidバージョン4.0を搭載したAndroidバージョン2.1に古いHTC Wildfireからのすべての連絡先を新しいLG Optimus VUに移したいだけです。私は異なるアプリを使用しましたが、それでも私は連絡先と予期しないエラーが発生す...

23  新しい電話:ゲームの進行状況を転送する方法?  ( New phone how to transfer game progress ) 
私は新しいAndroid携帯電話を購入することを計画しています。 。 現在HTCの欲求を持っており、HTC EVO 3Dを購入します。 これに対する単純/一般的な解決策はおそらくわかりません。 しかし、私は誰かが似たことがあるかどうか疑問に思っていて、いくつか...

0  Whatsappチャットとデータを復元します  ( Restore whatsapp chat and data ) 
最近、私のXperia Z2を点滅させた後、点滅する前に電話機の内部メモリのバックアップを取得し、WhatsAppデータが自動的に復元されるという印象を持っています。しかし、フラッシュプロセスが完了した後、もう一度WhatsAppをインストールした後、以前のメ...

1  私のコンピュータにSIMカード上の連絡先をバックアップする方法は?  ( How can i backup contacts on a sim card to my computer ) 
私の兄弟は私に彼のSIMカードのデータをバックアップしたいです。自分の連絡先をめちゃくちゃにすることなく私のコンピュータにこれをコピーするにはどうすればよいですか? ...

5  ROMバックアップを復元します  ( Restore a rom back up ) 
私は今夜私の携帯電話にシアノーゲン銃を試すつもりです。しかし、私がそうする前に、私は一つのことについて興味があります。私はこのサイトで受け取った1命令(Bryanに感謝します)、そして私のすべてのアプリケーションとデータのチタニウムのバックアップを行ったNAN...

関連する質問

50  ADB Backupは0バイトのファイルを作成します。一つを設定しない場合でも、現在のバックアップパスワードの入力を求めます。デスクトップバックアップパスワードの場合は「パスワードの設定に失敗しました」 
2  Android携帯電話(コンピュータなし)にはどのようなバックアップ/同期アプリがお勧めですか? [閉まっている] 
31  ADBを介したAndroidの設定とアプリケーションをバックアップおよび復元します 
1  人から人へのWhatsAppの履歴を転送する 
3  バックアップを実行するときに私の電話が停止し続けるのはなぜですか? 
4  バックアップ連絡先、写真、アプリ、Googleアカウントを削除し、ダミーアカウントに置き換える 
1  ADB経由でAPN設定をバックアップして復元する方法 
1  専用バックアップアプリを使用するのと同じくらい効果的なSkyDriveまたはDropboxを使用して、SkyDriveまたはDropboxを使用してAndroidデバイスをクラウドにバックアップしていますか? 
6  yaffs2との.imgファイルにアクセスするにはどうすればよいですか。 
1  Android 5.1 ADBバックアップはAndroid 6.0と互換性がありませんか? 
0  Old HTC Wildfifre Android 2.1からLG Optimus VUへのすべての連絡先をどのように転送できますか 
23  新しい電話:ゲームの進行状況を転送する方法? 
0  Whatsappチャットとデータを復元します 
1  私のコンピュータにSIMカード上の連絡先をバックアップする方法は? 
5  ROMバックアップを復元します