रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें · पाठ

बाइनरी कमजोरियों की पहचान

बाइनरी में बफ़र ओवरफ़्लो, फ़ॉर्मैट स्ट्रिंग बग और पूर्णांक ओवरफ़्लो जैसी सामान्य कमजोरियों को पहचानें।

पाठ 1, कुल 4 में से11 चरण

बाइनरी कमजोरियों की पहचान, CoddyKit पर रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

बाइनरी भेद्यताओं का परिचय

स्वागत है! रिवर्स इंजीनियरिंग में भेद्यताओं को समझना महत्वपूर्ण है। ये सॉफ़्टवेयर की ऐसी कमियाँ होती हैं जिनका हमलावर नियंत्रण पाने या नुकसान पहुँचाने के लिए फ़ायदा उठा सकता है।

हम संकलित बाइनरी में पाई जाने वाली सामान्य भेद्यताओं का अध्ययन करेंगे और समझेंगे कि वे कैसे उत्पन्न होती हैं और कैसी दिखाई देती हैं।

बफ़र ओवरफ़्लो की व्याख्या

बफ़र मेमोरी का एक सन्निहित खंड होता है, जिसे किसी ऐरे या स्ट्रिंग जैसे डेटा को रखने के लिए आवंटित किया जाता है। इसे एक निश्चित आकार वाले कंटेनर की तरह समझिए।

  • बफ़र ओवरफ़्लो: तब होता है जब कोई प्रोग्राम बफ़र की क्षमता से अधिक डेटा उसमें लिखने का प्रयास करता है।
  • यह अतिरिक्त डेटा आस-पास के मेमोरी क्षेत्रों में "बह" जाता है, जिससे अन्य डेटा दूषित हो सकता है या महत्वपूर्ण प्रोग्राम निर्देश अधिलेखित हो सकते हैं।

C में सरल बफ़र

यहाँ निश्चित आकार वाले बफ़र का उपयोग करने वाला एक मूल C प्रोग्राम दिया गया है। char buffer[10]; पंक्ति पर ध्यान दें, जो हमारी स्ट्रिंग के लिए 10 बाइट आरक्षित करती है।

स्ट्रिंग बफ़र में कैसे समाती है, यह देखने के लिए इस कोड को चलाएँ।

#include <stdio.h>
#include <string.h>

int main() {
  char buffer[10]; // A buffer of 10 characters
  strcpy(buffer, "Hello"); // Copy "Hello" into buffer
  printf("Buffer content: %s\n", buffer);
  return 0;
}

बफ़र ओवरफ़्लो उत्पन्न करना

यदि हम 10 अक्षरों से लंबी स्ट्रिंग को अपने buffer में कॉपी करने का प्रयास करें, तो क्या होगा? strcpy फ़ंक्शन सीमाओं की जाँच नहीं करता, इसलिए यह लिखना जारी रखेगा।

इससे ये समस्याएँ हो सकती हैं:

  • प्रोग्राम क्रैश (सेगमेंटेशन फ़ॉल्ट)।
  • आस-पास के डेटा का दूषित होना।
  • हानिकारक कोड के निष्पादन की संभावना (उन्नत शोषण)।

आधुनिक कंपाइलर और OS सुरक्षा उपाय प्रदान करते हैं, लेकिन मूल भेद्यता बनी रहती है।

फ़ॉर्मैट स्ट्रिंग बग

फ़ॉर्मैट स्ट्रिंग भेद्यताएँ तब उत्पन्न होती हैं जब कोई प्रोग्राम printf() या sprintf() जैसे फ़ंक्शन में उपयोगकर्ता द्वारा दिए गए इनपुट को फ़ॉर्मैट स्ट्रिंग तर्क के रूप में इस्तेमाल करता है।

फ़ॉर्मैट स्ट्रिंग (जैसे "%s", "%d") printf को बताती है कि बाद के तर्कों की व्याख्या और प्रिंट कैसे करनी है। यदि हमलावर इस स्ट्रिंग को नियंत्रित करता है, तो वह ये कार्य कर सकता है:

  • स्टैक से डेटा पढ़ना।
  • मनमाना डेटा मनमाने मेमोरी स्थानों पर लिखना।

फ़ॉर्मैट स्ट्रिंग भेद्यता

यह उदाहरण दिखाता है कि हमलावर फ़ॉर्मैट विनिर्देशकों का उपयोग करके स्टैक मेमोरी को कैसे देख सकता है। printf फ़ंक्शन को अपनी फ़ॉर्मैट स्ट्रिंग से मेल खाते तर्कों की अपेक्षा होती है।

यदि फ़ॉर्मैट स्ट्रिंग अविश्वसनीय इनपुट से आती है, तो उसका दुरुपयोग किया जा सकता है।

#include <stdio.h>
#include <string.h>

