एंड्रॉइड डेवलपर्स अपने ऐप को IAP हैकर्स से कैसे बचा सकते हैं



समस्याओं को खत्म करने के लिए हमारे साधन का प्रयास करें

यह गाइड एंड्रॉइड ऐप डेवलपर्स के लिए है जो आईएपी से आय अर्जित करते हैं, और हैकिंग टूल के माध्यम से खुद को हैकर्स और धोखाधड़ी की खरीद से बचाना चाहते हैं। कई प्रसिद्ध आईएपी हैकिंग टूल हैं, जिन्हें मैं यहां सूचीबद्ध नहीं करूंगा, लेकिन मूल रूप से ये उपकरण उपयोगकर्ता को मुफ्त आईएपी का आनंद लेने की अनुमति देने के लिए आपके ऐप पर झूठी खरीद रसीदें भेजते हैं। यह मासिक सदस्यता से लेकर खेल टोकन तक कुछ भी हो सकता है।





जबकि इन हैकिंग टूल के नए संस्करण हमेशा जारी किए जाते हैं, और उनके नवीनतम अपडेट और तरीकों के बारे में जागरूक रहने में परिश्रम बहुत महत्वपूर्ण है, कुछ चीजें हैं जो आप अपने ऐप IAPs को चोरी होने से बचा सकते हैं। सबसे विशेष रूप से, आपको सर्वर-साइड IAP सत्यापन के कई तरीकों को सक्षम करने की आवश्यकता है, जिसे मैं नीचे विस्तार से बताऊंगा।



यह गाइड newbies के लिए इरादा नहीं है, लेकिन अनुभवी ऐप डेवलपर्स जो इस गाइड में विभिन्न लिंगो को समझेंगे।

इस उद्देश्य के लिए विशेष रूप से Git रेपो प्लग-इन का उपयोग करना:

PiracyChecker

अपने प्रोजेक्ट में रिपॉजिटरी को जोड़ें build.gradle :



रिपॉजिटरी {

मावेन {

url 'https://jitpack.io'

}

}

और लाइब्रेरी को अपने मॉड्यूल में जोड़ें build.gradle :

निर्भरताएँ {

संकलन ant com.github.javiersantos: पायरेसी चेकर: 1.1 '

}

सिफारिशों

  • हमेशा अपने प्रोडक्शन रिलीज में ProGuard को सक्षम करें।
  • जल्द से जल्द वैध लाइसेंस की जांच करने के लिए पायरेसीकैचर को आपके ऑनक्रिट विधि में शामिल किया जाना चाहिए।
  • लाइसेंस मान्य नहीं होने पर डायलॉग के बजाय एक नई गतिविधि दिखाने की सिफारिश की गई है। इस तरह आप सुनिश्चित करते हैं कि ऐप की मुख्य गतिविधि समाप्त हो गई है। देख ' एक संवाद या एक नई गतिविधि में परिणाम प्रदर्शित करें '।

Google Play लाइसेंसिंग (LVL) सत्यापित करें

Google Play एक लाइसेंसिंग सेवा प्रदान करता है, जो आपको Google Play पर प्रकाशित होने वाले अनुप्रयोगों के लिए लाइसेंसिंग नीतियों को लागू करने देता है। Google Play लाइसेंसिंग के साथ, आपका एप्लिकेशन Google Play को वर्तमान उपयोगकर्ता के लिए लाइसेंसिंग स्थिति प्राप्त करने के लिए क्वेरी कर सकता है।

कोई भी एप्लिकेशन जिसे आप Google Play के माध्यम से प्रकाशित करते हैं, Google Play लाइसेंसिंग सेवा का उपयोग कर सकते हैं। किसी विशेष खाते या पंजीकरण की आवश्यकता नहीं है।

नया पायरेसीकैचर (यह)

.enableGooglePlayLicensing ( 'BASE_64_LICENSE_KEY')

...

।शुरू();

अपनी BASE64 लाइसेंस कुंजी को पुनः प्राप्त करने के लिए आपके ऐप को अपलोड करना होगा Google Play डेवलपर कंसोल । फिर अपने ऐप -> सर्विसेज और एपीआई पर पहुंचें।

Google Play लाइसेंस का उपयोग करते समय आपकी सेवा को चलने के कई उदाहरणों से बचने के लिए अपनी गतिविधि के onDestroy () विधि में .destroy () को कॉल करना चाहिए।

