Saya telah mencadangkan Nexus 7 saya dengan adb backup
mencadangkan semua file ke dalam cadangan terenkripsi. Saya melihat bahwa Anda dapat memulihkan dari cadangan dengan adb restore
, tetapi itu akan menghapus semua data saya yang ada di perangkat.
Bagaimana tepatnya saya mengekstrak data satu aplikasi dari file cadangan terenkripsi ini?
Jawaban:
Hanya untuk referensi orang lain, berikut adalah beberapa latar belakang pada format file .ab.
File Android Backup (* .ab) adalah file TAR terkompresi . Itu dikompresi menggunakan algoritma DEFLATE . Selain itu, ada enkripsi AES yang digunakan. Ini ditentukan saat Anda membuat cadangan, jika Anda memasukkan kata sandi maka cadangan dienkripsi, jika tidak; tidak ada enkripsi, hanya dikompresi.
HEADER file sedikit berbeda dari arsip DEFLATE normal. Ini berisi informasi tentang cadangan dan terlihat seperti berikut:
Baris pertama adalah baris "Magic" . Baris berikutnya adalah versi format file Android Backup. Baris berikutnya adalah boolean (benar atau salah, 1 atau 0) yang menunjukkan apakah file dikompresi. Baris terakhir adalah jenis enkripsi. Contoh ini tidak menggunakan enkripsi apa pun. Jika ada kata sandi, baris itu akan bertuliskan "AES-256". Setelah itu adalah enkripsi cipher. Jika tidak ada kata sandi, maka DEFLATE "arsip" dimulai.
Itu dikompresi menggunakan Java Deflater . Yang, dari perspektif pengembang, menyebabkan masalah jika Anda ingin menggunakan apa pun selain Java untuk mengekstraknya. Saya belum dapat menemukan apa pun yang dapat mengempiskannya menggunakan algoritma yang sama, meskipun semua yang saya temukan (untuk seperti C #) seharusnya mengikuti "SPEC".
Dengan itu, ada proyek open source di bawah lisensi Apache 2.0, ditulis oleh Nikolay Elenkov yang akan memungkinkan Anda untuk mengekstrak .ab ke file tar.
Pemakaian:
Jika Anda tidak yakin bagaimana cara menggunakannya (yang berada di luar cakupan jawaban ini), versi Droid Explorer v0.8.8.7 berikutnya ( tersedia di sini ) akan memungkinkan Anda untuk melakukan hal ini, dan banyak lagi, langsung dari Explorer. Anda dapat membaca lebih lanjut tentang fitur di blog saya (ya, saya tahu, plug tak tahu malu. Saya melakukan itu ketika itu cocok dengan pertanyaan)
sumber
Atau dengan one-liner:
sumber
.tar.gz
file denganprintf
perintah (0x1F 0x8B
tanda tangan,0x08
adalah metode kompresi,0x00
adalah flag dan 4 x0x00
adalah timestamp), kemudian menambahkan header ini isibackup.ab
file, mulai dari offset 25d. Aliran tersebut adalah.tar.gz
file yang valid , dantar xfvz
perintah mengenalinya, sehingga dapat berhasil mengompres aliran.invalid compressed data--format violated
Satu opsi lagi adalah menggunakan
bash
,cat
dangunzip
(gzip
).Proses lengkapnya bisa seperti ini ( dengan cadangan yang tidak terenkripsi ):
buat cadangan data satu aplikasi (misalnya " Override DNS for KitKat "):
ekstrak data yang dikompresi
dekompresi data yang dikompresi
"untar" file tar
sumber
gzip: stdin: invalid compressed data--format violated
. Saya menganggap ekstraksi berhasil, sebagaidd
laporan22763821+0 records in 22763821+0 records out
.Opsi lain adalah menggunakan Perl AdbBackupRoutines dari utas XDA ini . Mereka memiliki beberapa persyaratan, meskipun: Perl jelas, plus
libterm-readkey-perl
,libcrypt-cbc-perl
danlibcrypt-pbkdf2-perl
(jika cadangan Anda tidak terenkripsi, Anda dapat melewati ketergantungan terakhir dengan hanya mengomentari baris 103 dibackupdecrypt.pl
mana itu termasuk - bekerja dengan baik untuk saya).Penggunaannya cukup mudah:
File yang dihasilkan
.tar
kemudian dapat diselidiki seperti tarball lainnya. Strukturnya cukup menarik dalam setidaknya satu aspek: tidak mencerminkan jalur sebenarnya tempat file diambil (misalnya tidak/data/data/com.app.name/databases/whatever.db
, tetapi sebaliknyaapps/com.app.name/db/whatever.db
) - yang menunjukkan aplikasi yang dicadangkan pada satu perangkat / ROM mungkin dikembalikan ke perangkat / ROM lain apa pun tanpa masalah, karenaadb restore
harus mengetahui jalur sebenarnya sendiri.sumber
.ab
) ke.tar.gz
Archives :)Berdasarkan informasi oleh orang lain, sekarang saya tahu bahwa file cadangan hanyalah aliran Deflated (GZip) yang diawali, berdasarkan informasi ini program sederhana ini dapat membongkar untuk Anda:
Saya menulis ini karena saya tidak memiliki alat Unix yang disebutkan di atas, dan itu lebih mudah daripada menginstal Cygwin atau alat lainnya.
Keuntungan :
Kekurangan :
Untuk membuatnya menjadi alat baris perintah buat
unab.bat
dengan konten:java -cp "%~dp0." unab %*
dan direktori untukPATH
.sumber
Seperti pertanyaan tersirat juga, bagaimana mengembalikan data aplikasi tunggal, saya ingin menyebutkan skrip bagus ini, yang membagi cadangan-penuh penuh.ab dalam file-file app.ab tunggal:
https://sourceforge.net/projects/adb-split/
Ini membutuhkan file jar: abe.jar dan tar-bin-split.jar yang dapat ditemukan di sini:
Paling tidak itu berfungsi untuk testcase saya.
sumber