डॉटफस्केटर का उपयोग करके बनाए गए अस्पष्ट अनुप्रयोग (विसौल स्टूडियो 2022 संस्करण)

पेज अद्यतन :
पेज निर्माण की तारीख :

सारांश

फ्रेमवर्क की .NET श्रृंखला पर आधारित अनुप्रयोगों को एक सामान्य मध्यवर्ती भाषा कहा जाता है, इसलिए उन्हें disassembly उपकरण और इसी तरह का उपयोग करके मूल स्रोत कोड के करीब एक रूप में पढ़ा जा सकता है। यह अनुभाग वर्णन करता है कि कैसे कक्षाओं और विधि नामों को आसानी से अपठनीय स्वरूपों में Dotfuscator के मुक्त संस्करण का उपयोग करके, Visual Studio के साथ आने वाले obfuscator उपकरण का उपयोग करके obfuscate करने के लिए।

इसे विजुअल स्टूडियो 2022 का उपयोग करके वर्णित किया गया है, लेकिन इसका उपयोग डॉटफ्यूस्केटर के अन्य संस्करणों में भी किया जा सकता है।

ऑपरेटिंग वातावरण

दृश्य स्टूडियो
  • विजुअल स्टूडियो 2022

Dotfuscator के बारे में

Dotfuscator एक obfuscation उपकरण है जो फ्रेमवर्क के .NET परिवार के साथ लिखे गए अनुप्रयोगों के लिए disassembled होने पर स्रोत कोड को पढ़ना मुश्किल बनाता है (इसके बाद .NET के रूप में संदर्भित)। Dotfuscator मुफ्त में और एक शुल्क के लिए Visual Studio के साथ आता है।

मुफ्त संस्करण तब तक उपलब्ध नहीं है जब तक कि इसकी कई सुविधाएँ सीमित न हों या Visual Studio प्रारंभ न हो, लेकिन कोई भी इसका उपयोग तब तक कर सकता है जब तक कि उनके पास Visual Studio स्थापित न हो. भुगतान किए गए संस्करण में कई शक्तिशाली अस्पष्टता विशेषताएं हैं जो मुफ्त संस्करण में नहीं पाई जाती हैं, लेकिन यह एक ऐसी कीमत पर पेश की जाती है जो आम जनता के लिए बर्दाश्त करना मुश्किल है।

Dotfuscator संस्करण के आधार पर विभिन्न सुविधाओं, कीमतों, और संस्करणों है, तो कृपया विवरण के लिए निम्नलिखित मुखपृष्ठ को देखें.

Disassembly के बारे में

मैंने पहले उल्लेख किया था कि .NET में लिखे गए एप्लिकेशन आसानी से मूल स्रोत कोड को अलग कर सकते हैं और पढ़ सकते हैं, लेकिन वास्तव में क्या हो रहा है कि यदि आप एक .exe फ़ाइल (या .dll फ़ाइल) को अलग करते हैं जैसा कि निम्नलिखित चित्र में दिखाया गया है, तो आप लगभग मूल स्रोत कोड को पुन: पेश कर सकते हैं, जैसे कि नामस्थान, वर्ग नाम, विधि नाम, आदि।

कार्यक्रमों के प्रकार जिन्हें obfuscated किया जाना चाहिए

यह मुख्य रूप से उन कार्यक्रमों पर लागू होता है जो वितरित किए जाते हैं और अनिर्दिष्ट उपयोगकर्ताओं को चलाते हैं। उदाहरण के लिए, डेस्कटॉप अनुप्रयोग। इसके विपरीत, वेब अनुप्रयोगों है कि सीधे प्रोग्राम फ़ाइलों तक पहुँचने में कठिनाई होती है obfuscation के लिए कम महत्वपूर्ण हैं।

इस बार, हम WPF, एक डेस्कटॉप अनुप्रयोग में एक परियोजना को देख रहे हैं।

Dotfuscator स्थापित करना

यह एप्लिकेशन Visual Studio 2022 के साथ आता है लेकिन मानक स्थापना में शामिल नहीं है (कुछ पिछले Visual Studios में इसे खरोंच से स्थापित किया जा सकता है)।