अपने ऐप के हस्ताक्षर प्रमाणपत्र (हस्ताक्षर) को सत्यापित करें

एप्लिकेशन को उपयोगकर्ता उपकरणों पर इंस्टॉल किए जाने से पहले डेवलपर्स को हमेशा अपने निजी कुंजी / प्रमाण पत्र (एक .Stystore फ़ाइल में निहित) के साथ आवेदन पर हस्ताक्षर करना चाहिए। हस्ताक्षर प्रमाणपत्र को पूरे जीवन भर ऐप के अनुरूप होना चाहिए, और आम तौर पर 25 वर्ष की समाप्ति तिथि होनी चाहिए।

यदि किसी भी तरह से .apk को बदल दिया जाता है, तो एप्लिकेशन हस्ताक्षर को तोड़ दिया जाएगा - अहस्ताक्षरित एप्लिकेशन को आम तौर पर स्थापित नहीं किया जा सकता है। हम उदाहरण के लिए, बिना भुगतान के पूर्ण एप्लिकेशन सुविधाओं को सक्षम करने के लिए लाइसेंस-चेकिंग कोड को हटाने वाले एक हमलावर की कल्पना कर सकते हैं। संवेदनशील उपयोगकर्ता डेटा को काटने के लिए वैध ऐप में मैलवेयर को शामिल करने के लिए एक और खतरनाक उदाहरण .apk को बदलना होगा। परिवर्तित किए गए .apk को स्थापित करने के लिए, हमलावर को इसे त्याग देना चाहिए।

नया पायरेसीकैचर (यह)

.enableSigningCertificate ('478yYKAKAQF + KST8y4ATKvHkYibo =') // प्रोडक्शन संस्करण के लिए मूल एपीके हस्ताक्षर

...

।शुरू();

सावधान रहे!! आपका ऐप हस्ताक्षर PasionCheckerUtils विधि का उपयोग करके पुनर्प्राप्त किया जा सकता है। सुनिश्चित करें कि आपने अपने प्रोडक्शन कीस्ट (डीबग एक का उपयोग नहीं कर रहे हैं) का उपयोग करके अपने एपीके पर हस्ताक्षर किए हैं और उस संस्करण को स्थापित किया है जिसे आप वितरित करने की योजना बनाते हैं। फिर कंसोल पर इस विधि द्वारा लौटाए गए हस्ताक्षर को कॉपी करें और .enableSigningCertificate ('your_APK_SIGNATURE') में पेस्ट करें

// यह विधि कंसोल में आपके एप्लिकेशन हस्ताक्षर को प्रिंट करेगी

Log.e ('हस्ताक्षर', PasionCheckerUtils.getAPKSignature (यह));

इंस्टॉलर को सत्यापित करें

यदि आप केवल किसी विशेष स्टोर पर ऐप को वितरित करने की योजना बनाते हैं तो यह तकनीक किसी अन्य स्टोर का उपयोग करके ऐप को स्थापित करने से रोक देगी।

समर्थित स्टोर: Google Play, अमेज़न ऐप स्टोर और सैमसंग गैलेक्सी ऐप।

नया पायरेसीकैचर (यह)

.enableInstallerId (InstallerID.GOOGLE_PLAY)

.enableInstallerId (InstallerID.AMAZON_APP_STORE)

.enableInstallerId (InstallerID.GALAXY_APPS)

...

।शुरू();

सावधान रहे!! यह वास्तव में एक प्रतिबंधात्मक तकनीक है क्योंकि यह आपके ऐप को किसी अन्य बाजार का उपयोग करके इंस्टॉल किया जा रहा है या डिवाइस पर सीधे .apk इंस्टॉल कर देगा। यह अधिकांश मामलों के लिए अनुशंसित नहीं है।

समुद्री डाकू क्षुधा के उपयोग की जाँच करें

यदि आप जांचना चाहते हैं कि उपयोगकर्ता के पास पायरेट ऐप्स इंस्टॉल हैं, तो आप इस कोड का उपयोग कर सकते हैं।

यह जाँच करेगा: लकी पैचर, यूरेट पैचर, फ्रीडम और क्रीक।

नया पायरेसीकैचर (यह)

