यह यहां बहुत कुछ आता है :) आपके द्वारा उद्धृत अनुच्छेद के पीछे विचार यह है कि इन-ऐप बिलिंग सुरक्षित होने के लिए, आपको लेनदेन हस्ताक्षर सत्यापित करने की आवश्यकता है। वे आपके डेवलपर खाते से जुड़े एक निजी कुंजी के साथ हस्ताक्षरित हैं। कुंजी Google के सर्वर पर रहती है, इसलिए यह मानना सुरक्षित है कि कोई भी इसके साथ डेटा पर हस्ताक्षर नहीं कर सकता है। इसे सत्यापित करने के लिए आपको अपनी सार्वजनिक कुंजी की आवश्यकता है, जिसे आप डेवलपर कंसोल से कॉपी कर सकते हैं। अगर किसी ने इसे आपके ऐप में बदल दिया है, तो वे इसे अनधिकृत स्रोतों से इन-ऐप बिलिंग लेन-देन स्वीकार करने के लिए मूर्ख बना सकते हैं, क्योंकि यदि वे सार्वजनिक कुंजी लगाते हैं, तो वे शायद इसी निजी कुंजी को भी नियंत्रित कर सकते हैं। अभ्यास में हालांकि, isLicensed()
, hasItem()
या आपके जैसी समान विधियों के लिए हमेशा सही होने के लिए सही जगहों पर अपने कोड को संशोधित करना कहीं अधिक आसान है और कोई भी ऐसा नहीं करता है।
कुंजी की रक्षा करने का सबसे अच्छा तरीका है, निश्चित रूप से, आपके ऐप में कुंजी नहीं है। अपने सर्वर पर सभी लेनदेन सत्यापन तर्क को ले जाएं, और उससे कनेक्ट करने के लिए HTTPS का उपयोग करें। यह सुनिश्चित करने के लिए कि आप अपने सर्वर से बात कर रहे हैं, प्रमाण पत्र श्रृंखला को उचित रूप से मान्य करें। अन्यथा, कोई DNS के साथ गड़बड़ कर सकता है और अपने ऐप को अपने सर्वर से कनेक्ट करने के लिए मूर्ख बना सकता है। आईओएस खरीद के खिलाफ एक समान हमले की घोषणा कुछ हफ्ते पहले की गई थी।
अगली सबसे अच्छी बात किसी भी तरह से कुंजी को खराब करना है, और इसे आपके ऐप में शामिल करना है।इसका लाभ यह है कि आपको किसी सर्वर की आवश्यकता नहीं है, लेकिन नुकसान यह है कि यदि कोई पर्याप्त रूप से निर्धारित होता है तो वे इसे समझ लेंगे, क्योंकि वे हमेशा आपके ऐप के बाइट कोड को उलट सकते हैं। तो आपकी सबसे अच्छी शर्त यह है कि ऐसा करने के लिए अपने मूल तरीके से आना जो सार्वजनिक मंचों पर दिखाई नहीं दे रहा है :) इसे थोड़ा कठिन बनाने के लिए, आप मूल कोड में सत्यापन भाग को कार्यान्वित कर सकते हैं, जो कठिन है (लेकिन नहीं असंभव) विश्लेषण करने के लिए। फिर भी, जैसा ऊपर बताया गया है, सही जगहों पर बाइट कोड पैच करना सार्वजनिक कुंजी को बदलने की कोशिश करने से कहीं अधिक आसान है, इसलिए यही अधिकांश क्रैकर करेंगे।
स्रोत
2012-08-01 09:16:47
आपका क्या मतलब है "अभ्यास में हालांकि, सही जगहों पर अपने कोड को आसानी से संशोधित करना कहीं आसान है, हमेशा के लिए सत्य लौटाएं(), हैइटम() या आपके पास समान तरीके हो सकते हैं और कोई भी ऐसा नहीं करता है। " वह वाक्य पूरी तरह से समझ में नहीं आता है। कृपया स्पष्ट करें। – Stunner
इसका मतलब है कि ऐप को पैच करना और किसी भी लाइसेंसिंग चेक को सीधे अक्षम करना आसान है, फिर कुंजी और मैस को प्रतिस्थापित करने का प्रयास करें हस्ताक्षर सत्यापन को बेवकूफ बनाने का प्रयास करें। –
~ "** शायद संबंधित निजी कुंजी ** को भी नियंत्रित करें"। लेकिन इन-ऐप बिलिंग अनुरोध डिवाइस पर Play Store एपीके के माध्यम से जाते हैं। तो कोई उस तर्क को कैसे नियंत्रित या कुशलतापूर्वक इस्तेमाल करेगा ?? –