2009-08-14 13 views
9

मैं एक ऐसे एप्लिकेशन पर काम कर रहा हूं जिसे मैं जल्द ही सार्वजनिक रूप से वितरित कर दूंगा। मैं यह सुनिश्चित करने के लिए अपनी शक्ति में कुछ भी करना चाहता हूं कि जो लोग मेरे प्रोग्राम को डाउनलोड करते हैं वे इसे इंजीनियर नहीं करते हैं। मैं समझता हूं कि एक .jar फ़ाइल वितरित करना बेहद असुरक्षित है।वितरण के लिए जावा जार फ़ाइलों की सुरक्षा

क्या कोई भी मेरे जावा एप्लिकेशन को वितरित करने के लिए एक मंच स्वतंत्र तरीका सुझा सकता है? इसके अलावा, मैं इसे किसी प्लेटफॉर्म (विंडोज, लिनक्स, मैक ओएसएक्स) पर एक सेवा के रूप में स्थापित करना चाहता हूं।

धन्यवाद!

उत्तर

8

आप हाथापाई/yGuard या अन्य जावा-बाईटकोड-ऑबफस्केटर के साथ अपने बाईटकोड अंधेरा कर सकते हैं।

ऑपरेटिंग सिस्टम स्वतंत्र वितरण मुश्किल हो सकता है। आईएमएचओ सबसे अच्छा समाधान एक सामान्य संग्रह है जिसमें प्रोग्राम्स का समर्थन करने वाले ऑपरेटिंग सिस्टम के तहत प्रोग्राम-स्टार्ट के लिए कई स्क्रिप्ट (विंडोज़ के लिए .bat/.cmd, linsh/OSX के लिए .sh) शामिल हैं।

सेवा के रूप में जावा-प्रोग्राम चलाना और भी कठिन हो सकता है: यह लिनक्स के तहत आसान है, जहां आपको इसे पृष्ठभूमि में चलाने के लिए उचित स्टार्टअप-स्क्रिप्ट लिखनी है। मुझे पता है कि फायरडेमॉन में जावा-प्रोग्राम्स को सेवा के रूप में चलाने में समस्याएं हैं, इसलिए विंडोज़ पर सेवा के रूप में इसे चलाने के लिए मुश्किल (या असंभव) हो सकता है। क्षमा करें, लेकिन मुझे MacOS X के बारे में कोई जानकारी नहीं है। लिनक्स जितना आसान हो सकता है, विंडोज के रूप में असंभव हो सकता है।

+0

Obfuscation जाने का रास्ता है। – Carnell

2

क्या आपने GCJ जैसे देशी कोड कंपाइलर का उपयोग करने पर विचार किया है? यह प्लेटफ़ॉर्म स्वतंत्र नहीं है (आपको प्रत्येक लक्ष्य प्लेटफ़ॉर्म के लिए एक को संकलित करना होगा), लेकिन मुझे नहीं लगता कि आप प्लेटफॉर्म-स्वतंत्र बाइटकोड कैसे वितरित कर सकते हैं और फिर भी अपने अंतिम उपयोगकर्ताओं से उस बाइटकोड को छुपा सकते हैं।

1

आप इसे obfuscate कर सकते हैं। यह आपके प्रोग्राम को रिवर्स इंजीनियरिंग को और अधिक कठिन बना देगा। इसके अलावा, मुझे लगता है कि आप अपनी कक्षा फ़ाइलों को निष्पादन योग्य (यानी विंडोज़ के लिए एक्सेई) भी बना सकते हैं

संपादित करें: ईमानदार होने के लिए, यदि आपके आवेदन की सुरक्षा इतनी महत्वपूर्ण है, तो पूरी तरह से जावा से बचें। उदाहरण के लिए आप सी ++ के लिए जीसीसी कंपाइलर का उपयोग कर सकते हैं (जब तक आप सिस्टम कॉल नहीं करते हैं तब तक कम या ज्यादा प्लेटफॉर्म स्वतंत्र होता है)। आपको इसे अलग-अलग मेजबान मशीनों पर संकलित करने की आवश्यकता है (जो कुछ ऐसा है जो आपका मूल प्रश्न आपकी आवश्यकता के अनुसार इंगित करता है लेकिन जावा पर)।

क्यूटी भी है, लेकिन मैंने खुद को यह कोशिश नहीं की है।

+0

आप निष्पादन योग्य बना सकते हैं - लेकिन आप जो भी कर रहे हैं वह वर्चुअल मशीन को जोड़ रहा है। –

+0

मुश्किल, लेकिन असंभव नहीं है। –

2

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

How to create encrypted Jar file?

+1

एन्क्रिप्टेड जेएआर फाइलों के साथ समस्या यह है कि आपको निष्पादन के लिए फ़ाइलों को डिक्रिप्ट करने के लिए कुछ कोड प्रदान करना होगा। डिक्रिप्शन कुंजी/एल्गोरिदम निर्धारित करने के लिए उस कोड को रिवर्स इंजीनियर किया जा सकता है। –

+1

@ स्टीफन - 100% सहमत हैं। इसमें कोई संदेह नहीं है कि यह विधि केवल एक पैडलॉक की तरह है - ईमानदार व्यक्ति को ईमानदार रखने के लिए बनाई गई है। कोई भी जो जार से स्रोत प्राप्त करने में किसी भी स्तर का प्रयास करना चाहता है, ऐसा कर सकता है। आखिरकार, इसे डीकोड करने के बाद इसे स्मृति से सादा पढ़ा जा सकता है। –

3

एक ओबफ्यूसेटर के माध्यम से अपना आवेदन चलाना रिवर्स इंजीनियरिंग को और अधिक कठिन और महंगा बनाता है।

कई प्लेटफार्मों पर एक सेवा के रूप में अपने जावा ऐप को स्थापित करने और चलाने के लिए अपेक्षाकृत आसान तरीका के लिए Java Service Wrapper पर एक नज़र डालें।

2

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

लेकिन आखिरकार आपको यह समझना होगा कि यदि आप स्टॉक प्लेटफ़ॉर्म पर चलाने के लिए सॉफ़्टवेयर वितरित करते हैं, तो कुछ भी तकनीकी नहीं है जो आप रिवर्स इंजीनियरिंग को रोकने के लिए कर सकते हैं। कुछ भी तो नहीं।

आखिरकार, आपको किसी को रिवर्स इंजीनियरिंग के जोखिमों के विरुद्ध अपने सॉफ़्टवेयर को वितरित करने के लाभों का व्यापार करना होगा। लोगों द्वारा एक दृष्टिकोण यह पता लगाने के लिए है कि लाभ जोखिम * लागत से अधिक हैं, और रिवर्स इंजीनियरिंग को रोकने के लिए कानूनी सुरक्षा उपायों (जैसे उपयुक्त सॉफ़्टवेयर लाइसेंस) का उपयोग करते हैं। दूसरा दृष्टिकोण संभावित रिवर्स इंजीनियरों को "आपको शुभकामनाएं" कहना है और सॉफ़्टवेयर लाइसेंस की बजाय सेवाओं की पेशकश करके अपना पैसा बनाना है।

1

या आप जो कर सकते हैं वह कर सकते हैं। जेएनआई के माध्यम से बुलाए गए डीएल में संकलित सी ++ में लिखे गए कुछ बैकएंड कार्यों के साथ जावा फ्रंट एंड। फ्रंट एंड जीयूआई बैकएंड ग्रंट देशी के साथ पूरी तरह से पोर्टेबल है।

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