.enableUnauthorizedAppsCheck ()

...

।शुरू();

जब आप इस समुद्री डाकू ऐप को अनइंस्टॉल कर चुके हों तब भी आप ऐप को ब्लॉक कर सकते हैं। यह एप्लिकेशन को पैच होने से रोकता है और फिर अपने ऐप का उपयोग जारी रखने के लिए समुद्री डाकू ऐप को अनइंस्टॉल कर देता है। लाइब्रेरी को यह जानने के लिए साझा किया जाएगा कि कब समुद्री डाकू ऐप का पता चला है।

इसे करने के दो तरीके हैं:

SharedPreferences और वरीयता का नाम परिभाषित करें जहां आप परिणाम को बचाना चाहते हैं।

नया पायरेसीकैचर (यह)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (प्राथमिकताएँ, 'app_unauthorized') // बदलें 'app_unauthorized' अपने स्वयं के मूल्य के साथ

...

।शुरू();

SharedPreferences नाम और वरीयता का नाम निर्धारित करें जहां आप परिणाम सहेजना चाहते हैं।

नया पायरेसीकैचर (यह)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled ('licence_preferences', 'app_unauthorized') // अपने स्वयं के मूल्य के साथ 'lic_preferences' और 'app_unauthorized' बदलें।

...

।शुरू();

तृतीय-पक्ष स्टोर एप्लिकेशन का उपयोग सत्यापित करें

यदि आप जांचना चाहते हैं कि क्या उपयोगकर्ता के पास थर्ड-पार्टी स्टोर ऐप इंस्टॉल हैं, तो आप इस कोड का उपयोग कर सकते हैं।

यह के लिए जाँच करेगा: Aptoide, BlackMart, Mobogenie, 1Mobile, GetApk, GetJar, SlideMe और ACMarket।

नया पायरेसीकैचर (यह)

.enableStoresCheck ()

...

।शुरू();

सत्यापित करें कि ऐप एक डीबग बिल्ड है

यदि आपका ऐप विकास प्रक्रिया के बाहर एक एमुलेटर पर चल रहा है, तो यह संकेत देता है कि आपके अलावा कोई अन्य व्यक्ति ऐप का विश्लेषण करने की कोशिश कर रहा है।

नया पायरेसीकैचर (यह)

.enableDebugCheck ()

...

।शुरू();

सत्यापित करें कि ऐप किसी एमुलेटर में चलाया जा रहा है या नहीं

विकास के बाहर, यह संभव नहीं है कि आपका ऐप किसी एमुलेटर पर चलना चाहिए, और डिबग करने योग्य सक्षम के साथ ऐप जारी करना हतोत्साहित करता है क्योंकि यह कनेक्टेड कंप्यूटरों को एंड्रॉइड डीबग ब्रिज के माध्यम से ऐप तक पहुंचने और डीबग करने की अनुमति देता है।

बूलियन डीप = गलत;

नया पायरेसीकैचर (यह)

.enableEmulatorCheck (गहरी)

...

।शुरू();

ध्यान दें: डिवाइस को एमुलेटर है या नहीं यह पता लगाने के लिए लाइब्रेरी के साथ गहरी बूलियन अतिरिक्त जांच करते हैं। यह कुछ अजीब दुर्घटनाओं का कारण बन सकता है, इसलिए इसका उपयोग करते समय बुद्धिमान रहें।

SharedPreferences में लाइसेंस चेक के परिणाम को सहेजें

लाइसेंस चेक के परिणाम को सहेजना कई बार .start () के बिना लाइसेंस की स्थिति की जांच करने के लिए उपयोगी है।

इसे करने के दो तरीके हैं:

SharedPreferences और वरीयता का नाम परिभाषित करें जहां आप परिणाम को बचाना चाहते हैं।

नया पायरेसीकैचर (यह)

.saveResultToSaredPreferences (प्राथमिकताएँ, 'valid_license') // अपने मूल्य पर 'valid_license' बदलें

...

।शुरू();

SharedPreferences नाम और वरीयता का नाम निर्धारित करें जहां आप परिणाम सहेजना चाहते हैं।

नया पायरेसीकैचर (यह)

.SaveResultToSaredPreferences ('lic__preferences', 'valid_license') // 'अपने मान के साथ' lic_preferences और 'valid_license' बदलें।

...