Dotfuscator जोड़ने के लिए: Visaul Studio प्रारंभ करें और उपकरण से उपकरण और सुविधाएँ प्राप्त करें का चयन करें.

ऊपर दिए गए टैब से "व्यक्तिगत घटक" का चयन करें, "कोड उपकरण" समूह में "प्रीमेप्टिव प्रोटेक्शन - Dotfuscator" की जाँच करें, और निचले दाएँ कोने में स्थापित करें बटन पर क्लिक करें। ऐसा करते समय, Visual Studio कंसोल बंद करें।

निषेध प्रक्रिया

इन नामों को भ्रमित और अस्पष्ट बनाने के लिए चरणों का वर्णन करता है।

Visual Studio में कोई अनुप्रयोग बनाएँ, .exe फ़ाइल बनाएँ, और उसके बाद क्लिक करें। कोई dll फ़ाइल बनाएँ। अब तक, यह एक नियमित आवेदन बनाने के समान है। आपके द्वारा बनाए गए एप्लिकेशन को रिलीज़ बिल्ड में बनाए गए लोगों के लिए अभिप्रेत किया जाना चाहिए। (क्योंकि आप आमतौर पर डीबग में प्रकाशित नहीं करते हैं.)

.exe या .dll बनाने के बाद, Visual Studio मेनू से उपकरण का चयन करें, और तब PreEmptive सुरक्षा - Dotfuscator समुदाय चुनें।

पंजीकरण स्क्रीन प्रदर्शित किया जाता है, लेकिन इसकी आवश्यकता नहीं है, इसलिए यदि यह अनावश्यक है, तो रद्द करें बटन पर क्लिक करें जैसा कि यह है।

रहो और ठीक बटन पर क्लिक करें।

Dotfuscator शुरू होता है। एप्लिकेशन अपने दम पर काम करता है, इसलिए आप उन फ़ाइलों को बंद कर सकते हैं जो वर्तमान में खुली परियोजना के लिए प्रासंगिक नहीं हैं। (अनुप्रयोग के मुक्त संस्करण के मामले में ही, यह माना जाता है कि Visual Studio प्रारंभ किया गया है।) )

इस लेख में, मैं एक नमूने के रूप में डिफ़ॉल्ट के साथ निर्मित एक .NET 6.0 WPF अनुप्रयोग परियोजना obfuscate हूँ।

बाईं ओर की सूची से "इनपुट" का चयन करें और "+" बटन पर क्लिक करें।

उस प्रोग्राम फ़ाइल का चयन करें जिसे आप obfuscate करना चाहते हैं. .NET Framework में लिखे गए अनुप्रयोगों ने अक्सर .exe को रोक दिया है, लेकिन .NET और .NET कोर में, प्रोग्राम अक्सर संस्थाओं .dll होते हैं। नेट डब्ल्यूपीएफ अनुप्रयोगों में .dll संस्थाएं भी होंगी, इसलिए .dll चुनें।

इसे सूची में जोड़ा जाएगा। यदि इसमें एकाधिक डीएलएल होते हैं, तो एक से अधिक जोड़ें।

लक्ष्य फ़ाइल जोड़ने के बाद, उपकरण पट्टी से "बनाएँ" बटन क्लिक करें.

आपसे पूछा जाएगा कि obfuscated प्रोजेक्ट फ़ाइल को कहां सहेजना है, इसलिए इसे निर्दिष्ट करें। स्थान मनमाना हो सकता है, लेकिन यह एक obfuscated कार्यक्रम का आउटपुट स्थान भी हो सकता है। यह आपके इनपुट को सहेजता है और यदि आप इसे फिर से obfuscate करना चाहते हैं तो इस obfuscation परियोजना फ़ाइल को खोल देगा। विस्तार "है। xml".

यदि बिल्ड प्रारंभ हो गया है और "बिल्ड पूर्ण" नीचे दिए गए संदेश में प्रदर्शित होता है, तो यह सफल पूर्णता को इंगित करता है। स्क्रीन बिल्ड लॉग और obfuscated वर्गों और चर की एक सूची प्रदर्शित करता है।

कक्षा और विधि नाम कैसे बदल गए हैं, इसका विवरण देखने के लिए बाईं ओर की सूची से "परिणाम" का चयन करें।

