2009-07-18 19 views
17

यह एक अजीब स्थिति की तरह लगता है, लेकिन मुझे सवाल पूछने दो।मैं अपने डेवलपर्स से अपने एएसपी.Net स्रोत कोड की रक्षा कैसे कर सकता हूं

मैं कुछ DLLs कि कुछ जादुई mumbo- जंबो कि वेबसाइट मैं अभी ASP.Net में बना रहा सामग्री को प्रदर्शित करने की जरूरत है ऐसा बनाया है। मुझे डेवलपर्स की एक छोटी सी टीम मिली है जो मेरी मदद कर सकती है, लेकिन मुझे डर है कि वे मेरा कोड (डीएलएल) चुरा लेंगे और जब वे मेरी कंपनी छोड़ेंगे तो परियोजनाओं में इसका इस्तेमाल करेंगे। एक सॉफ्टवेयर में मैं शायद साबित कर सकता हूं कि वे सामग्री उत्पन्न करने के लिए मेरे डीएलएल का उपयोग कर रहे हैं, लेकिन ऐसे सर्वर पर जहां डीएलएल सार्वजनिक रूप से उपलब्ध नहीं हैं, मैं नहीं कर सकता।

तो एक टीम होने के बावजूद मैं अकेले इस पर काम कर रहा हूं।

मेरा प्रश्न है। क्या कोई तरीका है जिसके बारे में आप सोच सकते हैं कि मैं अपने डीएलएल (जो बिन फ़ोल्डर में जाता है) की रक्षा कर सकता हूं ताकि मेरे कोडर चोरी न कर सकें, या चोरी होने पर यह अनुपयोगी हो जाता है।

मैं बस की रक्षा के लिए जो कुछ भी बिन फ़ोल्डर में चला जाता है चाहता हूँ।

+0

इससे पहले कि आप ट्रस्ट हेक्ल्स उठाएं। मैं एक देव द्वारा पहले shiv'd किया गया है जो मेरा कोड चुरा लिया और एक प्रतियोगी के पास गया। एक बार काटा, हमेशा शर्मीला। –

+0

मुझे कबूल करना होगा ...मैंने इस सवाल पर भी विचार किया है। +1 – Cerebrus

उत्तर

8

यदि आप घर जैसा महसूस नहीं करते हैं तो आप डीएलएल अपने पर्यावरण की जांच कर सकते हैं और काम करने में असफल हो सकते हैं (मेरा सुझाव है कि आप इसे तोड़ने के बजाय गलत परिणाम दें)। सुरक्षा को हटाने के प्रयासों को बाधित करने के लिए आपको कोड को भी खराब करना होगा।

संपादित करें: आप एक पर्यावरण चर, रजिस्ट्री कुंजी, प्रदर्शन काउंटर का अस्तित्व, machine.config, आदि में एक अस्पष्ट सेटिंग का उपयोग कर सकते हैं।, और इसे एक वास्तविक सेटिंग की तरह दिखते हैं, फिर एक मजबूत नाम के साथ obfuscate और हस्ताक्षर करें।

+1

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

+1

इससे उन्हें धीमी हो जाएगी, लेकिन अंत में भंजनीय होगा - कहीं स्मृति में एक बूलियन ध्वज अभी जाँच में सफल बनाने के लिए फेरबदल की जरूरत है। – womp

+0

यह एक कंपाइलर स्थिर है। तो तकनीकी रूप से मेरा मानना ​​है कि डीएलएल में केवल गलत कोड संकलित होना चाहिए। –

1

संबंधित: https://stackoverflow.com/questions/181991/suggest-a-good-obfuscator-for-net-closed
आप अपने कोड को चुनिंदा रूप से खराब करना चाहते हैं (सार्वजनिक एपीआई को इस तरह रखें)

+0

Obfuscation मेरी समस्या नहीं है। मैं किसी को अपने कोड को संकलित करने के बारे में चिंतित नहीं हूं। मैं उस डेल को लेने वाले किसी व्यक्ति के बारे में चिंतित हूं, इसे अपने बिन फ़ोल्डर में डाल रहा हूं और इसे मेरे जैसा वेबसाइट बनाने के लिए उपयोग कर रहा हूं। (यह एक डीएलएल है जो कुछ विशेष गणना करता है)। मैं उन्हें कैसे रोकूं? अगर मैं ऐसा करता हूं तो वे अपने सर्वर पर अपने डीएलएल का उपयोग कैसे कर रहे हैं? आपकी टिप्पणियों के आधार पर –