int main() {
  char input[20];
  strcpy(input, "%p %p %p %p"); // Malicious input

  printf("User input as format string:\n");
  printf(input); // Vulnerable call: no format string provided by developer
  printf("\n");
  return 0;
}

पूर्णांक ओवरफ़्लो को समझना

कंप्यूटर संख्याओं को निश्चित संख्या में बिट का उपयोग करके संग्रहित करते हैं। पूर्णांक ओवरफ़्लो तब होता है जब कोई अंकगणितीय क्रिया ऐसी संख्यात्मक मान बनाने का प्रयास करती है जिसे उपलब्ध संग्रहण स्थान में दर्शाया नहीं जा सकता।

  • अहस्ताक्षरित पूर्णांकों के लिए मान "लपेटकर" शून्य पर आ जाता है।
  • हस्ताक्षरित पूर्णांकों के लिए यह लपेटकर बड़ी ऋणात्मक संख्या बन सकता है।

इससे अनपेक्षित व्यवहार, बफ़र ओवरफ़्लो (जैसे गणना किया गया आकार बहुत छोटा होने पर) या सुरक्षा उपायों को दरकिनार करना संभव हो सकता है।

पूर्णांक ओवरफ़्लो का उदाहरण

देखें कि unsigned int के अधिकतम संभव मान में 1 जोड़ने पर क्या होता है। यह "ओवरफ़्लो" होकर वापस शून्य पर आ जाता है।

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

#include <stdio.h>
#include <limits.h> // For UINT_MAX

int main() {
  unsigned int max_val = UINT_MAX; // Maximum unsigned int value
  unsigned int overflow_val = max_val + 1;

  printf("Max unsigned int: %u\n", max_val);
  printf("Max unsigned int + 1: %u\n", overflow_val); // Will be 0
  return 0;
}

भेद्यताओं से बचाव

ये भेद्यताएँ अक्सर असुरक्षित प्रोग्रामिंग तरीकों से उत्पन्न होती हैं, विशेषकर C/C++ जैसी भाषाओं में, जो मेमोरी तक सीधी पहुँच देती हैं।

  • बफ़र ओवरफ़्लो: सीमाओं की जाँच करने वाले फ़ंक्शन (जैसे strncpy, snprintf) या उच्च-स्तरीय भाषाओं/लाइब्रेरी का उपयोग करें।
  • फ़ॉर्मैट स्ट्रिंग बग: printf जैसे फ़ंक्शन में हमेशा स्थिर फ़ॉर्मैट स्ट्रिंग लिटरल दें, उपयोगकर्ता का इनपुट कभी नहीं।
  • पूर्णांक ओवरफ़्लो: इनपुट को मान्य करें, सीमा की जाँच करें और आवश्यकता होने पर बड़े डेटा प्रकार या मनमानी-सटीकता वाले अंकगणित का उपयोग करें।

भेद्यता जाँच

निम्नलिखित में से कौन-सी स्थितियाँ सामान्य बाइनरी भेद्यता को दर्शाती हैं?

पुनरावलोकन और अगले चरण

बहुत अच्छा! अब आपने तीन मूलभूत बाइनरी भेद्यताओं का परिचय प्राप्त कर लिया है:

  • बफ़र ओवरफ़्लो: बफ़र के लिए आवंटित मेमोरी की सीमा से आगे लिखना।
  • फ़ॉर्मैट स्ट्रिंग बग: प्रिंट फ़ंक्शन में फ़ॉर्मैट विनिर्देशकों का गलत उपयोग।
  • पूर्णांक ओवरफ़्लो: ऐसी संख्याएँ जो अपनी संग्रहण क्षमता से अधिक हो जाएँ और लपेटकर फिर से आरंभिक सीमा में आ जाएँ।

बाइनरी का विश्लेषण करने और संभावित कमज़ोर बिंदुओं की पहचान करने के लिए इन्हें समझना अत्यंत महत्वपूर्ण है। अब हम स्वचालित उपकरणों का उपयोग करके इन बग की पहचान करना सीखेंगे!

शुरुआत निःशुल्क

एआई शिक्षक के साथ Assembly सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “बाइनरी कमजोरियों की पहचान” पाठ निःशुल्क है?

हाँ — रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “बाइनरी कमजोरियों की पहचान” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“बाइनरी कमजोरियों की पहचान” में मैं क्या सीखूँगा?

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

क्या रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“बाइनरी कमजोरियों की पहचान” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें पाठ में कोड लिख और चला सकता हूँ?

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

इस पाठ्यक्रम के सभी पाठ

  1. बाइनरी कमजोरियों की पहचान
  2. फ़ज़िंग का परिचय
  3. एक्सप्लॉइट प्रिमिटिव का अवलोकन
  4. आधुनिक एक्सप्लॉइट सुरक्षा और बायपास
← रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें पर वापस जाएँ