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

From Vigyanwiki
No edit summary
No edit summary
Line 5: Line 5:
{{Information security}}
{{Information security}}


सॉफ़्टवेयर विकास में, ऑबफसकेशन सोर्स कोड या [[मशीन कोड]] बनाने का कार्य है जिसे मनुष्य या कंप्यूटर के लिए समझना कठिन होता है। [[प्राकृतिक भाषा|प्राकृतिक लैंग्वेज]] में ऑबफसकेशन की तरह, यह कथन लिखने के लिए अनावश्यक रूप से राउंडएबलआउट अभिव्यक्तियों का उपयोग कर सकता है। प्रोग्रामर डेलिबर्टेली कोड को उसके उद्देश्य ([[अस्पष्टता के माध्यम से सुरक्षा|ऑबफसकेशन के माध्यम से सुरक्षा]]) या उसके लॉजिक या उसमें निहित अंतर्निहित मानो को छिपाने के लिए ऑबफसकेशन कर सकते हैं, मुख्य रूप से टेम्पेरिंग को रोकने, [[रिवर्स इंजीनियरिंग]] को रोकने या यहां तक ​​कि सोर्स कोड पढ़ने वाले किसी व्यक्ति के लिए एक [[पहेली]] या रिक्रेएशनल चैलेंज बनाने के लिए यह मैन्युअल रूप से या स्वचालित टूल का उपयोग करके किया जा सकता है, इसके बाद वाला इंडस्ट्री में पसंदीदा तकनीक है।<ref>{{Cite web|url=https://searchsoftwarequality.techtarget.com/definition/obfuscation|title=What is obfuscation (obfu)? - Definition from WhatIs.com|website=SearchSoftwareQuality|language=en|access-date=2019-02-01}}</ref>
सॉफ़्टवेयर विकास में, ऑबफसकेशन सोर्स कोड या [[मशीन कोड]] बनाने का कार्य है जिसे मनुष्य या कंप्यूटर के लिए समझना कठिन होता है। [[प्राकृतिक भाषा|प्राकृतिक लैंग्वेज]] में ऑबफसकेशन की तरह, यह कथन लिखने के लिए अनावश्यक रूप से राउंडएबलआउट अभिव्यक्तियों का उपयोग कर सकता है। प्रोग्रामर डेलिबर्टेली कोड को उसके उद्देश्य ([[अस्पष्टता के माध्यम से सुरक्षा|ऑबफसकेशन के माध्यम से सुरक्षा]]) या उसके लॉजिक या उसमें निहित अंतर्निहित मानो को छिपाने के लिए ऑबफसकेशन कर सकते हैं, मुख्य रूप से टेम्पेरिंग को रोकने, [[रिवर्स इंजीनियरिंग]] को रोकने या यहां तक ​​कि सोर्स कोड पढ़ने वाले किसी व्यक्ति के लिए एक [[पहेली]] या रिक्रेएशनल चैलेंज बनाने के लिए यह मैन्युअल रूप से या स्वचालित टूल का उपयोग करके किया जा सकता है, इसके बाद वाला इंडस्ट्री में पसंदीदा तकनीक है।<ref>{{Cite web|url=https://searchsoftwarequality.techtarget.com/definition/obfuscation|title=What is obfuscation (obfu)? - Definition from WhatIs.com|website=SearchSoftwareQuality|language=en|access-date=2019-02-01}}</ref>




==अवलोकन==
==अवलोकन==
कुछ लैंग्वेज की आर्किटेक्वेरिएबल और विशेषताएं उन्हें दूसरों की तुलना में ऑबफसकेशन करना सरल बना सकती हैं।<ref>{{cite web|last=Binstock |first=Andrew |url=http://www.devx.com/microsoftISV/Article/11351 |title=Obfuscation: Cloaking your Code from Prying Eyes |date=2003-03-06 |access-date=2013-11-25 |url-status=dead |archive-url=https://web.archive.org/web/20080420165109/http://www.devx.com/microsoftISV/Article/11351 |archive-date=April 20, 2008 }}</ref><ref>{{cite web|last=Atwood |first=Jeff |url=http://www.codinghorror.com/blog/archives/000291.html |title=Jeff Atwood, May 15, 2005 |publisher=Codinghorror.com |date=2005-05-15 |access-date=2013-11-25}}</ref> [[सी (प्रोग्रामिंग भाषा)|सी (प्रोग्रामिंग लैंग्वेज )]],<ref>{{cite web |url=http://www.kenter.demon.nl/obfuscate.html |title=कहानियो|publisher=Kenter.demon.nl |access-date=2013-11-25 |archive-url=https://web.archive.org/web/20160304033430/http://www.kenter.demon.nl/obfuscate.html |archive-date=March 4, 2016 |url-status=dead }}</ref> [[सी++|C++]],<ref>{{cite web|url=http://www.dreamincode.net/forums/index.php?showtopic=38102 |title=C++ Tutorials – Obfuscated Code – A Simple Introduction |publisher=DreamInCode.net |access-date=2013-11-25}}</ref><ref>{{cite web|url=http://sites.google.com/site/rcorcs/posts/obfuscatedcode |title=C Tutorials – Obfuscated Code in C |date=2011-07-07 |access-date=2013-11-25}}</ref> और [[पर्ल]] [[प्रोग्रामिंग भाषा|प्रोग्रामिंग लैंग्वेज]] <ref>{{cite web|author=As of 2013-11-25 18:22 GMT |url=http://www.perlmonks.org/index.pl?node_id=291267 |title=लाइन शोर में पीई(ए)आरएल|publisher=Perlmonks.org |access-date=2013-11-25}}</ref> ऐसी लैंग्वेज के कुछ उदाहरण हैं जिन्हें ऑबफसकेशन करना सरल है। [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल (प्रोग्रामिंग लैंग्वेज )]] संरचना में अधिक भिन्न होने के अतिरिक्त हास्केल भी अधिक ऑबफसकेशन है<ref>{{cite web|url=https://wiki.haskell.org/Obfuscation |title=Obfuscation – Haskell Wiki |date=2006-02-16 |access-date=2020-03-03 |url-status=live |archive-url=https://web.archive.org/web/20170830203204/https://wiki.haskell.org/Obfuscation |archive-date=August 30, 2017 }}</ref>  
कुछ लैंग्वेज की आर्किटेक्वेरिएबल और विशेषताएं उन्हें दूसरों की तुलना में ऑबफसकेशन करना सरल बना सकती हैं।<ref>{{cite web|last=Binstock |first=Andrew |url=http://www.devx.com/microsoftISV/Article/11351 |title=Obfuscation: Cloaking your Code from Prying Eyes |date=2003-03-06 |access-date=2013-11-25 |url-status=dead |archive-url=https://web.archive.org/web/20080420165109/http://www.devx.com/microsoftISV/Article/11351 |archive-date=April 20, 2008 }}</ref><ref>{{cite web|last=Atwood |first=Jeff |url=http://www.codinghorror.com/blog/archives/000291.html |title=Jeff Atwood, May 15, 2005 |publisher=Codinghorror.com |date=2005-05-15 |access-date=2013-11-25}}</ref> [[सी (प्रोग्रामिंग भाषा)|सी (प्रोग्रामिंग लैंग्वेज )]],<ref>{{cite web |url=http://www.kenter.demon.nl/obfuscate.html |title=कहानियो|publisher=Kenter.demon.nl |access-date=2013-11-25 |archive-url=https://web.archive.org/web/20160304033430/http://www.kenter.demon.nl/obfuscate.html |archive-date=March 4, 2016 |url-status=dead }}</ref> [[सी++|C++]],<ref>{{cite web|url=http://www.dreamincode.net/forums/index.php?showtopic=38102 |title=C++ Tutorials – Obfuscated Code – A Simple Introduction |publisher=DreamInCode.net |access-date=2013-11-25}}</ref><ref>{{cite web|url=http://sites.google.com/site/rcorcs/posts/obfuscatedcode |title=C Tutorials – Obfuscated Code in C |date=2011-07-07 |access-date=2013-11-25}}</ref> और [[पर्ल]] [[प्रोग्रामिंग भाषा|प्रोग्रामिंग लैंग्वेज]] <ref>{{cite web|author=As of 2013-11-25 18:22 GMT |url=http://www.perlmonks.org/index.pl?node_id=291267 |title=लाइन शोर में पीई(ए)आरएल|publisher=Perlmonks.org |access-date=2013-11-25}}</ref> ऐसी लैंग्वेज के कुछ उदाहरण हैं जिन्हें ऑबफसकेशन करना सरल है। [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल (प्रोग्रामिंग लैंग्वेज )]] संरचना में अधिक भिन्न होने के अतिरिक्त हास्केल भी अधिक ऑबफसकेशन है<ref>{{cite web|url=https://wiki.haskell.org/Obfuscation |title=Obfuscation – Haskell Wiki |date=2006-02-16 |access-date=2020-03-03 |url-status=live |archive-url=https://web.archive.org/web/20170830203204/https://wiki.haskell.org/Obfuscation |archive-date=August 30, 2017 }}</ref>  


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


== टेक्नीक ==
== टेक्नीक ==
{{Expand section|date=March 2023|explaining more obfuscation techniques in general}}
ऑबफसकेशन के प्रकारों में सरल कीवर्ड सब्स्टिटूशन, आर्टिस्टिक इफ़ेक्ट बनाने के लिए व्हाइटस्पेस का उपयोग या गैर-उपयोग, और स्व-उत्पन्न या भारी कंप्रेस्ड प्रोग्राम सम्मिलित हैं।
ऑबफसकेशन के प्रकारों में सरल कीवर्ड सब्स्टिटूशन, आर्टिस्टिक इफ़ेक्ट बनाने के लिए व्हाइटस्पेस का उपयोग या गैर-उपयोग, और स्व-उत्पन्न या भारी कंप्रेस्ड प्रोग्राम सम्मिलित हैं।


[[निक मोंटफोर्ट]] के अनुसार, तकनीकों में सम्मिलित हो सकते हैं:
[[निक मोंटफोर्ट]] के अनुसार, तकनीकों में सम्मिलित हो सकते हैं:
# नेमिंग ऑबफसकेशन, जिसमें अर्थहीन या ऑबफसकेशन विधि से वेरिएबल का नेमिंग सम्मिलित है;
# नेमिंग ऑबफसकेशन, जिसमें अर्थहीन या ऑबफसकेशन विधि से वेरिएबल का नेमिंग सम्मिलित है;
# डेटा/कोड/टिप्पणी अस्पष्ट, जिसमें कुछ वास्तविक कोड को टिप्पणियों जैसा बनाना या डेटा के साथ ऑबफसकेशन करने वाला सिंटैक्स बनाना सम्मिलित है;
# डेटा/कोड/टिप्पणी अस्पष्ट, जिसमें कुछ वास्तविक कोड को टिप्पणियों जैसा बनाना या डेटा के साथ ऑबफसकेशन करने वाला सिंटैक्स बनाना सम्मिलित है;
# डबल कोडिंग, जो काव्य रूप या रौचक आकृतियों में कोड प्रदर्शित कर सकती है।<ref>{{cite web |last=Montfort |first=Nick |title=अस्पष्ट कोड|url=http://obfuscationsymposium.org/wp-content/uploads/2014/01/Montfort__Obfuscated_Code.pdf |url-status=dead |archive-url=https://web.archive.org/web/20190424012657/http://obfuscationsymposium.org/wp-content/uploads/2014/01/Montfort__Obfuscated_Code.pdf |archive-date=April 24, 2019 |access-date=2017-11-24}}</ref>
# डबल कोडिंग, जो काव्य रूप या रौचक आकृतियों में कोड प्रदर्शित कर सकती है।<ref>{{cite web |last=Montfort |first=Nick |title=अस्पष्ट कोड|url=http://obfuscationsymposium.org/wp-content/uploads/2014/01/Montfort__Obfuscated_Code.pdf |url-status=dead |archive-url=https://web.archive.org/web/20190424012657/http://obfuscationsymposium.org/wp-content/uploads/2014/01/Montfort__Obfuscated_Code.pdf |archive-date=April 24, 2019 |access-date=2017-11-24}}</ref>
Line 24: Line 23:


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


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


*कुछ [[पायथन (प्रोग्रामिंग भाषा)|पायथन (प्रोग्रामिंग लैंग्वेज )]] उदाहरण [https://docs.python.org/3/faq/programming.html#is-it-possible-to-write-obfuscated-one-liners-in-python आधिकारिक पायथन प्रोग्रामिंग FAQ] और अन्यत्र पाए जा सकते हैं।<ref>{{cite web |author=Ben Kurtovic |title=अस्पष्ट "हैलो वर्ल्ड!"|url=https://benkurtovic.com/2014/06/01/obfuscating-hello-world.html |website=benkurtovic.com}}</ref><ref>{{cite web |date= |title=अस्पष्ट अजगर|url=http://wiki.c2.com/?ObfuscatedPython |website=wiki.c2.com}}</ref><ref>{{cite web |title=पहली वार्षिक अस्पष्ट पायथन सामग्री|url=https://code.activestate.com/lists/python-list/16171/ |website=code.activestate.com}}</ref>
*कुछ [[पायथन (प्रोग्रामिंग भाषा)|पायथन (प्रोग्रामिंग लैंग्वेज )]] उदाहरण [https://docs.python.org/3/faq/programming.html#is-it-possible-to-write-obfuscated-one-liners-in-python आधिकारिक पायथन प्रोग्रामिंग FAQ] और अन्यत्र पाए जा सकते हैं।<ref>{{cite web |author=Ben Kurtovic |title=अस्पष्ट "हैलो वर्ल्ड!"|url=https://benkurtovic.com/2014/06/01/obfuscating-hello-world.html |website=benkurtovic.com}}</ref><ref>{{cite web |date= |title=अस्पष्ट अजगर|url=http://wiki.c2.com/?ObfuscatedPython |website=wiki.c2.com}}</ref><ref>{{cite web |title=पहली वार्षिक अस्पष्ट पायथन सामग्री|url=https://code.activestate.com/lists/python-list/16171/ |website=code.activestate.com}}</ref>
* X86|x86_32 ISA के लिए mov fuscator C (प्रोग्रामिंग लैंग्वेज ) [[ संकलक | कम्पाइलर]] ऑबफसकेशन करने के लिए केवल X86 निर्देश सूची निर्देश का उपयोग करता है।<ref>{{Citation |last=domas |title=xoreaxeaxeax/movfuscator |date=2022-11-03 |url=https://github.com/xoreaxeaxeax/movfuscator |access-date=2022-11-05}}</ref><ref>{{Citation |title=Break Me00 The MoVfuscator Turning mov into a soul crushing RE nightmare Christopher Domas |url=https://www.youtube.com/watch?v=R7EEoWg6Ekk |access-date=2022-11-05 |language=en}}</ref>
* X86|x86_32 ISA के लिए mov fuscator C (प्रोग्रामिंग लैंग्वेज ) [[ संकलक |कम्पाइलर]] ऑबफसकेशन करने के लिए केवल X86 निर्देश सूची निर्देश का उपयोग करता है।<ref>{{Citation |last=domas |title=xoreaxeaxeax/movfuscator |date=2022-11-03 |url=https://github.com/xoreaxeaxeax/movfuscator |access-date=2022-11-05}}</ref><ref>{{Citation |title=Break Me00 The MoVfuscator Turning mov into a soul crushing RE nightmare Christopher Domas |url=https://www.youtube.com/watch?v=R7EEoWg6Ekk |access-date=2022-11-05 |language=en}}</ref>




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


पर्ल प्रोग्रामर्स के [[ हस्ताक्षर खंड | सिग्नेचर]] में लघु ऑबफसकेशन पर्ल प्रोग्राम का उपयोग किया जा सकता है। ये जेएपीएच (केवल एक और पर्ल हैकर) हैं।<ref>{{cite web |url=http://rochester.pm.org/talks/japh_discussion.txt |title=JAPH – Just Another Perl Hacker |author=<!--Staff writer(s); no by-line.--> |website=pm.org |publisher=Perl Mongers |archive-url=https://web.archive.org/web/20130516074850/http://rochester.pm.org/talks/japh_discussion.txt |archive-date=16 May 2013 |access-date=27 February 2015 }}</ref>
पर्ल प्रोग्रामर्स के [[ हस्ताक्षर खंड |सिग्नेचर]] में लघु ऑबफसकेशन पर्ल प्रोग्राम का उपयोग किया जा सकता है। ये जेएपीएच (केवल एक और पर्ल हैकर) हैं।<ref>{{cite web |url=http://rochester.pm.org/talks/japh_discussion.txt |title=JAPH – Just Another Perl Hacker |author=<!--Staff writer(s); no by-line.--> |website=pm.org |publisher=Perl Mongers |archive-url=https://web.archive.org/web/20130516074850/http://rochester.pm.org/talks/japh_discussion.txt |archive-date=16 May 2013 |access-date=27 February 2015 }}</ref>




Line 59: Line 58:


=== ऑबफसकेशन और [[कॉपीलेफ्ट]] लाइसेंस ===
=== ऑबफसकेशन और [[कॉपीलेफ्ट]] लाइसेंस ===
इस बात पर बहस चल रही है कि क्या सोर्स कोड को ऑबफसकेशन रूप में प्रसारित करके कॉपीलेफ्ट [[सॉफ़्टवेयर लाइसेंस]] को समाप्त करना अवैध है, जैसे कि ऐसे स्थिति में जहां लेखक सोर्स कोड उपलब्ध कराने के लिए कम इच्छुक है। इस उद्देश्य को [[जीएनयू जनरल पब्लिक लाइसेंस]] में संशोधनों को उपलब्ध कराने के लिए पसंदीदा फॉर्म की आवश्यकता के द्वारा संबोधित किया गया है।<ref>{{cite web |title=जीपीएल में "कार्य में संशोधन करने के लिए कार्य के पसंदीदा स्वरूप" भाषा के पीछे तर्क|url=https://lwn.net/Articles/431651/ |access-date=2013-11-25 |publisher=Lwn.net}}</ref> जीएनयू वेबसाइट बताती है कि ऑबफसकेशन 'सोर्स कोड' वास्तविक सोर्स कोड नहीं है और इसे सोर्स कोड के रूप में नहीं गिना जाता है।<ref>{{cite web |title=What is free software? |url=https://www.gnu.org/philosophy/free-sw.html |access-date=2014-12-18 |publisher=gnu.org}}</ref>
इस बात पर बहस चल रही है कि क्या सोर्स कोड को ऑबफसकेशन रूप में प्रसारित करके कॉपीलेफ्ट [[सॉफ़्टवेयर लाइसेंस]] को समाप्त करना अवैध है, जैसे कि ऐसे स्थिति में जहां लेखक सोर्स कोड उपलब्ध कराने के लिए कम इच्छुक है। इस उद्देश्य को [[जीएनयू जनरल पब्लिक लाइसेंस]] में संशोधनों को उपलब्ध कराने के लिए पसंदीदा फॉर्म की आवश्यकता के द्वारा संबोधित किया गया है।<ref>{{cite web |title=जीपीएल में "कार्य में संशोधन करने के लिए कार्य के पसंदीदा स्वरूप" भाषा के पीछे तर्क|url=https://lwn.net/Articles/431651/ |access-date=2013-11-25 |publisher=Lwn.net}}</ref> जीएनयू वेबसाइट बताती है कि ऑबफसकेशन 'सोर्स कोड' वास्तविक सोर्स कोड नहीं है और इसे सोर्स कोड के रूप में नहीं गिना जाता है।<ref>{{cite web |title=What is free software? |url=https://www.gnu.org/philosophy/free-sw.html |access-date=2014-12-18 |publisher=gnu.org}}</ref>




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


== मॉडल ऑबफसकेशन ==
== मॉडल ऑबफसकेशन ==


मॉडल ऑबफस्केशन [[ यंत्र अधिगम | मशीन लर्निंग]] मॉडल की आंतरिक संरचना को छिपाने की एक तकनीक है।<ref>{{cite journal |last1=Zhou |first1=Mingyi |last2=Gao |first2=Xiang |last3=Wu |first3=Jing |last4=Grundy |first4=John C. |last5=Chen |first5=Xiao |last6=Chen |first6=Chunyang |last7=Li |first7=Li |title=तैनात तंत्रिका नेटवर्क को सुरक्षित करने के लिए मॉडल अस्पष्टता|date=2023 |url=https://openreview.net/forum?id=ib482K6HQod |language=en}}</ref> ऑबफसकेशन एक मॉडल को ब्लैक बॉक्स में बदल देती है। यह [[समझाने योग्य एआई]] के विपरीत है।
मॉडल ऑबफस्केशन [[ यंत्र अधिगम |मशीन लर्निंग]] मॉडल की आंतरिक संरचना को छिपाने की एक तकनीक है।<ref>{{cite journal |last1=Zhou |first1=Mingyi |last2=Gao |first2=Xiang |last3=Wu |first3=Jing |last4=Grundy |first4=John C. |last5=Chen |first5=Xiao |last6=Chen |first6=Chunyang |last7=Li |first7=Li |title=तैनात तंत्रिका नेटवर्क को सुरक्षित करने के लिए मॉडल अस्पष्टता|date=2023 |url=https://openreview.net/forum?id=ib482K6HQod |language=en}}</ref> ऑबफसकेशन एक मॉडल को ब्लैक बॉक्स में बदल देती है। यह [[समझाने योग्य एआई]] के विपरीत है।


==यह भी देखें==
==यह भी देखें==

Revision as of 11:35, 4 August 2023

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


अवलोकन

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

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

टेक्नीक

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

निक मोंटफोर्ट के अनुसार, तकनीकों में सम्मिलित हो सकते हैं:

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


ऑटोमेटेड टूल्स

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

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


रिक्रेएशनल

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

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


क्रिप्टोग्राफ़िक

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


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

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

उपयोगकर्ताओं को ऑबफसकेशन कोड के बारे में सूचित करना

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

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


ऑबफसकेशन और कॉपीलेफ्ट लाइसेंस

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


डिकम्पाइलर

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

मॉडल ऑबफसकेशन

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

यह भी देखें

संदर्भ

  1. "What is obfuscation (obfu)? - Definition from WhatIs.com". SearchSoftwareQuality (in English). Retrieved 2019-02-01.
  2. Binstock, Andrew (2003-03-06). "Obfuscation: Cloaking your Code from Prying Eyes". Archived from the original on April 20, 2008. Retrieved 2013-11-25.
  3. Atwood, Jeff (2005-05-15). "Jeff Atwood, May 15, 2005". Codinghorror.com. Retrieved 2013-11-25.
  4. "कहानियो". Kenter.demon.nl. Archived from the original on March 4, 2016. Retrieved 2013-11-25.
  5. "C++ Tutorials – Obfuscated Code – A Simple Introduction". DreamInCode.net. Retrieved 2013-11-25.
  6. "C Tutorials – Obfuscated Code in C". 2011-07-07. Retrieved 2013-11-25.
  7. As of 2013-11-25 18:22 GMT. "लाइन शोर में पीई(ए)आरएल". Perlmonks.org. Retrieved 2013-11-25.
  8. "Obfuscation – Haskell Wiki". 2006-02-16. Archived from the original on August 30, 2017. Retrieved 2020-03-03.
  9. Montfort, Nick. "अस्पष्ट कोड" (PDF). Archived from the original (PDF) on April 24, 2019. Retrieved 2017-11-24.
  10. Ben Kurtovic. "अस्पष्ट "हैलो वर्ल्ड!"". benkurtovic.com.
  11. "अस्पष्ट अजगर". wiki.c2.com.
  12. "पहली वार्षिक अस्पष्ट पायथन सामग्री". code.activestate.com.
  13. domas (2022-11-03), xoreaxeaxeax/movfuscator, retrieved 2022-11-05
  14. Break Me00 The MoVfuscator Turning mov into a soul crushing RE nightmare Christopher Domas (in English), retrieved 2022-11-05
  15. "JAPH – Just Another Perl Hacker". pm.org. Perl Mongers. Archived from the original on 16 May 2013. Retrieved 27 February 2015.
  16. "क्रिप्टोग्राफी ब्रेकथ्रू सॉफ़्टवेयर को अनहैक करने योग्य बना सकता है". Wired (in English). ISSN 1059-1028. Retrieved 2021-03-14.
  17. Jain, Aayush; Lin, Huijia; Sahai, Amit (2020). "अच्छी तरह से स्थापित धारणाओं से अप्रभेद्यता अस्पष्टता". Cryptology ePrint Archive. arXiv:2008.09317.
  18. ""Can We Obfuscate Programs?" by Boaz Barak". Math.ias.edu. Archived from the original on March 23, 2016. Retrieved 2013-11-25.
  19. "Blocking website and only way to fix is disabling HTTPS s... | AVG". support.avg.com (in English). 2020-07-21. Retrieved 2022-02-04.
  20. at 05:01, Thomas Claburn in San Francisco 2 Oct 2018. "Google क्रोम वेब स्टोर में छिपे हुए कोड के खिलाफ कार्रवाई कर रहा है". www.theregister.co.uk (in English). Retrieved 2019-11-12.
  21. Cimpanu, Catalin. "मोज़िला ने अस्पष्ट कोड वाले फ़ायरफ़ॉक्स एक्सटेंशन पर प्रतिबंध लगाने की घोषणा की". ZDNet (in English). Retrieved 2019-11-12.
  22. "जीपीएल में "कार्य में संशोधन करने के लिए कार्य के पसंदीदा स्वरूप" भाषा के पीछे तर्क". Lwn.net. Retrieved 2013-11-25.
  23. "What is free software?". gnu.org. Retrieved 2014-12-18.
  24. Zhou, Mingyi; Gao, Xiang; Wu, Jing; Grundy, John C.; Chen, Xiao; Chen, Chunyang; Li, Li (2023). "तैनात तंत्रिका नेटवर्क को सुरक्षित करने के लिए मॉडल अस्पष्टता" (in English). {{cite journal}}: Cite journal requires |journal= (help)


अग्रिम पठन


बाहरी संबंध