मेरा प्रश्न बहुत सरल है: आप एक निष्पादन योग्य फ़ाइल हैं जो "एक्सेस दी गई" या "एक्सेस अस्वीकृत" आउटपुट करती है और बुरे व्यक्ति आपको अपने एल्गोरिदम को समझने या अपने अंदरूनी पैच को हर समय "पहुंच प्रदान" करने के लिए पैच करने का प्रयास करते हैं।स्वयं मान्य बाइनरी?
इस परिचय के बाद, आप शायद सोच रहे होंगे कि मैं क्या कर रहा हूं। क्या वह बाहर निकलने के बाद डायब्लो 3 को तोड़ने जा रहा है? मैं आपकी चिंताओं को शांत कर सकता हूं, मैं उन क्रैकर्स में से एक नहीं हूं। मेरा लक्ष्य क्रैक्स हैं।
क्रैक्स पर पाया जा सकता है - उदाहरण के लिए - www.crackmes.de। एक क्रैक एक छोटा निष्पादन योग्य है (अधिकतर समय) में धारावाहिक के आधार पर एक सीरियल और आउटपुट "एक्सेस दी गई" या "एक्सेस अस्वीकृत" सत्यापित करने के लिए थोड़ा एल्गोरिदम होता है। लक्ष्य यह निष्पादन योग्य आउटपुट हर समय "पहुंच प्रदान" करना है। जिन विधियों को आप उपयोग करने की अनुमति देते हैं उन्हें लेखक द्वारा प्रतिबंधित किया जा सकता है - कोई पैचिंग नहीं, कोई डिस्सेम्बल नहीं है - या बाइनरी, ओबजडम्प और हेक्स संपादक के साथ आप जो भी कर सकते हैं उसे शामिल कर सकते हैं। क्रैकिंग क्रैक्स मज़े का एक हिस्सा है, निश्चित रूप से, हालांकि, एक प्रोग्रामर के रूप में, मैं सोच रहा हूं कि आप मुश्किलों को कैसे बना सकते हैं।
असल में, मुझे लगता है कि क्रैकमे में दो प्रमुख भाग होते हैं: एक निश्चित धारावाहिक सत्यापन और आसपास के कोड।
केवल असेंबली का उपयोग करके ट्रैक करने के लिए सीरियल सत्यापन को बनाना बहुत संभव है, उदाहरण के लिए, मेरे पास सीरियल को सिम्युलेटेड माइक्रोप्रोसेसर के लिए इनपुट के रूप में लेने का विचार है जो धारावाहिक प्राप्त करने के लिए एक निश्चित स्थिति में समाप्त होना चाहिए स्वीकार किए जाते हैं। दूसरी तरफ, कोई भी सस्ता हो सकता है और इस हिस्से को सुरक्षित करने के लिए क्रिप्टोग्राफिक रूप से मजबूत तरीके के बारे में और जान सकता है। इस प्रकार, हमलावर को निष्पादन योग्य को पैच करने की कोशिश करने के लिए पर्याप्त कठिन बनाना टी कठिन नहीं होना चाहिए।
हालांकि, अधिक कठिन हिस्सा बाइनरी को सुरक्षित कर रहा है। आइए हम एक पूरी तरह से सुरक्षित सीरियल सत्यापन मान लें जिसे किसी भी तरह से उलट नहीं किया जा सकता है (बेशक मुझे पता है कि इसे उलट दिया जा सकता है, संदेह में, आप उन बाइनरी से हिस्सों को चीरते हैं जिन्हें आप क्रैक करने की कोशिश करते हैं और इसे स्वीकार करते समय यादृच्छिक धारावाहिकों को फेंक देते हैं)। हमारी बाइनरी को कुछ भी स्वीकार करने के लिए हम हमलावर को बाइनरी में कूदने से कैसे रोक सकते हैं?
मैं इस विषय पर थोड़ी सी खोज कर रहा हूं, लेकिन द्विआधारी सुरक्षा पर अधिकतर परिणाम, द्विआधारी पूछताछ और ऐसी चीजें लेखों में समाप्त होती हैं जो समझौता किए गए बाइनरी का उपयोग कर एक ऑपरेटिंग सिस्टम पर हमलों को रोकने की कोशिश करती हैं। कुछ बाइनरी पर हस्ताक्षर करके और कर्नेल के साथ उन हस्ताक्षर मान्य करें। बाइनरी में स्पष्ट स्थानों जाँच छलांग होने की
- :
मेरे विचार वर्तमान में से मिलकर बनता है।
- द्विआधारी के चेकसमिंग भागों और उन लोगों के साथ रनटाइम पर गणना की गई चेकसम की तुलना करें।
- कोड में आपके कार्यों के लिए सकारात्मक और नकारात्मक रनटाइम-चेक है। धारावाहिक सत्यापन पर दुष्प्रभाव के साथ। :)
क्या आप संभावित हमलावर को परेशान करने के अधिक तरीकों के बारे में सोचने में सक्षम हैं? (निश्चित रूप से, आप उसे हमेशा के लिए दूर नहीं रख सकते हैं, फिर भी, सभी चेक तोड़ दिए जाएंगे, जब तक कि आप प्रोग्राम में किसी प्रोग्राम के लिए सही चेकसम को एम्बेड करने में सक्षम होने के द्वारा चेकसम-जनरेटर को तोड़ने में कामयाब रहे, हेहे)
हाँ, वाणिज्यिक सॉफ्टवेयर के लिए, मैं पूरी तरह से सहमत हूं। स्वयं-सत्यापन की परतों और परतों सहित बस चीजों को बहुत ही जटिल और केवल परेशान कर देगा। लेकिन यह वाणिज्यिक सॉफ्टवेयर के लिए नहीं है - यह एक गेम है, और लक्ष्य एक तरफ बहुत सारे प्रयास करना है। – Tetha