आमतौर पर, जावा प्रोग्राम्स को सुरक्षित रखने के लिए ऑब्सफ्यूकेटर का उपयोग किया जाता है। Obfuscators आपको वर्गों, विधियों, चर का नाम बदलने की अनुमति देता है, बाइटकोड के नियंत्रण प्रवाह को बदल देता है। नि: शुल्क और भुगतान सहित सभी पर्यवेक्षक ये कार्य कर सकते हैं।
बाइटकोड ऑबफ्यूजेशन का लक्ष्य जेवीएम कमांड के ऐसे सेट का निर्माण करना है, जहां से डिकंपाइलर सही जावा सोर्स कोड का निर्माण नहीं कर सकता है।
ऑबफसकेटर और डीकंपाइलर के बीच टकराव हर समय जारी रहता है।
उदाहरण के लिए,
सौत अनुसंधान परियोजना के ढांचे में,
जेबीसीओ ऑबफससकेटर और
डीएवीए डिकंपाइलर एक साथ विकसित हो रहे हैं, जिनमें से डेवलपर्स एक-दूसरे के साथ प्रतिस्पर्धा करते हैं।
घुसपैठियों और बोना फाइड डेवलपर्स को जावा कार्यक्रमों को अपघटित करने की आवश्यकता क्यों है?
- मालिकाना एपीआई एपीआई रिवर्स इंजीनियरिंग
- विभिन्न लाइसेंसिंग तंत्रों को निष्क्रिय करने के लिए बाइटकोड संशोधन
- संवेदनशील जानकारी तक पहुँच प्राप्त करना
दूसरे प्रकार के हमले के खिलाफ संरक्षण के साथ क्लासिक ओफ्यूसैक्टर अपेक्षाकृत अच्छा करता है। यह रिवर्स इंजीनियरिंग से खराब मदद करता है, क्योंकि जावा प्रोग्राम जावा एपीआई का उपयोग करते हैं, जो कि सार्वजनिक है और पर्यवेक्षक इसे बदल नहीं सकता है। एक अपवाद है, लेकिन यह भी एक ओफ्यूसैकर नहीं है, लेकिन जावा एपीआई के मूल कार्यान्वयन के साथ एक पूर्ण आभासी मशीन है -
एक्सेलसियर जेईटी ।
यह कोई रहस्य नहीं है कि ट्रोजन में वर्तमान में "बूम" है, जो जेवीएम में कमजोरियों का उपयोग करते हुए, वित्तीय और अन्य मूल्यवान जानकारी के साथ काम करने वाले कार्यक्रमों के संबंध में, अपने दुर्भावनापूर्ण कार्यों को अंजाम देने के लिए उपयोगकर्ता के कंप्यूटर में घुस जाता है।
जावा कोड की सुरक्षा के आधुनिक साधनों को इसे अपघटन से नहीं बचाना चाहिए, बल्कि जावा सैंडबॉक्स के अंदर सैंडबॉक्स को व्यवस्थित करना चाहिए :)
जावा / जावा एफएक्स अनुप्रयोगों -
सी 3 के लिए लाइसेंसिंग प्रणाली विकसित करते समय हमने इन समस्याओं का सामना किया। और इसलिए
स्ट्रिंगर का जन्म हुआ।
अब वापस वास्तविकता पर। अधिकांश तर्क जो वाणिज्यिक जावा अनुप्रयोगों के डेवलपर्स (विभिन्न एंड्रॉइड अनुप्रयोगों सहित) की रक्षा करना चाहते हैं, वे तार से बंधे हैं ... ओह, ये java.lang.String।
उदाहरण के लिए। हमारे पास एक ग्राफिकल क्लाइंट है जो इंटरनेट संसाधन से एक विशिष्ट प्रारूप में डेटा प्राप्त करता है, इसे पार्स करता है और इसे उपयोगकर्ता को प्रदर्शित करता है। एक हमलावर के लिए जावा वर्ग के निरंतर पूल तक पहुंचना पर्याप्त है और उसके लिए क्लोन प्रोग्राम बनाना मुश्किल नहीं होगा।
आमतौर पर, डेवलपर्स अपने स्ट्रिंग एन्क्रिप्शन सुविधाओं का उपयोग करते हैं या इन हमलों से बचाने के लिए इन कार्यों के लिए समर्थन के साथ ओफ़्फ़सुकेटर्स का उपयोग करते हैं।
स्ट्रिंगर इस कार्य को बहुत अच्छी तरह से कर सकता है:
- एन्क्रिप्शन प्रत्येक सुरक्षित जावा पैकेज के लिए गतिशील एन्क्रिप्शन कुंजी के साथ एईएस एल्गोरिथ्म पर आधारित है
- डिक्रिप्शन फ़ंक्शंस का तर्क गतिशील रूप से मौजूदा क्लास फ़ाइलों में एम्बेडेड है:
सुरक्षा को एम्बेड करने से पहले विघटित वर्ग-फ़ाइल का एक टुकड़ा:
public class App { public static void main(String args[]) { System.out.println("Hello World!"); } }
सुरक्षा को एम्बेड करने के बाद विघटित वर्ग-फ़ाइल का एक टुकड़ा:
public class App { public static void main(String args[]) { System.out.println(main("\u916E\u2E67\uCB8D\u16B9\u479D\u7669\u3F20\uD7DC\u75C5\u30F1\uEC7E\uA26B\uEEB0\u2F0E\u4828\u19C6")); } .... }
- डिक्रिप्शन कॉल संदर्भ सुरक्षा
साथ ही, सैंडबॉक्स आयोजित करने की उपर्युक्त संभावना: प्रतिबिंब के उपयोग के खिलाफ सुरक्षा, कक्षाओं के निजी क्षेत्रों और विधियों का संरक्षण, संशोधन से कक्षाओं के अंतिम क्षेत्रों का संरक्षण।
हम मानते हैं कि लगभग हर डेवलपर को एक स्ट्रिंग एन्क्रिप्शन फ़ंक्शन की आवश्यकता होती है, और कंपनियों के लिए जो अपने उत्पादों के उपयोगकर्ताओं को सूचना चोरी से बचाना चाहते हैं स्ट्रिंगर आपको जावा एप्लिकेशन के अंदर एक सुरक्षित वातावरण व्यवस्थित करने की अनुमति देता है, लेकिन यह विषय एक अलग पोस्ट के योग्य है ...
हम वर्तमान में Android एप्लिकेशन के लिए स्ट्रिंगर विकसित कर रहे हैं।
हमारे साथ बने रहें :)
पुनश्च
वैसे, हमारे CrackMe को किसी ने नहीं फटा।
हैबर के उपयोगकर्ताओं के अलावा, जावालॉबी के उपयोगकर्ताओं ने बहुत सक्रिय रूप से भाग लिया। कुल डाउनलोड लगभग एक हजार थे, और केवल एक ही भागीदार लाइसेंसिंग सर्वर के साथ बातचीत के चरण में पहुंचा।