दाईं ओर के पेड़ में वर्ग नाम और विधि नाम, जैसे "->", obfuscation के बाद के नाम हैं। वर्ग नाम या विधि नाम को इस तरह के अर्थहीन नाम में बदलकर, आप स्रोत कोड की सामग्री को पढ़ने में मुश्किल बना सकते हैं, भले ही इसे अलग किया गया हो।

Obfuscated प्रोग्राम "Dotfuscated" नामक एक फ़ोल्डर में उस स्थान पर सहेजे जाते हैं जहां आपने प्रोजेक्ट फ़ाइल सहेजी थी।

मानचित्र.xml एक obfuscation परिणाम फ़ाइल है, तो आप इसे सुरक्षित रूप से हटा सकते हैं।

चूंकि .NET 6.0 WPF अकेले एक DLL द्वारा प्रारंभ नहीं किया जा सकता है, इसलिए एक ही फ़ोल्डर में आउटपुट बनाने के समय उत्पन्न "XXXX.exe" और "XXXX.runtimeconfig.json" की प्रतिलिपि बनाएँ और इसे प्रारंभ करें। यदि आप सामान्य रूप से शुरू कर सकते हैं, तो कुछ समय के लिए कोई समस्या नहीं है। यदि आप इसे प्रारंभ नहीं कर सकते हैं, तो हो सकता है कि आपको फ़ाइलें याद आ रही हों या आप एक ऐसा प्रोग्राम बना रहे हों जो obfuscation के कारण असंगत हो जाता है.

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

ध्यान दें कि .NET लायब्रेरीज़ में निर्धारित वर्ग नाम नाम बदलने के अधीन नहीं हैं क्योंकि वे किसी फ़्रेमवर्क के रूप में मौजूद हैं.

इस बार, मैं डिफ़ॉल्ट परियोजना के रूप में यह है बनाया obfuscated है, तो मुझे लगता है कि वहाँ एक छवि है कि लगभग obfuscated नहीं है, लेकिन मुझे लगता है कि obfuscation का प्रभाव स्पष्ट हो जाता है क्योंकि बड़ी परियोजना, और अधिक अद्वितीय वर्गों में वृद्धि होगी.

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

obfuscation को बाहर निकालें

यदि आपके पास वर्ग या गुण नाम हैं जिन्हें आप बंद नहीं करना चाहते हैं, तो आप उन्हें बाहर कर सकते हैं।

असेंबली लोड होने के दौरान, स्क्रीन के बाईं ओर से नाम बदलें > निकालें का चयन करें। चूंकि असेंबली की सामग्री प्रदर्शित होती है, इसलिए मैं उन लोगों की जांच करूंगा जिन्हें मैं ओबफ्यूजकेट नहीं करना चाहता हूं।

दानेदार स्तर पर ओबफ्यूजेशन को बाहर करना संभव है, लेकिन मुझे लगता है कि इसे नामस्थान के आधार पर समायोजित करना आसान है।

लायब्रेरी मोड

जब आप इनपुट असेंबली का चयन करते हैं, तो आप देख सकते हैं कि "लायब्रेरी मोड" चेक किया गया है.

"लाइब्रेरी मोड" डीएलएल से संलग्न करने के लिए है जिसे अन्य कार्यक्रमों द्वारा बुलाया जा सकता है। यदि जाँच की जाती है, तो अन्य कार्यक्रमों द्वारा बुलाए गए सार्वजनिक वर्गों और गुणों को अस्पष्टता से बाहर रखा जाता है।

हालांकि, सामान्य तौर पर, एक पुस्तकालय को उजागर करना दुर्लभ है जिसे अन्य कार्यक्रमों से उत्पादक रूप से कहा जाता है, और मुझे लगता है कि यह अक्सर उन अनुप्रयोगों के लिए अस्पष्ट होता है जो अकेले काम करते हैं, इसलिए मूल रूप से इस चेक को हटाना ठीक है।

एकल-फ़ाइल .exe का obfuscation (अपुष्ट)

Visual Studio 2022 में इस आइटम की जांच वर्तमान में अपुष्ट है।

यह शायद MSBuild के साथ obfuscation होगा, लेकिन मैं इस समय जानकारी की कमी के कारण इसे पकड़ पर रख रहा हूं।