एक भ्रष्ट APK फ़ाइल को कैसे ठीक करें और संपत्तियां निकालें
आपने 2 जीबी गेम बंडल डाउनलोड करने में घंटों बिताए हैं, केवल आपके ब्राउज़र पर 99% पर "डाउनलोड विफल" कहने के लिए, या इससे भी बदतर, Android के लिए "पार्सिंग त्रुटि: पैकेज को पार्स करने में कोई समस्या थी।" चिल्लाने के लिए। एक दूषित APK जरूरी नहीं कि एक मृत फ़ाइल हो। चूंकि APK ज़िप संपीड़न मानक पर बनाए गए हैं, इसलिए उन्हें अक्सर मरम्मत की जा सकती है, कम से कम अंदर की कीमती संपत्तियों को निकालने के लिए पर्याप्त है।
नीचे हम यह जानेंगे कि वास्तव में APK के अंदर क्या टूटता है, मरम्मत के लिए कौन से उपकरण उपयुक्त हैं, और जब आप टूटे हुए बंडल से निपट रहे हों तो हमारा XAPK कन्वर्टर कैसे मदद कर सकता है।
APK भ्रष्टाचार की शारीरिक रचना
APK अनिवार्य रूप से एक विशिष्ट संरचना वाला एक ज़िप संग्रह है। भ्रष्टाचार आम तौर पर तीन स्थानों में से एक में होता है:
- शीर्षलेख: फ़ाइल की शुरुआत में बाइट्स गायब हैं या बदल गए हैं।
- मेनिफेस्ट (XML): AndroidManifest.xml विकृत है या असमर्थित एन्कोडिंग का उपयोग करता है।
- DEX कोड: वास्तविक जावा/कोटलिन बाइटकोड को छोटा कर दिया गया है, जिससे ऐप चलने योग्य नहीं है।
विधि 1: हेडलेस ज़िप मरम्मत (सबसे आसान)
यदि फ़ाइल "पढ़ने योग्य" है, लेकिन नहीं खुलेगी, तो डिस्कइंटरनल ज़िप मरम्मत (फ्री) जैसे टूल या Linux/macOS में कमांड-लाइन zip -FF कमांड का उपयोग करें। ये उपकरण फ़ाइलों के "हस्ताक्षर" के लिए फ़ाइल को स्कैन करते हैं और केंद्रीय निर्देशिका को स्क्रैच से पुनर्निर्माण करते हैं।
टर्मिनल उपयोगकर्ताओं के लिए कोड: zip -FF corrupt_app.apk --out fixed_app.apk
विधि 2: ज़िपलाइन/संरेखण को ठीक करना
कभी-कभी कोई APK केवल इसलिए "भ्रष्ट" होता है क्योंकि यह 4-बाइट सीमाओं पर संरेखित नहीं होता है। Android के मेमोरी प्रबंधन के लिए इसकी आवश्यकता होती है. आप Android SDK से ज़िपलाइन टूल का उपयोग करके इसे ठीक कर सकते हैं:
zipalign -v 4 input.apk output.apk
बिट-रोट चेतावनी
यदि DEX (classes.dex) फ़ाइल में ही डेटा गायब है, तो किसी भी प्रकार की ज़िप मरम्मत से ऐप काम नहीं करेगा। इस मामले में, आपका एकमात्र लक्ष्य संपत्ति/संसाधन को निकालना और ऐप की एक नई प्रति ढूंढना होना चाहिए।
कैसे बताएं कि वास्तव में क्या गलत है
इससे पहले कि आप कोई मरम्मत उपकरण चुनें, विफलता की पहचान करें। Android (या आपका संग्रह टूल) जो त्रुटि संदेश दिखाता है वह आमतौर पर एक सुराग होता है:
| लक्षण आप देख रहे हैं | आमतौर पर इसका क्या मतलब होता है | पहले क्या प्रयास करें |
|---|---|---|
| "पैकेज को पार्स करना" विफल (Android) | ज़िप केंद्रीय निर्देशिका अपठनीय, या प्रकट संस्करण बेमेल | ज़िप हेडर मरम्मत (विधि 1) |
| "पैकेज को पार्स करने में समस्या थी" + APK अपेक्षा से थोड़ा छोटा है | छोटा डाउनलोड: अंतिम कुछ केबी कभी नहीं आए | उसी स्रोत से पुनः डाउनलोड करें; यदि पुनः डाउनलोड अनुपलब्ध है तो ज़िप मरम्मत |
| 7-ज़िप/WinRAR इसे खोलता है लेकिन अलग-अलग फ़ाइलों पर "CRC त्रुटि" की रिपोर्ट करता है | ज़िप के अंदर की व्यक्तिगत फ़ाइल क्षतिग्रस्त है | क्षतिग्रस्त सदस्य से सब कुछ निकालें, फिर देखें कि क्या गायब है के अलावा |
| बिना किसी अतिरिक्त विवरण के "ऐप इंस्टॉल नहीं हुआ"। | अक्सर हस्ताक्षर बेमेल या संरेखण मुद्दा, वास्तविक भ्रष्टाचार नहीं | zipalign + हस्ताक्षर पुनः जांच (विधि 2) |
| java.lang.VerifyError के साथ इंस्टाल करने के तुरंत बाद क्रैश हो जाता है | classes.dex बाइटकोड क्षतिग्रस्त है या संस्करण-असंगत है | मरम्मत द्वारा पुनर्प्राप्त नहीं किया जा सकता. एक साफ़ प्रति पुनः प्राप्त करें. |
एक ठोस वॉक-थ्रू
कल्पना कीजिए कि आपके पास 320 एमबी का APK है जिसका डाउनलोड लगभग 99% बाधित हो गया है। आपका फ़ोन "पैकेज को पार्स करना विफल" कहकर इसे इंस्टॉल करने से इंकार कर देता है। यहां Windows या macOS वर्कस्टेशन पर इस पर हमला करने का तरीका बताया गया है, जिस क्रम में आप वास्तव में चीजों को आजमाएंगे।
चरण 1. पुष्टि करें कि फ़ाइल कम से कम अधिकतर वहाँ है
स्रोत द्वारा विज्ञापित किसी भी चीज़ के विरुद्ध फ़ाइल आकार की जाँच करें। यदि फ़ाइल नाटकीय रूप से छोटी है (मान लीजिए, 320 एमबी के बजाय 220 एमबी), तो डाउनलोड गंभीर रूप से छोटा हो गया था और रैपर की मरम्मत करने का कोई मतलब नहीं है: classes.dex के बड़े हिस्से या संपत्तियां गायब हैं। उस स्थिति में, डाउनलोड पुनः प्रारंभ करें।
चरण 2. ज़िप संरचना का परीक्षण करें
APK वाले फ़ोल्डर में एक टर्मिनल खोलें और macOS या लिनक्स पर चलाएं:
unzip -t broken.apk
उपकरण संग्रह के अंदर प्रत्येक फ़ाइल और किसी भी सीआरसी त्रुटियों की रिपोर्ट करेगा। यदि केवल कुछ ही प्रविष्टियाँ त्रुटिपूर्ण हैं और वे classes*.dex या resources.arsc नहीं हैं, तो आपके पास एक कार्यशील इंस्टाल बनाने का अच्छा मौका है।
चरण 3. केंद्रीय निर्देशिका का पुनर्निर्माण करें
यदि unzip -t स्वयं केंद्रीय निर्देशिका के बारे में शिकायत करता है ("केंद्रीय-निर्देशिका हस्ताक्षर का अंत नहीं मिला", "1 EOCD गायब है"), तो "फिक्स" मोड का उपयोग करें:
zip -FF broken.apk --out fixed.apk
-FF ध्वज zip को स्थानीय फ़ाइल-हेडर हस्ताक्षरों के लिए फ़ाइल को स्कैन करने और निर्देशिका प्रविष्टि-दर-प्रविष्टि को फिर से बनाने के लिए कहता है। आउटपुट, fixed.apk, वह है जिसे आप वास्तव में इंस्टॉल करने का प्रयास करते हैं।
चरण 4. यदि आवश्यक हो तो पुन: संरेखित करें और पुनः हस्ताक्षर करें
किसी भी संरचनात्मक परिवर्तन के बाद, APK का हस्ताक्षर अब मान्य नहीं है, क्योंकि एक बाइट को भी संशोधित करने से v2/v3 हस्ताक्षर ब्लॉक अमान्य हो जाते हैं। यदि आपके पास अपनी स्वयं की हस्ताक्षर कुंजी है (यह आपके स्वयं के निर्माण के लिए ठीक है), संरेखित करें और पुनः हस्ताक्षर करें:
zipalign -v 4 fixed.apk aligned.apk
apksigner sign --ks my.keystore aligned.apk
आपकी अपनी कुंजी के बिना, फ़ाइल को स्थापित करने का एकमात्र तरीका उसी हस्ताक्षर प्रमाणपत्र के साथ मौजूदा इंस्टॉल है, जिसका अर्थ है कि किसी तीसरे पक्ष से मरम्मत किया गया APK मौजूदा प्ले स्टोर इंस्टॉल के शीर्ष पर इंस्टॉल नहीं होगा, क्योंकि हस्ताक्षर श्रृंखला बदल गई है।
जब मरम्मत ग़लत लक्ष्य हो
"फिक्सिंग" क्या कर सकती है और क्या नहीं, इसके बारे में ईमानदार होना उचित है:
- आप उन बाइट्स को पुनर्प्राप्त नहीं कर सकते जो कभी नहीं आए। यदि डाउनलोड छोटा कर दिया गया था, तो कोई हेडर मरम्मत गायब डेटा का पुनर्निर्माण नहीं करेगी। पुनः डाउनलोड करें.
- बिट-रोट स्थायी है. यदि कोई फ़ाइल स्टोरेज पर है जो classes.dex के अंदर कुछ बिट फ़्लिप करती है, तो इंस्टॉल समय पर बाइटकोड सत्यापन चरण इसे अस्वीकार कर देगा, और यह जानने का कोई तरीका नहीं है कि मूल बाइट्स क्या होने चाहिए थे।
- मरम्मत की गई फ़ाइलों में नए हस्ताक्षर हैं। यहां तक कि एक पूरी तरह से तय APK पर भी अब मूल प्रकाशक द्वारा हस्ताक्षर नहीं किया जाता है। यह एक सुविधा है, बग नहीं: यह एक हमलावर को दुर्भावनापूर्ण कोड को एक लोकप्रिय ऐप में डालने और फिर से हस्ताक्षर करने से रोकता है जैसे कि वे मूल प्रकाशक थे।
यदि आपका लक्ष्य केवल एक गेम खेलना था जिसका डाउनलोड 99% पर समाप्त हो गया था, तो कम से कम प्रतिरोध का मार्ग लगभग हमेशा आंशिक फ़ाइल को साफ़ करना, डिस्क स्थान खाली करना और एक विश्वसनीय कनेक्शन से फिर से डाउनलोड करना है। मरम्मत उपकरण तब चमकते हैं जब दोबारा डाउनलोड करना असंभव होता है: पुराने संग्रहीत APK, एक परतदार LAN स्थानांतरण पर प्राप्त फ़ाइलें, या बैकअप जिनका मूल स्रोत चला गया है।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
क्या मैं टूटे हुए APK से आइकन और स्क्रीनशॉट निकाल सकता हूँ?
आमतौर पर हाँ. आइकन फ़ाइलें res/mipmap-* के अंतर्गत रहती हैं और शुरुआत में APK में स्क्रीनशॉट डेटा दुर्लभ है। यहां तक कि जब केंद्रीय निर्देशिका क्षतिग्रस्त हो जाती है, तब भी अलग-अलग फ़ाइल हेडर अक्सर इतने बरकरार रहते हैं कि 7-ज़िप का "अनदेखा त्रुटियों के साथ निकालें" विकल्प अधिकांश छवियों को बाहर खींच लेगा।
क्या मरम्मत किया गया APK किसी इंस्टॉल किए गए ऐप को अपडेट कर देगा?
केवल तभी जब मरम्मत ने मूल हस्ताक्षर को संरक्षित किया हो, जो संरचनात्मक सुधार के बाद आम तौर पर असंभव है। मरम्मत किए गए APK को नए इंस्टॉल के रूप में मानें: पहले पुराने संस्करण को अनइंस्टॉल करें (आप इसका डेटा खो देंगे) या किसी ऐसे डिवाइस पर इंस्टॉल करें जिसमें अभी तक ऐप नहीं है।
क्या कोई ऑनलाइन टूल है जो यह सब करता है?
ब्राउज़र-आधारित उपकरण APK की संरचना को पढ़ सकते हैं और आपको बता सकते हैं कि क्या टूटा हुआ है (हमारा APK जानकारी उपकरण बिल्कुल यही करता है), लेकिन वास्तव में ज़िप को फिर से लिखने और फिर से हस्ताक्षर करने के लिए डेस्कटॉप टूल या सर्वर की आवश्यकता होती है। हम जानबूझकर सर्वर पर री-साइन चरण नहीं चलाते क्योंकि इसका मतलब आपकी फ़ाइल अपलोड करना होगा: इस साइट का गोपनीयता वादा यह है कि आपके ब्राउज़र से कुछ भी नहीं छूटता है।
उन XAPK फ़ाइलों के बारे में क्या जो निकालने में विफल रहती हैं?
XAPK सिर्फ एक ज़िप है, इसलिए वही तकनीकें लागू होती हैं। आंतरिक APK और किसी भी OBB फ़ाइलों को पुनर्प्राप्त करने के लिए उस पर zip -FF चलाएं, फिर आगे बढ़ें जैसे कि आपके पास एक क्षतिग्रस्त APK और एक अलग OBB था।
यदि आपका लक्ष्य किसी असफल डाउनलोड से केवल ग्राफ़िक्स, ध्वनियाँ या OBB डेटा प्राप्त करना है, तो 7-Zip का उपयोग करें। 7-ज़िप Windows एक्सप्लोरर ज़िप टूल की तुलना में अधिक आक्रामक है और अक्सर आपको केवल आंशिक रूप से डाउनलोड की गई फ़ाइलों को निकालने के लिए "त्रुटियों को अनदेखा" करने देगा।
अपने APK को डीप स्कैन करें
यह देखने के लिए कि क्या संरचना वैध है या मेनिफेस्ट अपठनीय है, फ़ाइल को हमारे विश्लेषक पर अपलोड करें।
फ़ाइल स्वास्थ्य का विश्लेषण करेंनिष्कर्ष
एक "पार्सिंग त्रुटि" ओएस द्वारा हार मान लेना है। ऊपर बताए गए टूल का उपयोग करके, आप नियंत्रण वापस ले लेते हैं। हालाँकि आप किसी टूटे हुए ऐप को चलाने के लिए उसे हमेशा "ठीक" नहीं कर सकते हैं, आप लगभग हमेशा डेटा पुनर्प्राप्त करें को अंदर कर सकते हैं। बड़ी फ़ाइलों को प्रबंधित करने के बारे में अधिक युक्तियों के लिए, स्प्लिट APK को मर्ज करना या OBB गेम डेटा निकालना पर हमारी मार्गदर्शिका देखें।