APK विश्लेषक
एक Android पैकेज — एक .apk फ़ाइल — डालें और किसी फ़ोन के पास पहुँचने से पहले पढ़ें कि वह अपने बारे में क्या घोषित करता है: उसका पैकेज नाम और संस्करण, जिन SDK स्तरों को वह लक्षित करता है, हर अनुमति जो वह माँगता है, क्या वह डीबगिंग और बैकअप की अनुमति देता है, उसके कौन से घटक अन्य ऐप्स तक पहुँच सकते हैं, और वह किन प्रमाणपत्रों से हस्ताक्षरित है। फ़ाइल आपके डिवाइस को कभी नहीं छोड़ती: यह इस पेज में खोली और पार्स की जाती है, अपलोड नहीं होती, क्योंकि जिस APK पर आपको संदेह है, वही फ़ाइल किसी अजनबी के सर्वर को सौंपने लायक नहीं है।
या फ़ाइल को इस बॉक्स में कहीं भी छोड़ दें। नीचे की हर चीज़ इसी डिवाइस पर, पैकेज से ही पढ़ी जाती है — मैनिफ़ेस्ट, संकलित संसाधन और हस्ताक्षर ब्लॉक।
पैकेज सारांश
अनुमतियाँ
सुरक्षा स्तर Android फ़्रेमवर्क के अपने वर्गीकरण का पालन करते हैं। जिस अनुमति को यह पेज नहीं पहचानता, उसे संदर्भ तालिका में न होने के रूप में ईमानदारी से बताया जाता है — कस्टम, विक्रेता या नई अनुमतियों का नाम स्पष्ट रूप से दिया जाता है, कभी अनुमान नहीं लगाया जाता।
एप्लिकेशन फ़्लैग
घटक
हस्ताक्षर प्रमाणपत्र
टिप्पणियाँ
कोई APK कोड की एक पंक्ति चलाने से पहले क्या घोषित करता है
APK एक ZIP अभिलेख है जिसके अपने मत हैं। Android उसके किसी भी कोड को चलाने से पहले, सिस्टम उसके अंदर मौजूद बाइनरी AndroidManifest.xml को पढ़ता है, और वह एक फ़ाइल आश्चर्यजनक रूप से पूर्ण इरादे की घोषणा है। वह पैकेज का नाम देती है — वह पहचान जिसके विरुद्ध अपडेट मिलाए जाते हैं — और उसका संस्करण। वह सबसे पुराना Android रिलीज़ बताती है जिसका समर्थन करने का ऐप दावा करता है, और वह रिलीज़ जिसके व्यवहार नियमों के अनुसार वह बनाया गया है; इसीलिए लक्ष्य SDK मायने रखता है: कम लक्ष्य पुराने, ढीले अनुमति व्यवहार को चुपचाप ज़िंदा रखता है। वह हर अनुमति सूचीबद्ध करती है जो ऐप कभी उपयोग कर पाएगा, क्योंकि जो अनुमति घोषित नहीं है वह बाद में दी नहीं जा सकती। वह बताती है कि बिल्ड डीबग करने योग्य है या नहीं — एक फ़्लैग जो किसी रिलीज़ में कभी नहीं बचना चाहिए — और क्या उसका डेटा डिवाइस के बैकअप में जा सकता है। और वह ऐप के घटकों की सूची बनाती है: गतिविधियाँ, सेवाएँ, रिसीवर और प्रदाता, हर एक के साथ एक निर्यात स्थिति जो तय करती है कि डिवाइस के अन्य ऐप उसे बुला सकते हैं या नहीं। बिना अनुमति जाँच के निर्यात किया गया घटक Android की क्लासिक आक्रमण सतह है, और आप उसे यहाँ, मैनिफ़ेस्ट में, कुछ भी इंस्टॉल किए बिना देख सकते हैं।
कहानी का दूसरा आधा हिस्सा हस्ताक्षर है। Android किसी मौजूदा ऐप के ऊपर अपडेट तभी इंस्टॉल करता है जब दोनों एक ही कुंजी से हस्ताक्षरित हों, इसलिए हस्ताक्षरकर्ता प्रमाणपत्र का फ़िंगरप्रिंट ऐप की पहचान की निरंतरता है: वही पैकेज नाम अगर किसी दूसरी कुंजी से हस्ताक्षरित हो, तो वह परिचित लेबल पहने कोई दूसरा ऐप है। यह पेज हस्ताक्षर की दोनों पीढ़ियाँ पढ़ता है — META-INF में Jar-शैली के प्रमाणपत्र और APK Signature Scheme v2/v3 ब्लॉक — और हर हस्ताक्षरकर्ता का विषय, जारीकर्ता, वैधता अवधि और SHA-256 फ़िंगरप्रिंट दिखाता है, जिसकी तुलना प्रमाणपत्र और कुंजी मिलानकर्ता से आपके पास मौजूद कुंजी या CSR से की जा सकती है। साथी मार्गदर्शिका, इंस्टॉल करने से पहले APK के अंदर क्या है, पूरे निरीक्षण को एक जाँच सूची के रूप में चलती है। दो ईमानदार सीमाएँ: यह पेज घोषणाएँ पढ़ता है, व्यवहार नहीं — यह कोड को डीकंपाइल नहीं करता, ऐप को चलाता नहीं, और यह नहीं आँकता कि वह मैलवेयर है या नहीं — और जहाँ मैनिफ़ेस्ट स्वयं अस्पष्ट है (intent-filter वाले घटक पर छोड़ा गया exported फ़्लैग, ऐसा लेबल जिसे संकलित संसाधन हल नहीं करते), वहाँ यह अंतर को अनुमान से भरने के बजाय यही कहता है। ऐप चलने के बाद नेटवर्क पर क्या करता है, उसके लिए PCAP विश्लेषक कैप्चर पढ़ता है।
अक्सर पूछे जाने वाले प्रश्न
मेरी APK फ़ाइल कहाँ जाती है?
कहीं नहीं। फ़ाइल इस पेज में, आपके डिवाइस पर खोली और पार्स की जाती है, और कुछ भी अपलोड, संचारित या संग्रहीत नहीं होता — किसी फ़ाइल का विश्लेषण कोई नेटवर्क अनुरोध नहीं करता। यहाँ यह अधिकांश टूल्स की तुलना में ज़्यादा मायने रखता है: जिन APK की सबसे ज़्यादा जाँच करनी होती है, वे वही होते हैं जिन पर पहले से संदेह है — किसी फ़ोरम से मिली फ़ाइल, सीधा डाउनलोड, कोई स्टोर सूची जो ग़लत लगती है — और किसी संदिग्ध बाइनरी को दूरस्थ स्कैनिंग सेवा को भेजना स्वयं एक जोखिम है। पेज लोड होने के बाद यह ऑफ़लाइन भी काम करता है।
APK इंस्टॉल करने से पहले मुझे क्या जाँचना चाहिए?
चार चीज़ें, सभी ऊपर दिख रही हैं। पैकेज नाम: क्या यह प्रकाशक का असली नेमस्पेस है, या एक अक्षर बदला हुआ हमशक्ल? अनुमतियाँ: क्या एक टॉर्च ऐप को सचमुच आपके संपर्क, कॉल लॉग और सटीक स्थान चाहिए — और क्या कोई हस्ताक्षर-स्तरीय या विशेष-स्तरीय अनुरोध नियमित अनुरोधों के बीच छिपा है? निर्यात किए गए घटक: हर गतिविधि, सेवा, रिसीवर या प्रदाता जिसे अन्य ऐप छू सकते हैं, वह सतह है जिसे आप स्वीकार कर रहे हैं। और हस्ताक्षरकर्ता: अपडेट में स्थापित ऐप जैसा ही हस्ताक्षर प्रमाणपत्र होना चाहिए, इसलिए कहीं से भी "नया संस्करण" साइडलोड करने से पहले SHA-256 फ़िंगरप्रिंट की तुलना उस प्रति से करें जिस पर आप भरोसा करते हैं।
क्या यह बता सकता है कि कोई ऐप मैलवेयर है?
नहीं, और जो भी टूल केवल मैनिफ़ेस्ट से इसका वादा करे, वह बढ़ा-चढ़ाकर बेच रहा है। यह पेज वह पढ़ता है जो पैकेज घोषित करता है — पहचान, अनुमतियाँ, घटक, फ़्लैग और हस्ताक्षर — जो लापरवाहों और जालसाज़ों को पकड़ने के लिए काफ़ी है: ग़लत हस्ताक्षरकर्ता वाला क्लोन, SMS पहुँच माँगती टॉर्च, डीबग योग्य रह गई रिलीज़ बिल्ड। कोड वास्तव में क्या करता है, इसका निर्णय डीकंपाइल, गतिशील विश्लेषण, या किसी प्रतिष्ठित स्कैनर के बाइनरी पर दिए निर्णय से होता है। यहाँ साफ़ परिणाम को "घोषित कुछ भी ग़लत नहीं लगा" समझें, कभी सुरक्षा प्रमाणपत्र नहीं।
कुछ अनुमतियाँ "संदर्भ तालिका में नहीं" क्यों कहती हैं?
क्योंकि ईमानदारी एक विश्वसनीय अनुमान से बेहतर है। दिखाए गए सुरक्षा स्तर — सामान्य, ख़तरनाक, हस्ताक्षर, विशेष — जाने-माने android.* अनुमतियों और फ़्रेमवर्क द्वारा हर एक को दिए गए स्तर की एक सावधानी से बनाई तालिका से आते हैं। विक्रेता अपनी अनुमतियाँ जोड़ते हैं, निर्माता और जोड़ते हैं, और नए Android रिलीज़ नए नाम लाते हैं; उनमें से कोई भी तालिका में नहीं है, इसलिए पेज यह स्पष्ट रूप से कहता है। अज्ञात स्तर का मतलब यह नहीं कि अनुमति हानिरहित या ख़तरनाक है — इसका मतलब है कि यह संदर्भ उसे कवर नहीं करता, और अनुमति का अपना नाम और नेमस्पेस ही जाँच शुरू करने की जगह है।
"निर्यात: निर्दिष्ट नहीं" का क्या मतलब है?
इसका मतलब है कि मैनिफ़ेस्ट सचमुच यह नहीं कहता। जब कोई घटक intent-filter घोषित करता है लेकिन android:exported छोड़ देता है, तो प्रभावी उत्तर ऐतिहासिक रूप से ऐप के लक्ष्य SDK और Android संस्करण पर निर्भर रहा है — पुराने नियम ऐसे घटकों को डिफ़ॉल्ट रूप से निर्यात करते थे, नए नियम तब तक ऐप को इंस्टॉल करने से इनकार करते हैं जब तक डेवलपर तय न कर ले। जो रीडर आत्मविश्वास से "हाँ" या "नहीं" छाप दे, वह एक ऐसा तथ्य गढ़ रहा होगा जो फ़ाइल में है ही नहीं, इसलिए यह पेज छूट को ही रिपोर्ट करता है। आपके अपने बिल्ड में यह वह पंक्ति है जिसे स्पष्ट रूप से ठीक करना सबसे ज़्यादा उचित है।