।शुरू();

अनुकूलन

एक संवाद या एक नई गतिविधि में परिणाम प्रदर्शित करें

लाइसेंस मान्य नहीं होने पर डायलॉग के बजाय एक नई गतिविधि दिखाने की सिफारिश की गई है। इस तरह आप सुनिश्चित करते हैं कि ऐप की मुख्य गतिविधि समाप्त हो गई है।

डिफ़ॉल्ट रूप से एक गैर-रद्द करने योग्य डायलॉग प्रदर्शित किया जाएगा।

नया पायरेसीकैचर (यह)

.display (Display.ACTIVITY)

...

।शुरू();

डिफ़ॉल्ट रूप से, प्रदर्शित गतिविधि लाइब्रेरी रंगों का उपयोग करेगी। कस्टम प्राथमिक और प्राथमिक गहरे रंग को लागू करने के लिए, और यह परिभाषित करने के लिए कि क्या गतिविधि को सामान्य या हल्का स्थिति पट्टी दिखाना चाहिए, उपयोग करें:

.WithActivityColors (R.color.colorPrimary, R.color.colorPrimaryDark, withLightStatusBar)

आप इस गतिविधि सामग्री के लिए एक कस्टम लेआउट xml को भी परिभाषित कर सकते हैं,

.withActivityLayout (R.layout.my_custom_layout)

कस्टम कॉलबैक का उपयोग करना

बिल्डर को कॉलबैक जोड़ने से आप यह अनुकूलित कर सकते हैं कि जब लाइसेंस की जाँच हो गई है और उपयोगकर्ता को ऐप का उपयोग करने की अनुमति नहीं है तो लाइसेंस चेक त्रुटियों का प्रबंधन क्या होगा। इस विधि का उपयोग करते समय ध्यान रखें आपको अनधिकृत उपयोगकर्ताओं से ऐप को अवरुद्ध करने के बारे में पता होना चाहिए

डिफ़ॉल्ट रूप से, लाइब्रेरी गैर-रद्द करने योग्य संवाद प्रदर्शित करेगी यदि उपयोगकर्ता को ऐप का उपयोग करने की अनुमति नहीं है, अन्यथा कुछ भी नहीं होगा।

बिल्डर का उपयोग करें और निम्नलिखित जोड़ें:

.callback (नया पाइरेसीकैचरलबैक () {

@Override

सार्वजनिक शून्य अनुमति () {

// कुछ ऐसा करें जब उपयोगकर्ता को ऐप का उपयोग करने की अनुमति दी जाए

}

@Override

public void NOTAllow (@NonNull PasionCheckerError त्रुटि, @ अनुपलब्ध समुद्री डाकू ऐप) {

// आप या तो कुछ विशिष्ट कर सकते हैं जब उपयोगकर्ता को एप्लिकेशन का उपयोग करने की अनुमति नहीं है

// या त्रुटि को प्रबंधित करें, 'त्रुटि' पैरामीटर का उपयोग करते हुए, अपने आप ({@link PheckCheckerError} पर त्रुटियों की जांच करें)।

// इसके अलावा, यदि आप समुद्री डाकू एप्लिकेशन और / या तीसरे पक्ष के स्टोर के चेक को सक्षम करते हैं, तो ’ऐप’ परम

// डिवाइस पर पता चला है कि app है। अनुप्रयोग शून्य हो सकता है, और जब अशक्त हो सकता है, तो इसका मतलब है कि कोई समुद्री डाकू ऐप या स्टोर नहीं मिला,

// या आपने उन ऐप्स के लिए चेक को अक्षम कर दिया है।

// इससे आप उपयोगकर्ताओं को लाइसेंस अमान्य होने के संभावित कारणों का पता चल सकता है।

}

@Override

सार्वजनिक शून्य onError (@NonNull PasionCheckerError त्रुटि) {

// इस पद्धति को लागू करने की आवश्यकता नहीं है, लेकिन इसे…

// लाइसेंस की जाँच करते समय त्रुटि होने पर आप या तो कुछ विशिष्ट कर सकते हैं,

// या त्रुटि को प्रबंधित करें, 'त्रुटि' पैरामीटर का उपयोग करते हुए, अपने आप ({@link PheckCheckerError} पर त्रुटियों की जांच करें)।

}

})

6 मिनट पढ़े