कोड के लिए मामला


47

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

=========

पृष्ठभूमि:

यह इस विषय पर मेरी मान्यताओं को जानबूझकर चुनौती देने का एक प्रयास है।

मैं सामान्य रूप से कोड ऑब्सफेकेशन का उपयोग करने के खिलाफ बड़ा समय हूं, लेकिन अगर मुझे कुछ याद आ रहा है तो मैं उत्सुक हूं। मुझे ऐसा क्यों लगता है, जावास्क्रिप्ट जैसे मामलों में, मिनिमाइज़ेशन चीजों को तेज़ी से लोड करने में मदद करता है और सभी (वहाँ एक वास्तविक, कार्यात्मक लाभ होता है), लेकिन मैं एक एकल कारण के साथ आने के लिए प्रतीत नहीं कर सकता हूं कि कोड बाधा क्यों है, एक बाधा होने के उद्देश्य से। कोड / एल्गोरिथ्म का एक भाग क्या करता है , इसकी खोज करना वास्तव में किसी भी उद्देश्य के लिए प्रभावी है।

खुले स्रोत के लोकप्रिय होने के साथ, प्रश्न "कोड साझा करना, या इसे स्वामित्व रखना है?" जब वाणिज्यिक कोड की बात आती है, तो मैं समझ सकता हूं कि आप सब कुछ साझा क्यों नहीं कर सकते, और आपने चोरी से लड़ने के लिए कानून अपने पक्ष में ले लिया है।

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

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


3
मुझे लगता है कि आपने यह सब कहा है
पॉल


6
सीधे शब्दों में कहें, तो आपत्तिजनक रिवर्स इंजीनियरिंग के अर्थशास्त्र को आपके कोड में बदल देता है, इससे ज्यादा कुछ नहीं।
मार्क बूथ

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

क्या आप स्रोत कोड या ऑब्जेक्ट / निष्पादन योग्य कोड पर विचार या ध्यान केंद्रित कर रहे हैं ? उदाहरण के लिए, जिम्पेल सॉफ्टवेयर अपने सीप उपकरण के एक संस्करण को ओफ़्फ़िकेटेड सी सोर्स कोड में वितरित करता है, जैसे कि, आमतौर पर यूनिक्स, क्लाइंट इसे अपने इच्छित वातावरण में चलाने के लिए संकलित कर सकते हैं, बिना जिम्पल को लक्ष्य वातावरण के एन नंबर का समर्थन करने या बनाए रखने की आवश्यकता होती है। , ऑडबॉल या विरासत वातावरण सहित। यह कॉपी / डेटा सुरक्षा (जैसे अवैध नकल) के लिए उपयोग की जाने वाली वस्तु / निष्पादन योग्य ऑब्फ़ेसेशन से अलग है, रिवर्स इंजीनियरिंग में देरी / सुरक्षा के लिए सुरक्षा की एक परत के रूप में।
mctylr

जवाबों:


49

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

यह स्टेपोग्राफी का एक रूप है , जो क्रिप्टोग्राफिक योजनाओं के "गद्दार ट्रेसिंग" से प्रेरित और भिन्नता में है । मुझे कोई पता नहीं है अगर यह आम 1 है , या भले ही यह एक अच्छा विचार है, लेकिन मैंने देखा है कि यह निम्नलिखित मापदंडों के तहत अभ्यास में लागू होता है:

  • केवल दो विक्रेताओं के साथ अत्यधिक प्रतिस्पर्धी राष्ट्रव्यापी बाजार,
  • लगभग 50 तैनाती ने बाजार को कवर किया,
  • दोनों अनुप्रयोगों के लिए औसत विकास समय कुछ वर्ष (अधिक या कम) था,
  • हमारे आवेदन के लिए औसत आक्षेप समय कुछ घंटों का था,
  • दोनों आवेदनों के लिए उम्र लगभग दस वर्ष होने की उम्मीद थी।

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

मैं वास्तव में विस्तार नहीं कर सकता, क्योंकि (ए) यह मेरे करियर में बहुत शुरुआती था और मुझे डिजाइन निर्णयों या अनुरेखण योजना (यदि कोई हो) और (बी) के परिणामों में से कुछ का स्पष्ट अवलोकन नहीं मिला परियोजना एनडीए के अधीन थी।

आपत्ति के लिए एक और वैध उपयोग मामला तब हो सकता है जब आप किसी भी तरह से किसी तीसरे पक्ष को अपना कोड जमा करने के लिए कानूनी रूप से बाध्य हों :

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

