मेरे पास एक असेंबली है जो निर्दिष्ट निष्पादन योग्य के अलावा किसी अन्य एप्लिकेशन द्वारा उपयोग नहीं की जानी चाहिए। कृपया मुझे ऐसा करने के लिए कुछ निर्देश दें।दूसरों को मेरी .NET असेंबली का उपयोग करने से कैसे रोकें?
उत्तर
आप एक ही कुंजी के साथ असेंबली और निष्पादन योग्य पर हस्ताक्षर कर सकते हैं और फिर उन वर्गों के निर्माता में चेक डाल सकते हैं जिन्हें आप सुरक्षित रखना चाहते हैं:
public class NotForAnyoneElse {
public NotForAnyoneElse() {
if (typeof(NotForAnyoneElse).Assembly.GetName().GetPublicKeyToken() != Assembly.GetEntryAssembly().GetName().GetPublicKeyToken()) {
throw new SomeException(...);
}
}
}
मुझे लगता है कि नीचे उल्लिखित InternalsVisibleTo विकल्प बेहतर है। यह कोडिंग के बिना, इस उत्तर के समान ही है। काम करने के लिए आपको InternalsVisibleT के लिए असेंबली पर हस्ताक्षर करने की आवश्यकता है। दोनों तकनीकों के साथ, अन्य उपयोगकर्ता विधियों को देख सकते हैं और उन्हें प्रतिबिंब का उपयोग करके कॉल कर सकते हैं; लेकिन कॉलिंग असेंबली में एक ही कुंजी नहीं होने पर दोनों तकनीकें असफल हो जाएंगी। –
मैं टोकन को एक स्ट्रिंग में परिवर्तित करने के बाद ही इसे काम करने में सक्षम था। बिटकोनवर्टर। टॉस्ट्रिंग (टाइपऑफ (NotForAnyoneElse) .ssembly.GetName()। GetPublicKeyToken()) – JohnZaj
आप इसे असेंबली पर कोड एक्सेस सुरक्षा नीतियों में सेट करने में सक्षम हो सकते हैं।
आपको आंतरिक रूप से स्कैन किए जाने के लिए सब कुछ करने में सक्षम होना चाहिए, और फिर InternalsVisibleTo विशेषता का उपयोग केवल एक ही असेंबली को आंतरिक तरीकों तक पहुंच प्रदान करने के लिए करें।
क्या यह प्रतिबिंब को हरा सकता है? – cathy
नेट 2.0 या बेहतर में, सब कुछ आंतरिक, और फिर दोस्त विधानसभाओं
http://msdn.microsoft.com/en-us/library/0tke9fxk.aspx
इस का उपयोग प्रतिबिंब बंद नहीं होगा। मैं नीचे से कुछ जानकारी शामिल करना चाहता हूं। यदि आप पूरी तरह कॉल करने से किसी को रोकने के लिए की जरूरत है, शायद सबसे अच्छा समाधान है:
- ILMerge .exe और .dll
- अंतिम .exe
तुम भी कॉल की जांच कर सकता है अंधेरा ढेर करें और प्रत्येक कॉलर के लिए असेंबली प्राप्त करें और सुनिश्चित करें कि वे सभी असेंबली के समान कुंजी के साथ हस्ताक्षरित हैं।
क्या यह प्रतिबिंब हरा देगा? – cathy
नहीं, प्रतिबिंब को हरा करने के लिए आपको obfuscate करने की आवश्यकता है। –
यदि असेंबली उदाहरण के लिए एक वेब सेवा थी, तो आप यह सुनिश्चित कर सकते हैं कि निर्दिष्ट निष्पादन योग्य एसओएपी संदेश में एक गुप्त मूल्य पास हो।
आप obfuscation का उपयोग कर सकते हैं।
कि हो जाएगा:
int MySecretPrimeDetectionAlgorithm(int lastPrimeNumber);
की तरह कुछ अपठनीय में:
int Asdfasdfasdfasdfasdfasdfasdf(int qwerqwerqwerqwerqwerqwer);
दूसरों अभी भी अपने विधानसभा का उपयोग करने में सक्षम हो जाएगा, लेकिन यह किसी भी समझदार बनाने के लिए कठिन हो जाएगा।
कुछ हुप्स के माध्यम से कूदने के बिना 100% पूरी तरह असंभव है।
.NET का उपयोग करने के लाभों में से एक प्रतिबिंब का उपयोग करने की क्षमता है, जो एक असेंबली को लोड करता है और इसका निरीक्षण करता है, गतिशील रूप से कॉल विधियों आदि। यह VB.NET और F # संभव के बीच इंटरऑप बनाता है।
हालांकि, अपने कोड एक प्रबंधित विधानसभा इसका मतलब है कि किसी को भी अपने कोड के लिए एक संदर्भ जोड़ सकते हैं और अपने सार्वजनिक विधियां प्रारंभ या प्रतिबिंब का उपयोग कर इसे लोड और निजी तरीकों फोन में है के बाद से। भले ही आप अपने कोड को 'खराब कर दें', फिर भी लोग प्रतिबिंब का उपयोग करने और आपके कोड का आह्वान करने में सक्षम होंगे। हालांकि, चूंकि सभी नामों को कुछ भी करने के लिए मुखौटा किया जाएगा, यह बेहद मुश्किल है।
यदि आपको अपने .NET कोड को ऐसे फैशन में भेजना है जो अन्य लोगों को इसे निष्पादित करने से रोकता है, तो आप अपने बाइनरी को एनजीएनएन (x86 पर संकलित कर सकते हैं) और उन बाइनरी को शिप कर सकते हैं।
मुझे आपकी स्थिति के विनिर्देशों को नहीं पता है, लेकिन obfuscation पर्याप्त होना चाहिए।
मुझे यकीन नहीं है कि इससे मेरी मदद कैसे होगी .. चाहे वह एक .NET असेंबली या मूल असेंबली है, कोई भी इसे सही लोड करने में सक्षम होना चाहिए .. – cathy
हां, आप गतिशील रूप से एक अप्रबंधित DLL लोड कर सकते हैं और उसे निष्पादित भी कर सकते हैं - हालांकि तो आपको पता होना चाहिए: कोड का स्मृति पता, पैरामीटर की संख्या/प्रकार, उन पैरामीटरों को कैसे मार्शल करना है, आदि। चीजों को करने के लिए अप्रबंधित कोड में कॉल करना स्रोत के बिना व्यावहारिक रूप से असंभव है। उस लिंक से –
कोड प्रवेश सुरक्षा विशेषता है कि @Charles Graham उल्लेख StrongNameIdentityPermissionAttribute
- .NET Framework संस्करण 2.0 और बाद में, कॉलिंग असेंबली पर पूर्ण विश्वास होने पर पहचान अनुमतियों की मांग अप्रभावी होती है। – cathy
है कुछ लोगों का उल्लेख किया है, InternalsVisibleTo विशेषता का उपयोग और आंतरिक रूप में सब कुछ निशान। यह निश्चित रूप से प्रतिबिंब के खिलाफ सुरक्षा नहीं करेगा।
एक बात जिसका उल्लेख नहीं किया गया है ilmerge आपकी असेंबली आपके मुख्य .exe/.dll/जो भी हो, यह प्रविष्टि के लिए बाधा उत्पन्न करेगा (लोग आपके दास को अपने आप पर बैठने में सक्षम नहीं होंगे संदर्भित करने के लिए कहा जा रहा है), लेकिन प्रतिबिंब मार्ग को रोक नहीं पाएंगे ..
अद्यतन: इसके अलावा, आईआईआरसी, इल्मेज में एक सुविधा है जहां यह स्वचालित रूप से मर्ज किए गए असेंबली को आंतरिक रूप से आंतरिक कर सकती है, जिसका मतलब है कि आपको आंतरिक VisibleTo का उपयोग करने की आवश्यकता नहीं है
विडंबना यह है कि, वही असेंबली प्रतिबिंब का उपयोग करके मांग पर लोड की जा रही है। मुझे लगता है कि इसे रोकने के लिए कोई मूर्ख तरीका नहीं है। – cathy
आप Netz निष्पादन योग्य पैकर और कंप्रेसर का उपयोग करने पर भी देख सकते हैं।
यह आपकी असेंबली और आपकी .exe फ़ाइल लेता है और उन्हें एक निष्पादन योग्य में पैक करता है ताकि वे बाहर की दुनिया के आसपास खुदाई के बिना दिखाई न दें।
मेरा अनुमान है कि यह अधिकांश .NET प्रोग्रामर के लिए उपयोग को रोकने के लिए पर्याप्त है।
.netz दृष्टिकोण का एक बड़ा लाभ यह है कि आपको अपना कोड बदलने की आवश्यकता नहीं है। एक और लाभ यह है कि यह वास्तव में आपकी स्थापना प्रक्रिया को सरल बनाता है।
ऐसा लगता है कि आप एक सुरक्षा या obfuscation उपकरण की तलाश में हैं। जबकि चांदी की बुलेट नहीं है, मैं जिस सुरक्षा उपकरण की सिफारिश करता हूं वह smartassembly है। कुछ विकल्प Salamander Obfuscator, dotfuscator, और Xenocode हैं।
दुर्भाग्यवश, यदि आप किसी को पढ़ने के लिए अपने बाइट्स देते हैं ... यदि उनके पास पर्याप्त समय और प्रयास है, तो वे आपके कोड को लोड और कॉल करने का तरीका ढूंढ सकते हैं। एक टिप्पणी का उत्तर देने के लिए मुझे लगता है कि आप अक्सर पूछते हैं: सैलामैंडर आपके कोड को सीधे परावर्तक उपकरण में लोड होने से रोक देगा, लेकिन स्मार्टसाइब्स के साथ मैंने बेहतर (यानी: अधिक विश्वसनीय) अनुभव किए हैं।
उम्मीद है कि इससे मदद मिलती है। :)
मुझे यकीन नहीं है कि यह आपके लिए एक उपलब्ध एवेन्यू है, लेकिन शायद आप डब्ल्यूसीएफ या एएसपी.नेट वेब सेवाओं का उपयोग करके असेंबली की मेजबानी कर सकते हैं और कुछ प्रकार की प्रमाणीकरण योजना (एलडीएपी, सार्वजनिक/आरपीवेट कुंजी जोड़े , आदि) सुनिश्चित करने के लिए केवल ग्राहकों को कनेक्ट करने की अनुमति है। यह आपकी असेंबली शारीरिक रूप से किसी और के हाथों से बाहर रखेगा और आप इसे नियंत्रित कर सकते हैं कि कौन इसे जोड़ता है। सिर्फ एक विचार।
फ़ंक्शन कॉल का उपयोग करने के लिए बस पास कोड भेजने की आवश्यकता है और यदि इसे अधिकृत नहीं किया गया है तो कुछ भी काम नहीं करता है, जैसे .setAuthorizeCode ('123456') तब इस्तेमाल किए जा सकने वाले प्रत्येक स्थान पर यह जांच सकता है कि क्या AuthorizeCode! = 123456 फिर त्रुटि फेंक दें या बाहर निकलें ... यह पुनः उपयोगिता के लिए एक अच्छा जवाब की तरह नहीं लगता है लेकिन यह बिल्कुल सही बात है।
आपके द्वारा उपयोग किए जाने वाले एकमात्र समय आपके द्वारा और जब आप हार्ड कोड को प्रोग्राम में अधिकृत कोड कोड करते हैं।
बस एक विचार, जो आप खोज रहे हैं या आपको कुछ बेहतर करने के लिए प्रेरित कर सकता है।
- 1. जीएसी से किसी असेंबली को लोड/संदर्भित करने से .NET एप्लिकेशन को कैसे रोकें?
- 2. .NET असेंबली भ्रम को हल करने
- 3. एसिंक्रोनस टीसीपी .NET कोड को पूरे सिस्टम के संसाधनों का उपयोग करने से कैसे रोकें
- 4. विशेष तरीकों को कॉल करने से .NET कोड को रोकें?
- 5. हस्ताक्षरित असेंबली मेरी सेवा को
- 6. .NET असेंबली को समझना
- 7. उपयोगकर्ताओं को मेरी साइट पर एक से अधिक सत्रों में लॉगिन करने से कैसे रोकें?
- 8. उपयोगकर्ता को पिछले 5 पासवर्ड का उपयोग करने से रोकें?
- 9. सुरक्षित रूप से .net असेंबली को कैसे चिह्नित करें?
- 10. .NET असेंबली
- 11. दृश्य स्टूडियो को असेंबली संदर्भों को अपडेट करने से कैसे रोकें?
- 12. मेरी व्यावसायिक परत को भ्रमित करने से बार-बार पोस्टबैक को कैसे रोकें
- 13. .NET असेंबली
- 14. स्वयं को बंद करने वाले टैग का उपयोग करने से XslCompiledTransform को रोकें
- 15. एचओएमएक्सपाथ को एचटीएमएल इकाइयों का विस्तार करने से कैसे रोकें?
- 16. खोज इंजन को मेरी वेबसाइट के एक पृष्ठ को अनुक्रमणित करने से कैसे रोकें?
- 17. इंटरफ़ेस असेंबली .NET 4.0
- 18. .NET: मेरी प्रोजेक्ट
- 19. स्क्रॉलबार को सामग्री को ओवरलैप करने से कैसे रोकें?
- 20. किसी .NET असेंबली
- 21. .NET असेंबली प्लगइन सुरक्षा
- 22. 64 बिट अनुप्रयोगों से .NET 1.1 असेंबली
- 23. निर्देशों का उपयोग करते समय रीशेर्पर को नेमस्पेस को छोटा करने से कैसे रोकें?
- 24. सभी उपलब्ध .NET असेंबली
- 25. कारण "सिल्वरलाइट असेंबली" सामान्य ".NET असेंबली
- 26. रनटाइम पर .NET असेंबली संसाधनों का आकलन
- 27. 2 .NET असेंबली
- 28. मोनो में प्रीकंपील्ड .NET असेंबली डीएलएल का उपयोग करना?
- 29. विनएससीपी .NET असेंबली: प्रॉक्सी को परिभाषित करने के लिए कहां?
- 30. जावा से .NET असेंबली को कॉल करना: JVM क्रैश
चेक w/[Assembly.GetEntryAssembly()] (http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly.aspx) –