2010-01-28 7 views
5

मैंने देशी सी ++ कोड के लिए सी ++ सीएलआई रैपर बनाया है, जो बदले में मैं अपने सी # एप्लिकेशन में संदर्भित करता हूं। क्या किसी भी तरह से इस असेंबली की रक्षा करना संभव है ताकि इसका उपयोग केवल मेरे आवेदन में किसी और की संभावना के बिना किया जा सके?(सी #/सी ++ सीएलआई) क्या मेरे सी ++ सीएलआई असेंबली को अन्य .NET परियोजनाओं में इस्तेमाल होने से सुरक्षित रखना संभव है?

मैं एक माइक्रोसॉफ्ट प्रौद्योगिकी डेवलपर हूँ, मैं सब स्वार्थ :)

+0

मेरे सी # एप्लिकेशन के बीच एक निजी कुंजी का उपयोग करना होगा और एक कन्स्ट्रक्टर पैरामीटर के रूप में इसे पूरा करने का एक वैध तरीका होगा, या इसे हैक माना जाएगा? –

+0

सुनिश्चित नहीं है कि आपका क्या मतलब है, लेकिन मैं यह सलाह नहीं दूंगा कि आप अपनी निजी कुंजी कहीं भी रखें लेकिन अपने कार्यालय में सबसे अंधेरे कमरे में सबसे सुरक्षित कंप्यूटर! – CesarGon

उत्तर

3

मैं सफलता के साथ this technique का इस्तेमाल किया है के बारे में हूँ।

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

+0

संभावित डुप्लिकेट: http://stackoverflow.com/questions/1929080/net-how-to-make-a-class-such-that-only-one-other- विशिष्ट-class-can-instantiat :) –

+1

@ ब्लूराज : जिस पोस्ट का आप जिक्र कर रहे हैं वह कक्षा को तत्काल करने के बारे में पूछता है; यहां यह एक संपूर्ण असेंबली का उपयोग करने के बारे में है। मेरे उत्तर में तकनीक को या तो लागू किया जा सकता है, लेकिन अन्य तकनीकें उनमें से एक के लिए मान्य हो सकती हैं। इसलिए मुझे लगता है कि यह एक डुप्लिकेट नहीं है। :-) – CesarGon

0

हां, लेकिन यह एक निर्धारित हमलावर के खिलाफ हारने वाली लड़ाई होगी।

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

0

बिल्कुल नहीं। LinkDemand केवल आंशिक ट्रस्ट पर्यावरण में लागू है। पूर्ण ट्रस्ट के साथ चलने वाला कोड भी निजी प्रकारों तक पहुंचने के लिए प्रतिबिंब का उपयोग कर सकता है, और आम तौर पर किसी भी सुरक्षा को बाईपास करने के लिए आपकी परवाह करता है।

शायद आप अपने सी ++/सीएलआई कोड को असेंबली :: GetEntryAssembly पर कॉल करना चाहते हैं और इसे अनुमोदित ऐप्स के श्वेतसूची के खिलाफ जांचें जिसके लिए लाइब्रेरी का इरादा है।

बेशक, आप चेक में शामिल प्रबंधित कोड (और विशेषताओं) की मात्रा को कम करना चाहते हैं क्योंकि प्रबंधित कोड वास्तव में डिकंपाइल करना आसान है।

वास्तव में, सी ++ कोड के मूल तर्क में कभी-कभी जांच को मिलाकर एकमात्र आशा है कि आपके पास यह नहीं छोड़ा जाएगा।

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