आप "अदब बैकअप" के माध्यम से बनाए गए पूर्ण बैकअप से ऐप के डेटा को कैसे निकालते हैं?


117

मैं अपने नेक्सस 7 को adb backupसभी फाइलों को एक एन्क्रिप्टेड बैकअप में बैकअप देने के लिए तैयार कर रहा हूं । मैं देखता हूं कि आप एक बैकअप से पुनर्स्थापित कर सकते हैं adb restore, लेकिन यह डिवाइस पर मेरे सभी मौजूदा डेटा को मिटा देगा।

मैं इस एन्क्रिप्टेड बैकअप फ़ाइल से एक ऐप के डेटा को वास्तव में कैसे निकालूंगा?


जवाबों:


113

बस दूसरों के संदर्भ के लिए, यहाँ .ab फ़ाइल प्रारूप पर कुछ पृष्ठभूमि है।

Android बैकअप (* .ab) फ़ाइल एक संकुचित TAR फ़ाइल है। यह DEFLATE एल्गोरिथम का उपयोग करके संपीड़ित है। उसके शीर्ष पर, एईएस एन्क्रिप्शन का उपयोग किया जा सकता है। यह तब निर्धारित किया जाता है जब आप बैकअप बनाते हैं, यदि आप एक पासवर्ड दर्ज करते हैं तो बैकअप एन्क्रिप्ट किया गया है, अन्यथा; कोई एन्क्रिप्शन नहीं है, यह केवल संपीड़ित है।

फ़ाइल का HEADER एक सामान्य DEFLATE आर्काइव से थोड़ा अलग है। इसमें बैकअप के बारे में जानकारी शामिल है और निम्नलिखित की तरह दिखता है:

ANDROID BACKUP
1
1
none

पहली पंक्ति "मैजिक" लाइन है । अगली पंक्ति एंड्रॉइड बैकअप फ़ाइल प्रारूप का संस्करण है। अगली पंक्ति एक बूलियन है (सही या गलत, 1 या 0) जो यह दर्शाता है कि फ़ाइल संपीड़ित है। अंतिम पंक्ति एन्क्रिप्शन का प्रकार है। यह उदाहरण किसी एन्क्रिप्शन का उपयोग नहीं कर रहा है। यदि कोई पासवर्ड था, तो लाइन "एईएस -256" पढ़ेगी। उसके बाद एन्क्रिप्शन सिफर है। यदि कोई पासवर्ड नहीं है, तो DEFLATE "संग्रह" शुरू होता है।

