क्या C ++ एप्लिकेशन कोड को बाधित करना महत्वपूर्ण है?


11

जावा दुनिया में, यह कभी-कभी एक समस्या लगती है, लेकिन, C ++ के बारे में क्या? क्या अलग-अलग उपाय हैं?

मैं इस तथ्य के बारे में सोच रहा था कि कोई एक विशिष्ट ओएस के सी ++ पुस्तकालय को उसी पुस्तकालय के एक अलग संस्करण के साथ बदल सकता है, लेकिन मेरा कोड क्या करता है यह समझने के लिए डिबग प्रतीकों से भरा है। मानक या लोकप्रिय पुस्तकालयों का उपयोग करने के लिए एक अच्छी बात है?

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

क्या स्थैतिक संकलन जावा दुनिया में अवरोध के बराबर है? बेहतर शब्दों में, क्या यह आपके कोड की सुरक्षा के लिए सबसे अच्छा और सबसे सस्ता उपाय है?


4
याद रखें, आप जो भी करते हैं, वह बहुत अधिक समय के साथ किसी व्यक्ति को विघटित / विघटित करने में सक्षम होगा
Zavior

13
कई संकलक एक /Oऑबफ्यूशन स्विच के साथ आते हैं । कुछ के पास भी /O3
ओफ़्सेशन के

@MSalters नहीं, g ++ है -O3;)
Bћови

@Zavior या बस रिवर्स-इंजीनियर इसे, सादा और सरल। इसके लिए बाइनरी की भी आवश्यकता नहीं है, केवल सॉफ्टवेयर का गहन विश्लेषण।
जॉन वीज़

जवाबों:


27

हारने की लड़ाई पर अपना समय बर्बाद मत करो

जैसा कि सी ++ और अन्य भाषाओं के लिए इसी तरह के कई अन्य उत्तरों में उल्लेख किया गया है, यह ज्यादातर बेकार है

आगे की पढाई

विषय पर चयनित पुस्तकें (सभी C ++ विशिष्ट नहीं हैं, लेकिन सामान्य सिद्धांत लागू होते हैं):

StackExchange उत्तर

पत्रों

प्रसंग पर प्रसिद्ध उद्धरण:

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


कभी नहीँ?

मैं यह नहीं कह रहा हूं कि आपको कभी भी बाधा नहीं डालनी चाहिए और इसके लिए कोई अच्छे कारण नहीं हैं, लेकिन मैं ज्यादातर मामलों में इसकी आवश्यकता और इसकी लागत-प्रभावशीलता पर गंभीरता से सवाल उठाता हूं।

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


हमने एक बार एक हार्डवेयर डोंगल का उपयोग किया था, जहाँ सभी डोंगल फ़ंक्शन कॉलों को अस्पष्ट करने के लिए लाइसेंस की आवश्यकता थी - और उन्होंने इसे करने के लिए एक उपकरण की आपूर्ति की। हमेशा मुझे उनके 'संरक्षण' की गुणवत्ता पर थोड़ा संदेह हुआ!
मार्टिन बेकेट

@MartinBeckett: वास्तव में एक अजीब बात है।
जूल

3

नहीं, यह प्रयास के लायक नहीं है, और मुझे लगता है कि यह पूरी तरह से अनावश्यक है। आपके द्वारा कॉल किए जाने वाले कार्यों का अनुमान शायद आपके द्वारा प्रदान की गई कार्यक्षमता से लगाया जा सकता है।

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

C ++ मशीन भाषा के लिए सीधे संकलित करता है। यह असंतुष्ट हो सकता है, लेकिन इससे निपटने के लिए विधानसभा भाषा काफी थकाऊ है। संकलन के दौरान ऑप्टिमाइज़र कोड में किए गए सभी परिवर्तनों की वजह से डिकॉम्पिलेशन है।


0

इस बारे में सोचते हुए, कई अलग-अलग प्रकार के मोटापे हैं। चलो स्रोत कोड के obfuscation के साथ शुरू करते हैं, जो समय की पूरी बर्बादी है; इसके बिना समझना काफी कठिन है! तो आइए इसके बजाय वितरण पैकेज पर ध्यान केंद्रित करें, कि उपयोगकर्ता को कोड कैसे वितरित किया जाता है।

मामूली आक्षेप

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

जावास्क्रिप्ट मिनिफिकेशन इसका एक उदाहरण है, हालांकि इसे इस तरह से विपणन नहीं किया गया है। उनके दाहिने दिमाग में कोई भी एक जेएस फाइल को पढ़ना और संपादित करना नहीं चाहेगा, भले ही यह तकनीकी रूप से ऐसा करने के लिए संभव हो यदि आप निर्धारित / लगातार पर्याप्त हैं।

इसी तरह जावा अनुप्रयोगों को वितरित करने के साथ। एक निष्पादनीय JAR में कोड को अच्छी तरह से पैक करने से अधिकांश मूर्खता बंद हो जाएगी, भले ही शहर के पार्क में एक विनम्र "प्लीज कीप ऑफ द ग्रास" साइन हो।

यहां तक ​​कि सी ++ कोड देते समय, निष्पादन योग्य से अनावश्यक प्रतीकों को छीनना मामूली आक्षेप के रूप में योग्य होने के लिए पर्याप्त होगा। कुंजी यह है कि उपयोगकर्ता के रूप में परिणाम को पढ़ना अजीब है, लेकिन इसे कंप्यूटर के रूप में निष्पादित करने के लिए कोई समस्या नहीं है।

प्रमुख आक्षेप

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

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

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

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