2010-09-18 17 views
6

मेरा नियोक्ता हमारे सभी .NET उत्पादन सॉफ़्टवेयर पर डॉटफुस्केटर का उपयोग करता है। इस वजह से, हम किसी भी अंतर्निहित डेटाबेस या किसी भी चीज जो संपत्ति/फ़ंक्शन नामों पर प्रतिबिंबित करते हैं, का उपयोग करने के लिए पूरी तरह से प्रतिबंधित हैं - क्योंकि डॉटफस्केटर उन्हें बदलता है और इसलिए कुछ भी तुरंत और अविश्वसनीय रूप से टूट जाता है।डाटाबेसिंग और कोड obfuscation

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

तो, ओबफुसेशन के साथ प्रतिबिंब कैसे करता है? चाल क्या है? संभवतः वाणिज्यिक obfuscators होना चाहिए जो समस्या के आसपास काम करने के लिए पर्याप्त बुद्धिमान हैं। हमारे संस्करण के लिए विकल्प क्या हैं (जो काफी बेवकूफ है)?

उत्तर

3

हमने डॉटफुस्केटर में कई सुधार किए हैं जो डाटाबेसिंग से संबंधित मुद्दों को कम करने में मदद कर सकते हैं। मार्च 2008 में स्मार्ट ऑब्फस्केशन कार्यक्षमता को 4.3.100 संस्करण में स्थिर रूप से असेंबली का विश्लेषण करने के लिए जोड़ा गया था और रनटाइम त्रुटियों के कारण ज्ञात नामकरण/हटाने से वस्तुओं को स्वचालित रूप से बाहर कर दिया गया था। हमने लगातार इस कार्यक्षमता का विस्तार और विस्तार किया है और आज के डॉटफुस्केटर मानक डेटा बाइंडिंग परिदृश्यों के आसपास काम करता है, आमतौर पर न्यूनतम अतिरिक्त कॉन्फ़िगरेशन के साथ नहीं।

भले ही स्मार्ट Obfuscation आपके परिदृश्यों में से प्रत्येक को पकड़ नहीं लेता है, भले ही कस्टम बहिष्करण नियमों (RegEx पैटर्न द्वारा मिलान प्रकार सहित) का उपयोग कर कुछ प्रकार या विरासत पदानुक्रमों के गुणों को बाहर करने के लिए कस्टम नियमों को परिभाषित करना बहुत आसान है। आप System.Reflection.ObfuscationAttribute विशेषता के साथ आइटम को सजाने के लिए भी यह सुनिश्चित कर सकते हैं कि उन्हें डॉटफुस्केटर के माध्यम से चलाने के दौरान नामकरण या हटाने से बाहर रखा जाएगा।

यदि आप एक्सएएमएल मार्कअप से बाध्यकारी हैं तो कोडबैंड में टाइप करने के लिए पिछले कुछ रिलीज ने कोड को पीछे से मिलान करने के लिए एक्सएएमएल/बीएएमएल का नाम बदलने का समर्थन किया है। यह समग्र सख्तता में सुधार करता है और मुद्दों की पूरी श्रृंखला को भी समाप्त करता है जब मार्कअप में प्रतीकों कोड परिभाषाओं से मेल नहीं खाते हैं।

मैं आपके अनुप्रयोगों में जो कुछ भी उपयोग करना चाहता हूं उसके समान डाटाबेसिंग का उपयोग करके अवधारणा अनुप्रयोगों के कुछ सरल प्रमाणों को काम करने की सलाह दूंगा और यह देखने के लिए कि यह उन्हें कितनी अच्छी तरह से संभालने के लिए चला रहा है। यदि आपको कोई परिदृश्य मिलते हैं जहां स्मार्ट Obfuscation स्वचालित रूप से डेटा बाध्यकारी के लक्ष्य को छोड़ नहीं रहा है तो उन्हें [email protected] पर भेजें। हम हमेशा उत्पाद को बेहतर बनाने के लिए अच्छी तरह से परिभाषित परिदृश्य की तलाश में हैं।

+0

