2010-01-04 9 views
7

मैं केवल एक विशिष्ट यूएसबी डिस्क से चलाने के लिए एक एप्लिकेशन को सुरक्षित करने की कोशिश कर रहा हूं। मेरे पास डिवाइस से सीरियल नंबर प्राप्त करने के लिए कोड है, लेकिन एकमात्र तरीका यह है कि मैं जिस तरीके से काम करना चाहता हूं वह मैन्युअल रूप से सीरियल नंबर को बाइनरी में कोड करना है। क्या कोई तरीका है कि मैं एक स्टब एप्लिकेशन बना सकता हूं जो मौजूदा बाइनरी को संकलित करने के बाद इसमें सीरियल नंबर डालने के लिए संशोधित करेगा? मैंने इसे अतीत में सी ++ में किया है, लेकिन यह बहुत समय पहले था और मुझे काफी याद नहीं आया कि हमने इसे वापस कैसे किया।निष्पादन योग्य में सीरियल नंबर कैसे रिकॉर्ड करें?

+4

कोई भी तकनीक जो इसे अनुमति देती है शायद एस/एन को क्रिप्टोग्राफ़िक हैश के साथ एक अलग फ़ाइल में डालने से कम सुरक्षित (यानी, कोड हस्ताक्षर को अस्वीकार कर देती है)।आपका वास्तविक लक्ष्य क्या है? –

+0

क्या आप अपने सी # को देशी कोड में संकलित कर रहे हैं? –

उत्तर

8

असेंबली में इसे संग्रहीत करना एक बुरा विचार है। यहां मैं वही करता हूं (और अतीत में ऐसा ही किया है):

  1. सुनिश्चित करें कि आप अपनी असेंबली पर हस्ताक्षर कर रहे हैं।
  2. एक XML दस्तावेज़ बनाएं जिसमें आपका लाइसेंसिंग डेटा शामिल है - आपके मामले में यूएसबी डिवाइस का क्रम संख्या।
  3. सीरियल नंबर वाले लाइसेंसिंग XML दस्तावेज़ पर हस्ताक्षर करने के लिए .NET (XMLDSIG लागू करता है) में SignedXml लाइब्रेरी का उपयोग करें। आप उसी निजी कुंजी का उपयोग करेंगे जिसका उपयोग असेंबली पर हस्ताक्षर करने के लिए किया जाता है।
  4. जब आपका ऐप शुरू होता है, तो यह सत्यापित करता है कि XML फ़ाइल का हस्ताक्षर सार्वजनिक कुंजी का उपयोग करके मान्य है जिस पर हस्ताक्षर किए गए थे (और असेंबली में एम्बेड किया गया है)।

जाहिर है कि आप अपनी निजी कुंजी नहीं भेजते हैं, इसलिए यदि ऐप को एक्सएमएल कॉन्फ़िगरेशन फ़ाइल स्वयं उत्पन्न करने की आवश्यकता है (इसके बजाय यह एक फ़ाइल है जिसे आप उपयोगकर्ता को भेजते हैं) तो आपको एक वेब सेवा लागू करने की आवश्यकता होगी।

+0

बहुत अच्छा, प्रतिक्रिया के लिए धन्यवाद, मुझे लगता है कि मैं इस विधि का उपयोग करूंगा। जो मैं करने की कोशिश कर रहा हूं वह एक ऐसा प्रोग्राम है जो केवल एक विशिष्ट थंबड्राइव से चलाया जा सकता है जिसे मैंने अधिकृत किया है। सभी अच्छी प्रतिक्रिया के लिए धन्यवाद! –

+0

वैसे तो इसे उत्तर के रूप में चिह्नित करने के लिए स्वतंत्र महसूस करें :-) –

0

मुझे नहीं पता, लेकिन इससे पहले मुझे जवाब देने से नहीं रोका है।

हो सकता है कि यह पता लगाने जहां निष्पादन में एसएन संग्रहीत करना चाहते हैं (यह केवल एक ही स्थान पर, है ना? होना चाहिए) और सिर्फ एक विशाल बाइनरी ब्लॉब के रूप में निष्पादन का इलाज, और ठूंठ प्रोग्राम का उपयोग जहां यह जरूरत डालने के लिए जाना?

0

कोई भी निष्पादन योग्य के अंदर कुछ भी क्यों सहेजना चाहेगा। यदि आप किसी भी तरीके से निष्पादन योग्य को बदलने के वितरण के लिए निष्पादन योग्य पर हस्ताक्षर करने की योजना बना रहे हैं तो निष्पादन योग्य को बाइनरी में कुछ हस्ताक्षर करना और बचत करना किसी को निष्पादन योग्य मूल्य से बाहर नहीं ले जाएगा।

बेस्ट बात आप कर सकते हैं एक फ़ाइल, रजिस्ट्री, या अन्य जगह पर सीरियल नंबर की दुकान तो मूल्य एन्क्रिप्ट तो यह यह तोड़ने के बिना बदला नहीं जा सकता है। मैं लाइब्रेरी का उपयोग करता हूं जो स्पीरमैनटेक नामक एक बिल्कुल नई कंपनी से लाइसेंस वॉल्ट के साथ जहाजों का उपयोग करता है। आप अपने पुस्तकालय का उपयोग एन्क्रिप्टेड मानों को .NET machine.config फ़ाइल में एन्क्रिप्टेड रूप में संग्रहीत करने के लिए कर सकते हैं ताकि इसे छेड़छाड़ नहीं किया जा सके। जब आपका एप्लिकेशन शुरू होता है तो इस तरह आप .config फ़ाइल से जानकारी खींच सकते हैं।

क्या आप सी ++ या मूल सी ++ में एक .NET अनुप्रयोग लिख रहे हैं, तो आप किसी भी तरह से .NET ढांचे के साथ संवाद करने में सक्षम होना चाहिए ताकि यह समाधान काम करेगा।

मैं http://www.spearmantech.com पर अपने उत्पाद की जाँच होगी। आशा है कि यह आप के लिए काम करता है।

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