ऑबफसकेशन (सॉफ़्टवेयर)

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

अवलोकन
कुछ लैंग्वेज की आर्किटेक्वेरिएबल और विशेषताएं उन्हें दूसरों की तुलना में ऑबफसकेशन करना सरल बना सकती हैं। सी (प्रोग्रामिंग लैंग्वेज ), C++,  और पर्ल प्रोग्रामिंग लैंग्वेज ऐसी लैंग्वेज के कुछ उदाहरण हैं जिन्हें ऑबफसकेशन करना सरल है। हास्केल (प्रोग्रामिंग लैंग्वेज ) संरचना में अधिक भिन्न होने के अतिरिक्त हास्केल भी अधिक ऑबफसकेशन है

वे गुण जो किसी लैंग्वेज को ऑबफसकेशन बनाते हैं वे तुरंत स्पष्ट नहीं होते हैं।

टेक्नीक
ऑबफसकेशन के प्रकारों में सरल कीवर्ड सब्स्टिटूशन, आर्टिस्टिक इफ़ेक्ट बनाने के लिए व्हाइटस्पेस का उपयोग या गैर-उपयोग, और स्व-उत्पन्न या भारी कंप्रेस्ड प्रोग्राम सम्मिलित हैं।

निक मोंटफोर्ट के अनुसार, तकनीकों में सम्मिलित हो सकते हैं:
 * 1) नेमिंग ऑबफसकेशन, जिसमें अर्थहीन या ऑबफसकेशन विधि से वेरिएबल का नेमिंग सम्मिलित है;
 * 2) डेटा/कोड/टिप्पणी अस्पष्ट, जिसमें कुछ वास्तविक कोड को टिप्पणियों जैसा बनाना या डेटा के साथ ऑबफसकेशन करने वाला सिंटैक्स बनाना सम्मिलित है;
 * 3) डबल कोडिंग, जो काव्य रूप या रौचक आकृतियों में कोड प्रदर्शित कर सकती है।

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

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


 * कुछ पायथन (प्रोग्रामिंग लैंग्वेज ) उदाहरण आधिकारिक पायथन प्रोग्रामिंग FAQ और अन्यत्र पाए जा सकते हैं।
 * X86|x86_32 ISA के लिए mov fuscator C (प्रोग्रामिंग लैंग्वेज ) कम्पाइलर ऑबफसकेशन करने के लिए केवल X86 निर्देश सूची निर्देश का उपयोग करता है।

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

पर्ल प्रोग्रामर्स के सिग्नेचर में लघु ऑबफसकेशन पर्ल प्रोग्राम का उपयोग किया जा सकता है। ये जेएपीएच (केवल एक और पर्ल हैकर) हैं।

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

ऑबफसकेशन के हानि

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

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

मोज़िला और गूगल अपने ऐड-ऑन स्टोर में ऑबफसकेशन कोड वाले ब्राउज़र एक्सटेंशन को अनुमति नहीं देते हैं।

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

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

मॉडल ऑबफसकेशन
मॉडल ऑबफस्केशन मशीन लर्निंग मॉडल की आंतरिक संरचना को छिपाने की एक तकनीक है। ऑबफसकेशन एक मॉडल को ब्लैक बॉक्स में बदल देती है। यह समझाने योग्य एआई के विपरीत है।

यह भी देखें

 * एएआरडी कोड
 * स्पेगेटी कोड
 * राईट ओनली लैंग्वेज
 * डीकम्पाइलर
 * एसोटेरिक प्रोग्रामिंग लैंग्वेज
 * क्विन (कंप्यूटिंग)
 * ओवरलैपिंग निर्देश
 * बहुरूपी कोड
 * हार्डवेयर अस्पष्टता
 * अंडरहैंडेड सी प्रतियोगिता
 * सोर्स-से-सोर्स कम्पाइलर
 * प्रोगार्ड (सॉफ्टवेयर)|प्रोगार्ड (जावा ऑबफस्केटर)
 * डॉटफस्केटर|डॉटफस्केटर (.नेट ऑबफस्केटर)
 * डिजिटल अधिकार प्रबंधन
 * अविभाज्यता अस्पष्टता
 * सोर्स कोड बीयूटीफिकेशन

अग्रिम पठन

 * Seyyedhamzeh, Javad, ABCME: A Novel Metamorphic Engine, 17th National Computer Conference, Sharif University of Technology, Tehran, Iran, 2012.
 * B. Barak, O. Goldreich, R. Impagliazzo, S. Rudich, A. Sahai, S. Vadhan and K. Yang. "On the (Im)possibility of Obfuscating Programs". 21st Annual International Cryptology Conference, Santa Barbara, California, USA. Springer Verlag LNCS Volume 2139, 2001.

बाहरी संबंध

 * The International Obfuscated C Code Contest
 * Protecting Java Code Via Code Obfuscation, ACM Crossroads, Spring 1998 issue
 * Can we obfuscate programs?
 * Yury Lifshits. Lecture Notes on Program Obfuscation (Spring'2005)
 * BlackBoxComputation
 * BlackBoxComputation

Ofuscación