+1

सिरिल, मैंने अपना जवाब अपडेट कर दिया है। – womp

2

यह मेरी अजीब स्थिति में रहने के लिए एक अजीब स्थिति है।

नेट स्तर पर, जब आप इसे बनाते हैं तो सबसे अच्छा आप अपने कोड को खराब कर सकते हैं। आपकी असेंबली पर जोरदार हस्ताक्षर करने से आपको पता चलेगा कि छेड़छाड़ भी चल रही है या नहीं।

एक और दृष्टिकोण है कि कुछ लोगों को ले लिया है C++ वास्तव में संवेदनशील कोड लिख सकते हैं और एक अप्रबंधित .dll के लिए यह संकलन, और इंटरॉप का उपयोग कर .net से इसे में कॉल करने के लिए है। सी ++ बाइटकोड आईएल की तुलना में पढ़ने के लिए बहुत कठिन है, और यह आसान रिवर्स इंजीनियरिंग के लिए बहुत अधिक बाधाओं को फेंकता है।

संपादित करें: ओपी से टिप्पणी के आधार पर, यहाँ एक अद्यतन जवाब है।

यदि आप बस अपने वेब सर्वर पर बिन फ़ोल्डर में डाली गई डीएलएल चोरी करने के बारे में चिंतित हैं, तो बस इसे \ bin के सबफ़ोल्डर पर प्रकाशित करें, विंडो अनुमतियों का उपयोग करके फ़ोल्डर को लॉक करें, इसलिए कोई नहीं है जिस तरह से वे इसमें शामिल हो सकते हैं, और इसकी जांच करने के लिए अपना web.config बदल सकते हैं।

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="bin;bin\mysubfolder;" /> 
    </assemblyBinding> 
</runtime> 

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

+0

यह मेरे प्रश्न का उत्तर नहीं देता है। यह रिवर्स इंजीनियरिंग नहीं है जिसके बारे में मुझे चिंता है। –

+0

आप और कैसे समझते हैं कि वे आपका कोड चुरा लेंगे? – womp

+0

+1 आपका अपडेट किया गया उत्तर बहुत दिलचस्प है, लेकिन मैंने गलत परिणाम प्रदर्शित करने के लिए डीएलएल को पहले ही बदल दिया है (जो कार्यान्वित करने के लिए सबसे आसान था)। जैसे ही मैं कर सकता हूं और बताऊंगा कि क्या आपकी कोई सुरक्षा चिंता है या नहीं। धन्यवाद –

4

यह अपनी स्थिति के लिए उपयुक्त नहीं हो सकता लेकिन आप उन्हें एक प्रॉक्सी DLL जो गणना प्रदर्शन नहीं करता लेकिन इसके बजाय अपने DLL कॉल के साथ प्रदान कर सकता है।

फिर आप किसी अन्य सर्वर कि केवल आप ही के लिए उपयोग और प्रॉक्सी DLL दूरस्थ प्रोटोकॉल के कुछ प्रकार के माध्यम से यह कहता है पर अपने DLL रहते हैं।

1

आप एक विश्वसनीय तृतीय पक्ष के लिए dll बात करने के लिए (जो शायद एक सर्वर आप के नियंत्रण के लिए होता होगा) हो सकता था एक छोटे से हाथ मिलाते हुए यकीन है कि इसे चलाने के लिए चाहिए था बनाने के लिए। की

A. Hey, I'm sitting at [hostname->taken from env vars], can i do my job? 
B. (checks records of registered hosts) Yes you can. 
A. Thanks. (does what it does best) 

संपादित पंक्तियों के साथ

कुछ: मोटे के , किसी और जानता है कि यदि आप इस कार्य कर रहे हैं, वे अपने द्वारा चयनित किसी मशीन के लिए दूरदराज के पते के लिए बाध्य कर सकता है ... और इस बिंदु पर आपने वास्तव में अपनी मूल समस्या को ठीक नहीं किया है।

+0

उस तरह की चीज एक दरार के लिए begs। हालांकि अभी भी उन्हें धीमा कर देगा। – womp

+0

ट्यूबों को एक धीमा कर सकता है अगर ट्यूब थोड़ा सुस्त। – nilamo

1

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

और यदि संभव हो तो केवल COM सर्वर Windows सेवा के माध्यम से या बाहर के प्रक्रिया अपने DLL का पर्दाफाश, ताकि आप अपने DLL जहां वे इसे सीधे उपयोग नहीं कर सकते अलग कर सकते हैं।

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

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

