2011-10-22 21 views
6

मैं बात करने के लिए तुरंत काम करेंगे तो आप एक बहुत पढ़ने के लिए नहीं है।जावा एन्क्रिप्टेड मेमोरी कक्षा लोडर

असल में, मेरे पास एईएस-128 बिट एन्क्रिप्टेड जार फ़ाइल है। मैं एक लॉन्चर बनाना चाहता हूं ताकि मैं इस एन्क्रिप्टेड जार को स्मृति में लोड कर सकूं और इसे चला सकूं (कुंजी का उपयोग कर)।

मेरे पास एक साधारण क्लास लोडर काम कर रहा है, हालांकि जब तक मैं इसे किसी निर्देशिका में डिक्रिप्ट नहीं करता और इसे चलाता हूं, तो यह स्पष्ट रूप से ऐसा नहीं करेगा जो मुझे चाहिए (& मेमोरी लोड डिक्रिप्ट करें)।

टी एल; डॉ: मैं स्मृति में एक एईएस 128 बिट एन्क्रिप्टेड जार रन बनाने की जरूरत है।

किसी भी मदद की बहुत सराहना की है, सवाल पूछने के लिए स्वतंत्र लग रहा है!

+2

आप अपने कोड है कि आप शायद सुरक्षित होना चाहते हैं वहाँ बाहर सबसे आसानी से decompiled भाषाओं में से एक में यह लिख नहीं किया जाना चाहिए। एक जार लोडर लिखना संभव है लेकिन लोगों को स्मृति से सिर्फ डंप करने से रोकने का कोई तरीका नहीं है। – 0x5f3759df

+0

इसे जावा में संकलित करने की आवश्यकता है। ऐसा इसलिए नहीं है क्योंकि मैं अन्य भाषाओं में कोड नहीं कर सकता लेकिन अधिकतर भाषाओं में मैं जो भी कर रहा हूं उसका समर्थन नहीं करता हूं। –

+0

@ 0x5f3759d और सी, सी #, के लिए भी यही सच है .. बिल्कुल बिल्कुल कोई भी भाषा। यह 5minutes अधिक समय लग सकता है, लेकिन अंत में किसी को जार फ़ाइल वह कुंजी आसानी से पर्याप्त (डीबगर में CreateFile और पत्नी के लिए एक ब्रेकपाइंट सेट, शायद पाया fd साथ ReadFile के लिए एक जोड़ सकते हैं और आप मिल जाएगा मिल जाएगा चाहता है यह आसानी से पर्याप्त है)। यद्यपि मुझे वास्तव में समस्या दिखाई नहीं दे रही है - यदि आपके पास पहले से ही आपका क्लासलोडर है तो फ़ाइल को पढ़ने और इसे डिक्रिप्ट करने से आपको क्या रोकता है? अर्थात। आपकी वास्तविक समस्या क्या है? – Voo

उत्तर

8

कैसे byte[] से एक जार/वर्ग लोड करने के लिए पर नमूना कोड के लिए (जो परिणाम आप स्मृति में decrypting के बाद प्राप्त किया जाना चाहिए/कोई जरूरत नहीं यह फाइल सिस्टम में कहीं भी बचाने के लिए) को देखने के http://www.javaworld.com/javaworld/jw-10-1996/indepth/indepth.src.html

मूल रूप से आप की जरूरत आप जो चाहते हैं उसे प्राप्त करने के लिए defineClass का उपयोग करने के लिए।

लेकिन सावधान रहना है कि इस स्मृति में के बाद से सभी समाप्त होता है (डिक्रिप्शन के बाद) के लिए कोई वास्तविक सुरक्षा प्रदान करता है जावा बाइट कोड के रूप में है और इस तरह पहुँचा जा सकता है/चालाकी/बचाया आदि

सुरक्षा का एक छोटा सा द्वारा संभव होगा और/या कोड पूर्व JITing इतना है कि यह निवासी है एक कस्टम JVM ... कुछ जानकारी के लिए लागू करने उदाहरण How to create encrypted Jar file?

+0

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

+0

आपका स्वागत है ... कृपया सहायता के किसी भी उत्तर को स्वीकृत के रूप में अपवर्तित/चिह्नित करना न भूलें! – Yahia

+0

मुझे इसे वोट देने से पहले 15 प्रतिष्ठा प्राप्त करने की आवश्यकता है। लेकिन मुझे यकीन है कि जब मैं 15 प्रतिनिधि तक पहुंच जाऊंगा! –

1

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

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

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