Obfuscators आमतौर पर कक्षाओं, विधियों और फ़ील्ड नामों को उन नामों में बदलते हैं जिनके अर्थ नहीं हैं। इसलिए, यदि आपके पास "ScoreCalculator.computeScore (प्लेयर पी, मैच एम)" है, तो आप "एजेके (एफ एफ, आर आर)" के साथ समाप्त होते हैं। यह जावास्क्रिप्ट के लिए Uglify या क्लोजर कंपाइलर के समान है, सिवाय इसके कि जावास्क्रिप्ट में यह स्रोत की लंबाई को कम करना है।
यह समझना संभव है कि विधि क्या है, यह केवल कठिन है।
असलो, जावा देर से बाध्यकारी (डीएलएल या एसओ फाइलों के रूप में) का उपयोग करता है। तो, कॉल जो आपके कोड के बाहर जाते हैं (जैसे java.util, java.lang आदि .. पैकेज) को obfuscated नहीं किया जा सकता है। साथ ही, यदि आपके कोड को बाहर से कॉल प्राप्त करने की आवश्यकता है (एक सामान्य उदाहरण, बटन पर श्रोता पंजीकृत करें), तो उस कोड को obfuscated नहीं किया जा सकता है। एक डीएलएल के लिए भी होता है, जहां आप स्पष्ट रूप से विधि का नाम देख सकते हैं जिसे डीएलएल के बाहर फॉर्म कहा जाना चाहिए और अन्य डीएलएल को कॉल करना होगा।
हालांकि, एक निश्चित स्रोत कोड और संकलित कोड के बीच मैपिंग जरूरी नहीं है। पुराने सी कंपाइलर एक दिए गए स्रोत निर्देश के लिए एक ही ओप कोड का उत्पादन करते थे, इसलिए डिकंपलर बहुत प्रभावी थे। फिर सी compilers जिसके परिणामस्वरूप सेशन कोड के लिए कई अनुकूलन जोड़ा, और इन अनुकूलन decompiler ज्यादातर अप्रभावी [1]
जावा कभी लागू नहीं (का एक बहुत) संकलन समय पर अनुकूलन, क्योंकि (वहाँ अलग android उपकरणों सहित) विभिन्न प्लेटफार्मों पर चलने के लिए बनाया है, जावा ने चलने वाले डिवाइस के आर्किटेक्चर और हार्डवेयर गुणों के आधार पर रन टाइम पर बाद में गंभीर अनुकूलन लागू करने का निर्णय लिया (यह "हॉटस्पॉट" लगभग [2] है)।
अच्छा obfuscators आमतौर पर बाइटकोड निर्देशों को फिर से व्यवस्थित करते हैं, या कुछ बेकार लोगों को सम्मिलित करते हैं, या कुछ अनुकूलन लागू करते हैं ताकि डीकंपलर को आसानी से स्रोत कोड प्राप्त करने में असमर्थ (या कम सक्षम) बनाया जा सके।
यह तकनीक बेकार है जब लोग बाइटकोड पढ़ सकते हैं, क्योंकि किसी भी संभावित सी obfuscation बेकार है अगर कोई व्यक्ति असेंबलर कोड पढ़ सकता है।
चूंकि कई क्रैकिंग सॉफ़्टवेयर प्रदर्शित करते हैं, सी या अन्य लैगेज के साथ भी रिवर्स इंजीनियरिंग हमेशा संभव है, यहां तक कि फर्मवेयर (आईफोन फर्मवेयर के बारे में सोचें) पर, क्लाइंट का आपका कोड चल रहा है, हमेशा अविश्वसनीय होता है, और हमेशा छेड़छाड़ किया जा सकता है साथ में।
यदि आपके पास बहुत ही महत्वपूर्ण महत्वपूर्ण कोड है, तो कुछ और धन चोरी करने वाला कुछ मूल्य है, तो मैं इसे सर्वर की ओर चलाने के लिए सुझाव दूंगा, या सर्वर सर्वर को किसी भी तरह सत्यापित करूँगा।
हा हा हा! क्या आपने अपने एपीके पर प्रोगार्ड लागू नहीं किया है? अगर जवाब नहीं है, तो यह आपका जवाब है! :) – t0mm13b
मैंने प्रोगुआर्ड का उपयोग किया है और प्रोजेक्ट.प्रोपर्टीज फ़ाइल को रिले से पहले संपादित किया है; मेरे ऐप को आसान बनाना। मुझे जिक्र करना चाहिए कि कक्षा के नाम मेरी मूल नहीं हैं लेकिन सभी विधि नाम मूल प्रतीत होते हैं। अर्थात। मेरे ऐप को उलटना आसान है, क्योंकि केवल क्लास नाम बदल गए हैं। संपादित करें: ऐसा लगता है कि स्थैतिक विधि नाम बदल गए हैं। लेकिन इसे उलटना मुश्किल से रॉकेट विज्ञान है। –
क्या आप अपना proguard.cfg पोस्ट कर सकते हैं? और आपने [उदाहरण] की जांच की है (http://proguard.sourceforge.net/index.html#manual/examples.html) – t0mm13b