इसे Java Deflater का उपयोग करके संपीड़ित किया जाता है । जो कि, डेवलपर्स के नजरिए से, मुद्दों का कारण बनता है अगर आप इसे निकालने के लिए जावा के अलावा कुछ भी उपयोग करना चाहते हैं। मुझे ऐसा कुछ भी नहीं मिला है जो समान एल्गोरिथ्म का उपयोग करके इसे अपवित्र कर सके, भले ही मुझे जो कुछ भी मिला हो (जैसे सी # के लिए) "युक्ति" का पालन करना चाहिए।

उस के साथ, अपाचे 2.0 लाइसेंस के तहत एक खुला स्रोत परियोजना है , जो निकोले एलेनकोव द्वारा लिखित है जो टार फ़ाइल में .ab को निकालने की अनुमति देगा।

उपयोग:

java -jar abe.jar unpack <backup.ab> <backup.tar> <password>

यदि आप सुनिश्चित नहीं हैं कि वास्तव में इसका उपयोग कैसे करें (जो कि इस उत्तर के दायरे से परे है) Droid एक्सप्लोरर का अगला संस्करण v0.8.8.7 ( यहां उपलब्ध है ) आपको ठीक यही करने की अनुमति देगा, और अधिक, एक्सप्लोरर से सही। आप मेरे ब्लॉग पर सुविधाओं के बारे में अधिक पढ़ सकते हैं (हां, मुझे पता है, बेशर्म प्लग। मैं ऐसा करता हूं जब यह सवाल फिट बैठता है)

खोलना


1
अगर मैं प्रतिष्ठा रखता, तो मैं अपने ईश्वर को धन्यवाद देता।

आपका स्वागत है। मुझे केवल वह सारी जानकारी पता है क्योंकि यह एक ऐसी सुविधा है जिसे मैंने अभी हाल ही में Droid एक्सप्लोरर कोड बेस में जोड़ा है, इसलिए मुझे इसके बारे में कुछ शोध करना था।
रयान कॉनरैड

हाय रेयान, ने Droid एक्सप्लोरर का उपयोग करने की कोशिश की, लेकिन यह एंड्रॉइड एसडीके स्थान के बारे में शिकायत करना शुरू करने में विफल रहता है, भले ही यह स्थापित हो और मैं सही रास्ते की आपूर्ति कर रहा हूं।
उमर फारूक ख्वाजा

@UmarFarooqKhawaja droid एक्सप्लोरर के लिए अक्सर पूछे जाने वाले प्रश्न पर एक नज़र डालें । अंतिम क्यू / ए आपके मुद्दे को संबोधित करता है।
रयान कॉनरैड

ठीक है, टार से प्रासंगिक 'com.app.name' फ़ोल्डर निकाला है, लेकिन मैं इसका उपयोग कैसे करता हूं कि ऐप डेटा को पुनर्स्थापित करने के लिए? बस फ़ोल्डर को sdcard / Android / data / कॉपी करने के लिए काम नहीं कर रहा है ...
0ms पर '27

90

या एक लाइनर के साथ:

( printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" ; tail -c +25 backup.ab ) |  tar xfvz -

2
अच्छा! क्या आपके पास "पैक" (असम्पीडित निर्देशिका ट्री लेने और एक .db फ़ाइल बनाने के लिए) के बराबर भी है?
दैनिक

4
क्या आप उत्तर में स्पष्टीकरण जोड़ सकते हैं।
लकी

2
यह सबसे अच्छा जवाब है: डी पूरी तरह से ठीक काम करता है! अब निकाला जा रहा है।
xdevs23

16
स्पष्टीकरण: लेखक कमांड के .tar.gzसाथ एक फ़ाइल के लिए एक मानक Zlib फ़ाइल हैडर बनाता है printf( 0x1F 0x8Bएक हस्ताक्षर 0x08है, संपीड़न विधि है, 0x00झंडे हैं और 4 x 0x00टाइमस्टैम्प है), फिर इस हेडर में backup.ab25d से शुरू होने वाली फ़ाइल की सामग्री को जोड़ता है। ऐसी स्ट्रीम एक मान्य .tar.gzफ़ाइल है, और tar xfvzकमांड इसे इस तरह से पहचानता है, इसलिए यह स्ट्रीम को सफलतापूर्वक खोल सकता है।
एंटोनोन

3
मैंने adb 1.0.36 (रिविजन 1.7.0.0 + r33-2) के साथ बैकअप बनाया और इस विधि ने zgip से एक त्रुटि उत्पन्न की:invalid compressed data--format violated
Rache

31

एक और विकल्प का उपयोग करना है bash, catऔर gunzip( gzip)।

पूरी प्रक्रिया यह हो सकती है ( अनएन्क्रिप्टेड बैकअप के साथ ):

  1. बैकअप एक ऐप के डेटा (उदाहरण के लिए " किटकैट के लिए ओवरराइड डीएनएस "):

    $ adb backup -f net.mx17.overridedns.ab -noapk net.mx17.overridedns
    Now unlock your device and confirm the backup operation.
    
  2. संपीड़ित डेटा निकालें

    $ dd if=net.mx17.overridedns.ab bs=1 skip=24 > compressed-data
    1285+0 records in
    1285+0 records out
    1285 bytes (1,3 kB) copied, 0,00745877 s, 172 kB/s
    
  3. संपीड़ित डेटा को विघटित करें

    $ printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" \
        | cat - compressed-data | gunzip -c > decompressed-data.tar
    gzip: stdin: unexpected end of file
    
  4. "अनार" टार फ़ाइल

    $ tar xf decompressed-data.tar
    

4
क्या "फ़ाइल का अप्रत्याशित अंत" अपेक्षित है?
23

2 में निष्कर्षण आश्चर्यजनक रूप से एक एन्क्रिप्टेड फ़ाइल पर काम करता है। यह कैसे हो सकता है? तब विघटन के साथ असफल रहा gzip: stdin: invalid compressed data--format violated। मुझे लगता है कि ddरिपोर्ट के रूप में निष्कर्षण सफल रहा 22763821+0 records in 22763821+0 records out
टॉम रसेल

4

एक अन्य विकल्प इस XDA धागे से पर्ल AdbBackupRoutines का उपयोग कर रहा है । उनके पास कुछ आवश्यकताएं हैं, हालांकि: पर्ल जाहिर है, प्लस libterm-readkey-perl, libcrypt-cbc-perlऔर libcrypt-pbkdf2-perl(यदि आपके बैकअप अनएन्क्रिप्टेड हैं, तो आप अंतिम निर्भरता को छोड़ सकते हैं, backupdecrypt.plजहां यह शामिल है - लाइन 103 के बारे में टिप्पणी करके - मेरे लिए ठीक काम किया है)।

उपयोग काफी आसान है:

./backupdecrypt.pl [options] <backupfile.ab> <outfile.tar>

परिणामी .tarफ़ाइल को किसी भी अन्य टारबॉल की तरह जांच की जा सकती है। कम से कम एक पहलू में इसकी संरचना काफी दिलचस्प है: यह उन वास्तविक रास्तों को प्रतिबिंबित नहीं करता है, जहाँ से फाइलें ली गई हैं (उदाहरण के लिए /data/data/com.app.name/databases/whatever.db, लेकिन इसके बजाय apps/com.app.name/db/whatever.db) - जो एक डिवाइस / ROM पर एक ऐप-बैक-अप को इंगित करने के लिए पुनर्स्थापित किया जा सकता है किसी भी अन्य डिवाइस / परेशानी के बिना ROM, जैसा adb restoreकि वास्तविक रास्तों का पता लगाना चाहिए।


एक और उपकरण (थोड़ा बेहतर बनाए रखा गया है) जो ऐसा करता है: github.com/nelenkov/android-backup-extractor
ढक्कन

धन्यवाद, @ लिड! मैं अपने उपकरण के साथ एक छोटे से खोल स्क्रिप्ट (लगभग एक एक लाइनर केवल) को शामिल किया है Adebar (एंड्रॉयड डिवाइस बैकअप और रिपोर्ट) है, जो एडीबी बैकअप धर्मान्तरित ( .ab) के लिए .tar.gzअभिलेखागार :)
इज़ी

4

दूसरों द्वारा दी गई जानकारी के आधार पर, अब मुझे पता है कि बैकअप फ़ाइल केवल एक उपसर्गित अपस्फीति (GZip) स्ट्रीम है, इस जानकारी के आधार पर यह सरल प्रोग्राम आपके लिए इसे अनपैक कर सकता है:

import java.io.*;
import java.util.zip.*;

/** Run: javac unab.java && java unab backupfile.ab */
public class unab {
    private static final int BACKUP_HEADER_LENGTH = 24;
    public static void main(String[] args) throws IOException {
        InputStream in = new FileInputStream(args[0]);
        try {
            OutputStream out = new FileOutputStream(args[0] + ".tar");
            try {
                if (in.skip(BACKUP_HEADER_LENGTH) != BACKUP_HEADER_LENGTH) {
                    throw new IOException("Unexpected end of file while skipping backup header.");
                }
                byte[] buffer = new byte[100 * 1024];
                int count;
                InputStream zip = new InflaterInputStream(in);
                while ((count = zip.read(buffer)) > 0) {
                    out.write(buffer, 0, count);
                }
            } finally {
                out.close();
            }
        } finally {
            in.close();
        }
    }
}

मैंने यह इसलिए लिखा क्योंकि मेरे पास ऊपर बताए गए यूनिक्स उपकरणों में से कोई भी नहीं है, और यह साइगविन या अन्य उपकरण स्थापित करने की तुलना में आसान था।

लाभ :

  • पार मंच
  • सरल (कोई गूढ़ पैरामीटर नहीं)
  • पाइपिंग टूल की कोई आवश्यकता नहीं है

नुकसान :

  • JDK की आवश्यकता है (जो आपको पहले से ही होने की संभावना है क्योंकि आप Android SDK के साथ खिलवाड़ कर रहे हैं)
  • एन्क्रिप्टेड बैकअप के लिए कोई समर्थन नहीं
  • परिणामी टार फ़ाइल निकालने के लिए कुछ चाहिए (मैं कुल कमांडर का उपयोग करता हूं)

इसे बनाने के लिए एक कमांड लाइन टूल unab.batसामग्री के साथ बनाएं : java -cp "%~dp0." unab %*और निर्देशिका को PATH


4

जैसा कि निहित प्रश्न यह भी है कि एकल एप्लिकेशन डेटा को कैसे पुनर्स्थापित किया जाए, मैं इस निफ्टी स्क्रिप्ट का उल्लेख करना चाहता हूं, जो एकल-ऐप में एक पूर्ण-बैकअप को विभाजित करता है ।ab फ़ाइलें:

https://sourceforge.net/projects/adb-split/

इसके लिए जार फ़ाइलों की आवश्यकता होती है: अबे.जर और टार-बिन-स्प्लिट.जर जो यहां मिल सकते हैं:

इसने कम से कम मेरे टेस्टकेस के लिए काम किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.