चूंकि स्रोत कोड को व्यापार रहस्य माना जाता है, इसलिए अधिकांश नियामक एजेंसियां ​​"50%" नियम का उपयोग करती हैं। प्रस्तुत किया गया स्रोत कोड अस्पष्ट है, ताकि इसका उपयोग नहीं किया जा सके।

IANAL, और लिंक वास्तविक कार्य कोड के बजाय कोड की हार्ड कॉपी के लिए अधिक प्रासंगिक है, इसलिए यह पूरी तरह अप्रासंगिक हो सकता है।

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

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

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

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

1 इसे लिखने के बाद मुझे यह उत्तर मिला जो मूल रूप से एक ही योजना का वर्णन करता है, इसलिए यह अधिक सामान्य हो सकता है जो मैंने सोचा था।
2 हालांकि स्टेग्नोग्राफ़ी अभी भी अस्पष्टता के माध्यम से सुरक्षा है।
3 न्यूनतम ~ व्हाट्सएप को हटाना और टोकन को छोटा करना, जानबूझकर अस्पष्ट नहीं।
4 क्या इंटरनेशनल ऑबफसकेटेड सी कोड कॉन्टेस्ट काउंट होता है?


"यदि आप नहीं चाहते कि लोग आपके कार्यक्रम देखें, तो अपने सर्वर को अनप्लग करें।" - या सॉफ्टवेयर गार्ड एक्सटेंशन का उपयोग करें और इंटेल पर भरोसा करें।
user253751

40

कोड ऑब्सफैक्शन के लिए मामला यह है कि यह 3 पार्टी के लिए बार उठाता है ताकि यह निर्धारित किया जा सके कि कोड क्या / कैसे काम कर रहा है।

हालांकि, इसका मतलब यह नहीं है कि एक डेवलपर को कभी भी मोटे तौर पर कोड लिखना चाहिए।

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

कोड ऑब्सफैक्शन को आपके प्रोडक्शन बिल्ड में संकलन के दौरान पोस्ट प्रोसेसिंग चरण के रूप में होना चाहिए। ऐसा करने के लिए बहुत सारे 3 पार्टी उत्पाद हैं, इसलिए घर में ऐसा करने का लगभग कोई कारण नहीं है।

उदाहरण के लिए: Dotfuscator

आईईईई में कोड ओफ़्यूसेशन की प्रभावशीलता पर एक पेपर है

परिणाम बताते हैं कि पहचान ren एर का नाम बदलने के संकेत antly cantly कम से कम एक सफल हमले को पूरा करने के लिए आवश्यक समय (यहां तक ​​कि सबसे अच्छा हमलावर के खिलाफ, यानी, सबसे अच्छा हमलावर के खिलाफ) में हमलों की fi of क्षमता कम हो जाती है। इसके अलावा, ऑबफसिकेशन नौसिखिए और कुशल हमलावरों के बीच की खाई को कम करता है, जिससे उत्तरार्द्ध कम fi systems रोगी बन जाता है , और ऐसे सिस्टम बनाता है जो स्पष्ट रूप से हमला करने के लिए आसान होते हैं जो आंतरिक रूप से तोड़ने के लिए कठिन होते हैं।

जोर मेरा।


2
मैं यह +1 देता हूं, लेकिन लिंक के लिए एक पेड सब्सक्रिप्शन की आवश्यकता होती है, जिसे सभी पाठकों तक नहीं पहुंचना होगा।
मटनज़

हां, यह IEEE का दुर्भाग्यपूर्ण तथ्य है कि मैं पूरी तरह से खुश नहीं हूँ, लेकिन यह एक और विषय है
Dan McGrath

8
यहां सार्वजनिक रूप से सुलभ पीडीएफ संस्करण है । मुझे लगता है कि इसके बजाय इसका उपयोग करना ठीक है, यह कागज के लेखकों में से एक, मारियानो कैकेटो के मुखपृष्ठ पर है।
यानिस

शानदार खोज। मैंने इसके लिए Google विद्वान से खोज की थी, लेकिन यह नहीं मिला। मैंने लिंक अपडेट किया है।
दान मैकग्राथ

1
+1 के लिए "कोड ऑब्सफिकेशन (जावास्क्रिप्ट मिनिफिकेशन की तरह) नहीं है - और डेवलपर द्वारा मैन्युअल रूप से नहीं किया जाना चाहिए"
जोओ पोर्टेला

35

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

