2009-05-16 20 views
9

क्या आपने कभी अपना कोड पहले से खराब कर दिया है? क्या ऐसा करने के लिए कभी वैध कारण हैं?आप अपने कोड को क्यों रोकते हैं?

+0

मैं यह समझने में सहायता नहीं कर सकता कि इसे समझने के दो तरीके हैं: 1) हाथ obfuscated, और 2) मशीन obfuscated। शब्द के रूप में, सवाल दोनों धारणाओं के आधार पर प्रतिक्रियाओं को प्रोत्साहित कर रहा है। –

उत्तर

18

मैंने अपनी जावास्क्रिप्ट को obfuscated किया है। यह इसे छोटा बना देता है, इस प्रकार डाउनलोड के समय को कम करता है। इसके अतिरिक्त, चूंकि कोड क्लाइंट को सौंप दिया गया है, इसलिए मेरी कंपनी नहीं चाहती थी कि वे इसे पढ़ सकें।

+1

और आपने अपने मालिकों को यह नहीं बताया कि obfuscation उलटा है? यदि आपके पास ब्राउज़र में जावास्क्रिप्ट है, तो पृष्ठ तक पहुंच वाले प्रत्येक व्यक्ति को स्क्रिप्ट मिल सकती है। Obfuscation केवल एक छोटी बाधा है। – Mnementh

+4

मैं उन्हें बताता हूं, वे जो चाहते हैं उन्हें खरीदते हैं। कोड वैसे भी चोरी करने लायक नहीं है। – geowa4

+3

यह 20% बाधा शायद 80% स्टील्स के लिए पर्याप्त है। – lImbus

13

हां, इसे रिवर्स इंजीनियर के लिए कठिन बनाना।

+1

हां। कठिन, लेकिन असंभव नहीं है। :-) –

+14

हां हम सभी को कुछ अनावश्यक बनाने के लिए असंभव पता है। जैसे कि भवन के लिए 100% सुरक्षित होना असंभव है, हम अभी भी जितना संभव हो उतना प्रयास कर सकते हैं। – Unknown

+0

@Unkown - आपके छोटे और बिंदु के उत्तर के लिए +1 –

-1

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

यह आज से कहीं अधिक आम था। यह भी (निष्क्रिय?) Obfuscated सी प्रतियोगिता का नेतृत्व किया।

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

+0

वृद्धि। यदि यह सच था, तो क्या आपको इसे असेंबली के रूप में जारी करने से रोक रहा है? –

+3

Obfuscated स्रोत जीपीएल आवश्यकताओं का पालन नहीं करता है। जीपीएल -2 और जीपीएल -3 दोनों कहते हैं, "किसी काम के लिए स्रोत कोड का मतलब है कि इसमें संशोधन करने के लिए काम का पसंदीदा रूप है।" जाहिर है, यह obfuscated संस्करण नहीं है। और निश्चित रूप से असेंबली आउटपुट नहीं। – derobert

+0

मैंने ऐसी भाषा नहीं की थी, तो मैंने जांच नहीं की थी; निश्चित रूप से ऐसी रिलीज जीपीएल के इरादे का उल्लंघन करती है। मुझे संदेह है कि वहाँ काफी कानूनी ग्रे क्षेत्र है (टिप्पणियां अलग करना? बाहरी दस्तावेज सहित नहीं?) लेकिन असली obfuscation उस खंड का उल्लंघन करने लगते हैं। – jesup

6

मुझे विश्वास नहीं है कि रिवर्स इंजीनियरिंग कठिन बनाना वैध कारण है।

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

अन्य बिंदु, ऊपर बसे, यह है कि ज्यादातर ऑबफस्केटर भी optimisers जो अपने आवेदन के प्रदर्शन में सुधार कर सकते हैं कर रहे हैं।

+0

कारण मुझे नहीं लगता कि रिवर्स इंजीनियरिंग कठिन बनाना एक वैध कारण है कि यह कुछ कठिन बनाना इसे रोकने से नहीं रोकता है। –

+0

इसे कंपाइलर अनुकूलन कहा जाता है। तथ्य यह है कि यह obfuscate के लिए होता है एक साइड इफेक्ट है, मुख्य उद्देश्य नहीं। – Unknown

+5

ताले कारों को चोरी होने से नहीं रोकते हैं, लेकिन वे इसे कठिन बनाते हैं। किसी को वास्तव में एक औसत जो सिर्फ खुशी-खुशी की इच्छा रखने की बजाय कार चाहिए। Obfuscation कोड चोरी करने के लिए मुश्किल बनाता है। कोई भी जो वास्तव में चाहता है वह अभी भी करेगा, लेकिन यह आपकी औसत स्क्रिप्ट-किड्डी को रोक देगा। (-1) – bsneeze

0

मुझे ऑनलाइन बैकअप एप्लिकेशन के लिए एक विंडोज सेवा बनाना याद है जो .NET में बनाया गया था। मैं कक्षाओं और उसके अंदर स्रोत कोड देखने के लिए आसानी से विजुअल स्टूडियो या उपकरण जैसे .NET परावर्तक का उपयोग कर सकता हूं।

मैं एक नया दृश्य स्टूडियो टेस्ट आवेदन बनाया है और उसमें Windows सेवा संदर्भ गयी। संदर्भ पर डबल क्लिक किया गया और मैं सभी वर्गों को देख सकता हूं, सबकुछ नामस्थान (हालांकि स्रोत कोड नहीं)। कक्षा के नामों को देखकर कोई भी आपके मॉड्यूल के आंतरिक काम को समझ सकता है। मेरे मामले में, एक ऐसी कक्षा एफ़टीपी हैंडलर थी जो स्पष्ट रूप से बताती है कि बैकअप कहां जा रहे हैं।

