2011-08-25 13 views
5

मैं एक प्रोजेक्ट में काम कर रहा हूं जहां हमें .jar फ़ाइल एन्क्रिप्ट करने की आवश्यकता है ताकि कोई भी jcl फ़ाइल के अंदर .class फ़ाइलों तक पहुंच न सके .... क्या कोई जावा कोडिंग है जो .jar फ़ाइल को एन्क्रिप्ट करने में मेरी मदद कर सकता है?एक .jar फ़ाइल को एन्क्रिप्ट करने के लिए कैसे करें

उत्तर

13

भले ही आप जार फ़ाइल को एन्क्रिप्ट करते हैं, तो JVM इसे चलाने में सक्षम होने से पहले इसे डिक्रिप्ट किया जाना चाहिए, इसलिए आपको जेवीएम में डिक्रिप्ट और लोड करने वाली कक्षाओं वाली एक और जार फ़ाइल की आवश्यकता होगी।

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

हो सकता है कि आप एक ओबफ्यूसेटर का उपयोग करके अपने कोड की सुरक्षा बढ़ा सकें, लेकिन अंततः यह आपकी कक्षा फ़ाइलों को अपघटन से बचाएगा (इसे कठिन बनाये लेकिन असंभव नहीं), इस्तेमाल होने से नहीं।

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

हालांकि कृपया ध्यान दें कि इससे कोई फर्क नहीं पड़ता कि आप इसमें कितनी सुरक्षा डालते हैं, क्योंकि क्लाइंट कंप्यूटर इसे निष्पादित करने में सक्षम होना चाहिए, यह इसे पढ़ने में सक्षम होना चाहिए, इसलिए कोई फर्क नहीं पड़ता कि आपका कोड किस प्रकार सामने आएगा, आप केवल इसे कठिन बना सकता है।

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

+0

असल में मैं .class फ़ाइल को .jar फ़ाइल के किनारे एक्सेस से सुरक्षित रखना चाहता हूं, क्या आपको ऐसा करने के लिए वैसे भी मिला है? –

+0

एलेक्सआर सुझाव एक कस्टम क्लासलोडर का उपयोग करना है जो जार फ़ाइल पर उड़ान भरने के लिए डिक्रिप्ट करेगा, जो व्यवहार्य और कम या ज्यादा आप पूछ रहे थे, लेकिन ध्यान रखें कि जेएडी स्थापित किए गए किसी भी औसत-कुशल प्रोग्रामर सक्षम होंगे अपने कस्टम क्लासलोडर को इंजीनियर करने और फिर भी कक्षा तक पहुंचने के लिए। मैंने एक और समाधान के साथ एक पैराग्राफ जोड़ा, लेकिन यह काफी असामान्य है। –

1

नहीं। चूंकि आपके प्रोग्राम को कोड चलाने में सक्षम होना आवश्यक है, वैसे भी यह व्यर्थ होगा।

आप अपने कोड को खराब कर सकते हैं, हालांकि .class फ़ाइलों को कम करने के परिणामस्वरूप कम पठनीय कोड (अर्थहीन परिवर्तनीय/कक्षा नाम आदि) परिणामस्वरूप।

1

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

+0

हालांकि यह एक दृष्टिकोण है जो कुछ लोग उपयोग करते हैं, फिर भी कस्टम क्लासलोडर को अपनाने और सुरक्षा को तोड़ने की संभावना हमेशा होती है। जैसे आप डिक्रिप्ट कोड पढ़ सकते हैं, आप इसे डिक्रिप्ट के रूप में लिख सकते हैं। :) – carlspring

0

यदि आप जार के अंदर कक्षा फ़ाइलों तक पहुंच प्रदान नहीं करना चाहते हैं, तो आपको आवेदन के साथ अपने जार की आपूर्ति क्यों करनी चाहिए? ऐसा लगता है कि आपका प्रश्न वैचारिक रूप से गलत है ...

यदि आपको कक्षाओं को लोड करने का कुछ कस्टम तरीका चाहिए, तो कस्टम क्लासलोडर का उपयोग करने पर विचार करें।

+0

किस एप्लिकेशन के साथ मैं .jar फ़ाइल को सहेजने के लिए .class फ़ाइलों को सहेजने के लिए .jar फ़ाइल को सहेजने के लिए अपनी .jar फ़ाइल की आपूर्ति कर सकता हूं ?? –

3

मुझे लगता है कि आप इस तथ्य से अवगत हैं कि कोई भी कुशल जावा कोडर आपके द्वारा उपयोग किए जाने वाले जावा टूल को रिवर्स-इंजीनियर कर सकता है (या लिख ​​सकता है) और अभी भी ऐप के जार डीकोड कर सकता है? कस्टम क्लासलोडर्स को भी लिखना जो आपके "एन्क्रिप्टेड" कोड को पढ़ा जा सकता है और इसे बाईपास करने के लिए एक उपकरण लिखा जा सकता है।

यहां तक ​​कि obfuscation और बाइटकोड संशोधन और कस्टम क्लासलोडर के साथ, जावा हैक करने योग्य/अपघटन योग्य है और स्रोत लगभग हमेशा कुछ पठनीय राज्य में लाया जा सकता है।

3

आप जार फ़ाइल को एन्क्रिप्ट नहीं करना चाहते हैं, एन्क्रिप्ट नहीं करना चाहते हैं।

जावा में ऐसा करने के लिए एक लोकप्रिय विकल्प ProGuard है।

-1

मैं jCrypt पसंद करता हूं! यह एक साधारण उपकरण है जहां आप कक्षाओं (और ressources)

0

पर क्रिप्ट कर सकते हैं यदि आप जार में पैकेजिंग कर रहे हैं -> बस इसे jarname.ABCD या किसी भी भ्रामक एक्सटेंशन का नाम दें या एक्सटेंशन को भी हटाएं, और तदनुसार निर्दिष्ट करें आपके आवेदन में जार नाम।

0

आवेदन शुरू होने पर पासवर्ड या लाइसेंस जांच दें। उचित प्रमाणीकरण के साथ, केवल तभी उपयोगकर्ता आवेदन को चलाने में सक्षम होंगे।

पासवर्ड जांच के लिए, आपको निजी-सार्वजनिक कुंजी अवधारणाएं उत्पन्न करना चाहिए। लाइसेंस के लिए, कुछ स्थापित सॉफ़्टवेयर या संलग्न हार्डवेयर का उपयोग पहुंच प्रदान करने के लिए किया जा सकता है।

संबंधित मुद्दे