धन्यवाद जो, यह वास्तव में सहायक है। अब मैं कई कारणों से थोड़ा भेड़िया महसूस करता हूं: i) मैंने अपनी प्रारंभिक पोस्ट में डॉटफुस्केटर में एक मामूली स्वाइप शामिल किया, जिसे मुझे खेद है; ii) हम एक बहुत पुराने संस्करण का उपयोग कर रहे हैं (मैं भूल जाता हूं, लेकिन यह आपके द्वारा उल्लिखित चीजें नहीं करता है) और iii) हालांकि मैं इसके बारे में शिकायत कर रहा हूं, यह मेरी कॉल नहीं है, और मैं ' इस तरह से इस क्षेत्र के प्रभारी मेरे सहयोगी को कुछ भी नया अपनाने या किसी भी तरह से अपनी रणनीति बदलने के लिए राजी करने में असमर्थ रहा है। –

+0

एक परिशिष्ट के रूप में; क्या मैं यह मानने के लिए सुरक्षित हूं कि 4.3 सामुदायिक संस्करण में यह कार्यक्षमता शामिल है, और यह केवल एकमात्र सुविधा नहीं है? नकदी के साथ भाग लेने के लिए प्रबंधन को दृढ़ करना कभी सीधा नहीं है। –

+0

स्मार्ट Obfuscation के बिना भी आप संस्करण 1.0 से कस्टम बहिष्करण नियम (RegEx मैचों सहित) बनाने में सक्षम हैं। यह मैन्युअल काम का थोड़ा सा है लेकिन निश्चित रूप से संभव है। डॉटफुस्केटर के मुफ़्त संस्करण में स्मार्ट ओबस्क्यूशन संस्करण 5.0 में उपलब्ध है जो विजुअल स्टूडियो 2010 के साथ भेज दिया गया है। –

0

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

नामकरण गुण केवल obfuscation की डिग्री शून्य है। एक नॉनट्रिविअल ओबफ्यूसेटर दो चीजों में एक संपत्ति को विभाजित करने जैसी चीजें भी करेगा, ताकि स्रोत कोड केवल एक संपत्ति पी का उल्लेख करे, कुछ रनटाइम कोड पी 1 का उपयोग करेंगे, और कुछ रनटाइम कोड पी 2 का उपयोग करेंगे, और पर्याप्त होगा उनके बीच असाइनमेंट ताकि आवश्यक होने पर गुणों का सही मूल्य हो, लेकिन परजीवी असाइनमेंट भी हो ताकि जब उनकी आवश्यकता न हो तो उनके पास सही मूल्य नहीं होगा। यह सिर्फ इतना है कि पी का नाम बदला नहीं कर रहा है की गई है: वहाँ नहीं रह गया है है एक संपत्ति पी

तुम क्यों लगता है कि प्रतिबिंब प्लस कहानियो "व्यापक और मौलिक" है मैं नहीं जानता: दोनों प्रतिबिंब कहानियो काफी हैं प्रोग्रामिंग की भव्य योजना में दुर्लभ है, और उनके उपयोग के बीच कोई सहसंबंध नहीं है, इसलिए मुझे नहीं लगता कि कई लोग दोनों की कोशिश कर रहे हैं।

प्रतिबिंब की कमी उन चीजों की लंबी सूची में केवल एक आइटम होने की कमी है जो आपको परेशान करती हैं। यदि वह व्यक्ति जिसने obfuscation का उपयोग करने का फैसला किया है, वह एक सुरक्षा मेवेन नहीं है, तो उसे उसमें हथियाने की कोशिश करें कि obfuscation की बहुत अधिक लागत है जिसे वे अविकसित मानते हैं।

+0

मुझे लगता है कि मैं काफी नेट-सेंट्रिक हूं - जो हमारे व्यवसाय के लिए काम करता है जैसे हम नेट पर विकसित होते हैं। मुख्य डेवलपर बिल्कुल जोरदार है कि हमें सबकुछ खराब करना होगा; उन्हें सबसे अच्छे समय पर राजी करना मुश्किल होता है और विशेष रूप से यह राय एक है जो वह एक अंगूठी की तरह चिपक जाती है। जैसा कि मैंने इसे देखा, बाध्यकारी अनिवार्य है जब भी आप एक एमवीसी आर्किटेक्चर का उपयोग करना चाहते हैं और इससे इसका उपयोग रोकता है। मुझे लगता है कि हम खुद को पैर में शूटिंग कर रहे हैं, लेकिन मैं obfuscation के लिए तर्कों को पहचानता हूं। यह हमारे अनुप्रयोगों को अपनाने वाले लोगों की अनिवार्यता को स्वीकार करने के लिए व्यावसायिक संस्कृति में बदलाव करेगा। –

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