.NET परावर्तक वास्तविक कोड दिखाकर उससे आगे चला जाता है। यहां तक ​​कि पूरे प्रोजेक्ट को निर्यात करने का विकल्प भी है ताकि आपको डेवलपर के समान सभी वर्गों और स्रोत कोड के साथ एक वीएस प्रोजेक्ट मिल सके।

मैं इसे समझ में आता है अंधेरा करना है, यह कम से कम किसी को एकत्रित न करने के लिए कठिन नहीं है, तो असंभव बनाने के लिए लगता है। इसके अलावा मुझे लगता है कि यह बड़े ग्राहक आधार से जुड़े उत्पादों के लिए समझ में आता है जहां आप नहीं चाहते हैं कि आपके प्रतिस्पर्धियों को आपके उत्पादों के बारे में अधिक जानकारी हो।

0

मैं ग्राहकों को जावा घुमाओ क्षुधा पहुंचाने करता हूं, तो मैं हमेशा वर्ग फ़ाइलों वितरण से पहले अंधेरा करना।

आप कभी भी सावधान नहीं रह सकते - मैंने एक बार अपने क्लासिक फाइलों पर एक सभ्य जावा डीकंपलर (मैंने जेडी जावा डीकंपलर - http://www.djjavadecompiler.com/ का उपयोग किया) को इंगित किया और मूल कोड के लगभग पूर्ण प्रजनन के साथ पुरस्कृत किया गया। यह बल्कि अचूक था, इसलिए मैंने तब से अपने उत्पादन कोड को खराब करना शुरू कर दिया। मैं Klassmaster स्वयं (http://www.zelix.com/klassmaster/)

+0

सवाल यह है कि आपको लगता है कि आप विघटन के कारण व्यवसाय खो देंगे? समुद्री डाकू किसी भी तरह से नकल की परवाह किए बिना इसकी प्रतिलिपि बनायेगा। वैध व्यापारिक ग्राहक एक तरफ या दूसरे की परवाह नहीं करेंगे। – PowerApp101

+0

हमारे पास ऐसे लोग हैं जो हमारे कोड को रिवर्स इंजीनियर करना चाहते हैं और एक प्रतिस्पर्धी उत्पाद डालना चाहते हैं। -आर – Huntrods

7

जीवन के लिए नौकरी सुनिश्चित करने के लिए, निश्चित रूप से (मजाक) का उपयोग करता हूं।

यह बहुत उल्लसित और शैक्षिक है: How to Write Unmaintanable Code

+0

https://github.com/Droogans/unmaintainable-code –

1

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

मुझे यकीन नहीं है कि केबल कार्ड अभी भी सिग्नल एन्क्रिप्शन को नियंत्रित करेगा और जावा कोड गाइड या जावा ऐप्स की बजाय वीडियो स्रोत से सीधे इसकी प्राधिकरण प्राप्त कर लेगा, लेकिन वे अवधारणा के लिए बहुत समर्पित हैं ।

वैसे, एक obfuscated ढेर से फेंक अपवादों का पता लगाने के लिए आसान नहीं है! मैं वास्तव में एक बिंदु पर याद किया कि एएच का मतलब किसी विशेष निर्माण के लिए "नल पॉइंटर अपवाद" था।

2

क्या यह अस्पष्टता के माध्यम से सुरक्षा के रूप में भी उपयोग नहीं किया जाता है? जब आपका स्रोत कोड सार्वजनिक रूप से उपलब्ध होता है (जावास्क्रिप्ट इत्यादि) तो आप कम से कम यह समझना मुश्किल हो सकते हैं कि वास्तव में क्लाइंट पक्ष पर क्या हो रहा है।

सुरक्षा हमेशा समझौता से भरा हुआ है। लेकिन मुझे लगता है कि अस्पष्टता से सुरक्षा कम से कम प्रभावी तरीकों में से एक है।

0

मेरे डिस्क ड्राइवर प्रोजेक्ट के लिए मैंने जो कुछ कोड लिखा था, उसे देखते हुए मुझे सवाल उठता है कि इसका क्या मतलब है।

((int8_t (*)(int32_t, void *)) hdd->_ctrl)(DISK_CMD_REQUEST, (void *) dr); 

या क्या यह सी में सिस्टम प्रोग्रामिंग है? या उस पंक्ति को अलग-अलग लिखा जाना चाहिए? प्रश्न ...

+0

यह बुरा नहीं है ... हालांकि वे फ़ंक्शन प्रकार पर टाइपिफ़ का उपयोग कर सकते थे। दूसरों के लिए, hdd -> _ ctrl एक ऐसा फ़ंक्शन है जो (int32_t, शून्य *) लेता है, और एक int8_t देता है। हम इसे वास्तविक पैरामीटर DISK_CMD_REQUEST और डॉ पास करते हैं। –

7

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

यदि आप करेंगे तो "obsfuscability के माध्यम से सुरक्षा" को कॉल करें।

+0

मुझे उम्मीद है कि आप विनोदी हैं: पी – shylent

+0

आपको कैसा लगा? :) (हाँ - मुझे लगता है कि मुझे इस तरह की चाल का सहारा लेने की आवश्यकता नहीं है) – StaxMan

0

हां और नहीं, मैंने ऐसे उपकरण के साथ ऐप्स वितरित नहीं किए हैं जो आसानी से अपरिवर्तनीय थे।

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

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