+0

हाँ वे एनडीए हस्ताक्षर किए हैं। लेकिन भारत में एक कानूनी सूट दशक (रों) व्यवस्थित करने के लिए ले जाता है। मैं ईस्टर अंडे दृष्टिकोण को अपनाया है, लेकिन DLL ASP.Net में उपयोग के लिए किया जाता है। अगर वे इसे रखा ऑनलाइन एक सर्वर पर, मैं इसे से कार्यों कॉल करने के लिए कुछ भी कर सकते नहीं। यह बिन में निवास करेंगे। मुझे लगता है कि मेरी सबसे अच्छी शर्त उन्हें सही DLL तक पहुँच प्राप्त नहीं है। –

+1

हाँ, मैं क्या मतलब है, तो था डीएलएल ने साइट से उपयोगकर्ता इनपुट की कोई प्रसंस्करण की। कोड की वास्तविक प्रकृति को जानने के बिना यह जानना मुश्किल है कि यह समझ में आता है, लेकिन यदि, उदाहरण के लिए, डीएलएल में इनपुट फॉर्म डेटा पर आधारित है जो उपयोगकर्ता इनपुट करता है, आपका कंड्यूट टी हो सकता है ओ ईस्टर अंडे का आह्वान करें, यदि डीएलएल का उत्पादन तब उपयोगकर्ता को प्रदर्शित किया जाता है। लेकिन यदि कानूनी सूट लंबे समय तक लेते हैं तो यह संभवतः एक महत्वपूर्ण बिंदु है, और मैं सहमत हूं कि उन्हें सही डीएलएल तक पहुंच नहीं देना शायद आपकी सबसे अच्छी शर्त है। – Gerald

1

मैं एक सुरक्षित सर्वर है कि आपके dll के कार्यों का पर्दाफाश होगा पर एक वेब सेवा बन जाएगा। एक बार विकास हो जाने के बाद आप कोड के उन हिस्सों को बदल सकते हैं जो वेब सेवा को सीधे डीएल कॉल करने के लिए कहते हैं।

+0

एक व्यवहार्य रणनीति की तरह लगता है, लेकिन इससे एमएम डेवलपर्स के लिए अंतराल में वृद्धि होगी। मैंने नकली डीएल (डीएलएल गलत परिणाम देता है), इसलिए मेरे देवताओं को कभी पता नहीं है कि वे प्लेसबो के साथ काम कर रहे हैं और अगर कोई इसे उत्पादन में रखने की कोशिश करता है तो उन्हें एक बुरा आश्चर्य मिलेगा। –

1

मैं LachlanG की रणनीति से सहमत बजाय अपने डेवलपर्स उत्पादन एक है कि आसानी से फटा जा सकता है और इंजीनियर उलट तक पहुंच देते हुए के एक प्रॉक्सी DLL वितरित करने के लिए।

एक अन्य विकल्प जिसे आप एक्सप्लोर कर सकते हैं वह है "डोंगल" को अपने डीएलएल की रक्षा करना। मेरी समस्या के समाधान के दौरान मैंने आपके प्रश्न के साथ ठोकर खाई। मैं इस विकल्प की खोज कर रहा हूं क्योंकि मैं एक ही स्थान पर हूं लेकिन अधिक कमजोर PHP आधारित समाधान के साथ भी।

मैंने पाया कि Keylok एक किफायती मूल्य कि मैं दृढ़ता से विचार कर रहा हूँ पर एक प्रतिस्पर्धी उत्पाद प्रदान करता है। यह अभी तक देखा जाना है कि PHP में एपीआई कॉल की रक्षा कैसे करें, जो कोड बाइनरी नहीं है और न ही obfuscated। मुझे डीएलएल के साथ कोई समस्या नहीं है।

मैं एक कंपनी है कि डोंगल के इन प्रकार के साथ उनके एसएपी एकीकरण सॉफ्टवेयर संरक्षित के लिए एक परियोजना प्रबंधक था। अंतिम उत्पाद एक सीडी था जिसमें कोड, इंस्टॉलेशन मैनुअल, डोंगल और $ 200k के लिए लाइसेंस बिल था। Sweeet !!! यह 10 साल पहले था, और मैंने अभी तक किसी भी चोरी या कॉपीराइट उल्लंघन कहानियों के बारे में नहीं सुना है!

मुझे आशा है कि इस मदद करता है।

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