बेशक, ग्राहक को बड़ी दुनिया से बाहर भेजने से पहले, हमने इसे सुनिश्चित करना सुनिश्चित किया। हम मानते हैं कि ओफ़्फ़केशन के निम्नलिखित प्रभाव थे:

  1. इसने गैर-विशेषज्ञ हैकरों को भी प्रयास करने से रोक दिया।
  2. इसने किसी भी हैक को प्राप्त करने में विशेषज्ञ हैकरों की देरी की।
  3. इसने विशेषज्ञ हैकर्स द्वारा हासिल की गई हैक की संख्या को कम कर दिया।
  4. इसने हैक्स की प्रभावशीलता को सीमित कर दिया।
  5. सबसे महत्वपूर्ण बात: इससे हैकर्स ने काम करने वाली हैक हासिल करने से पहले अपने सर्वर के खिलाफ अपने हैक किए गए क्लाइंट्स के साथ अधिक टेस्ट रन बनाए, जिससे सर्वर लॉग्स में अनियमित गतिविधि को देखकर हमें उनकी खोज करने की संभावना बढ़ गई।

खोजे गए हैकर्स के गेम खातों को बिना रिफंड के समाप्त कर दिया गया था, इसलिए इससे हैकिंग व्यवसाय महंगा और कम आकर्षक हो गया।

इसलिए, उपरोक्त सभी के कारण, मेरा मानना ​​है कि हमारे खेल में obfuscation का समग्र सकारात्मक प्रभाव था, और विस्तार से, obfuscation किसी भी सॉफ्टवेयर के समग्र सकारात्मक प्रभाव हो सकता है जो हैक होने के लिए उत्तरदायी है। (उदाहरण के लिए, सॉफ़्टवेयर जिसमें प्रतिलिपि सुरक्षा उपाय हैं।)

रखरखाव पर जो प्रभाव थे, वे किसी के भी करीब नहीं थे। कुछ स्थानों पर कुछ अनुभवहीन प्रोग्रामर पहचानकर्ताओं के नामों के बारे में धारणा बना रहे थे, (वे प्रतिबिंब का उपयोग कर रहे थे), लेकिन एक बार जब वे हल हो गए तो सब कुछ ठीक था। ऑबफ्यूशन स्टेप सिर्फ गेम के प्रोडक्शन वर्जन के लिए समग्र बिल्ड स्टेप का हिस्सा बन गया, इसलिए हममें से ज्यादातर डेवलपर्स को कभी इसके बारे में चिंता करने या इससे कोई लेना-देना नहीं था। गेम के लॉग देखने के लिए हमारे पास पहले से ही एक उपकरण था, इसलिए हमने मक्खी पर हमारे लिए लॉग का अनुवाद करने के लिए ऑबफसकेटर द्वारा उत्पादित एसोसिएशन टेबल (उचित पहचान करने वालों के लिए मैप किए गए पहचानकर्ता का मानचित्रण) का उपयोग करने के लिए उपकरण को संशोधित किया, इसलिए हम कभी नहीं यहां तक ​​कि क्षेत्र से एकत्र लॉग के आधार पर पोस्टमार्टम परीक्षाएं करते समय किसी भी बाधित पहचानकर्ताओं को देखना था।


रखरखाव पर इसका क्या प्रभाव पड़ा?
डेवोरडे १०'१२

2
@deworde मैंने रखरखाव पर प्रभाव के प्रभाव के बारे में एक और पैराग्राफ के साथ अपना जवाब अपडेट किया।
माइक नाकिस

@ मायकेनकिस: डार्कफॉल? :-)
कार्सन 63000

@ कार्सन63000 हां। (और अपने अवतार पर LOL - जो कि चैनमेल है और क्या आप तलवार चला रहे हैं?)
माइक नाकिस

@ मायकेनीक्स: अच्छा! और अवतार पर हां - ठीक है, यह बुना हुआ चेनमेल और एक लकड़ी की तलवार है, जिस कंपनी के लिए मैंने काम किया था वह बैनर विज्ञापनों के लिए कुछ संपत्ति बना रही थी और कर्मचारियों को मॉडल किराए पर लेने के बजाय तैयार करने के लिए मिला था। :-)
कार्सन63000

3

पढ़ना और समझना (और स्पष्ट रूप से लिखना) मोटे कोड एक दिलचस्प मानसिक चुनौती हो सकती है। यह संभवतः आप जो पूछ रहे थे उसके दायरे से बाहर है, लेकिन IOCCC जैसे उदाहरण मनोरंजन के साथ-साथ डरावने भी हो सकते हैं।


3
यह वास्तव में सवाल पर टिप्पणी होनी चाहिए थी, जवाब नहीं।
दान मैकग्राथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.