पायथन एक उच्च स्तरीय भाषा है। हालांकि आप में से कई सोच सकते हैं , यह प्रोग्रामिंग भाषा के रूप में है , यह नहीं है। यह एक स्क्रिप्टिंग भाषा है। यह मशीन कोड या मशीन भाषा के पास कहीं भी नहीं आता है । तो यह क्या है कि पायथन इतना दिलचस्प बनाता है? यदि आपको पेंटस्टिंग में कोई अनुभव है या आपने कई वेब सुरक्षा विशेषज्ञों या मैलवेयर विश्लेषकों के साथ बातचीत की है, तो वे हमेशा पाइथन को मालवेयर या शोषण विकसित करने के लिए अपनी प्राथमिक भाषा के रूप में सुझाव देंगे।
जबकि कुछ लोग सी , सी ++ या पर्ल पसंद कर सकते हैं , मैं व्यक्तिगत रूप से पाइथन के लिए वोट दूंगा। इसका कारण यह नहीं है कि कार्यक्रम लिखने के लिए केवल एक उपकरण के रूप में उपयोगी है, यह इसे तोड़ने के लिए भी उपयोगी है।
रिवर्स इंजीनियरिंग क्या है?
रिवर्स इंजीनियरिंग एक बहुत व्यापक अवधारणा है। कोई वास्तव में इसे सरल वाक्यविन्यास से परिभाषित नहीं कर सकता है। रिवर्स इंजीनियरिंग की उचित अवधारणा एक सरल कोड में कोड को तोड़ना, इसे समझना, संशोधित करना और इसे अपने उद्देश्य के अनुसार बढ़ाने और फिर अपनी आवश्यकताओं के अनुरूप इसे फिर से इकट्ठा करना है। इसे थोड़ा आसान बनाने के लिए, मुझे आपको कुछ चरम आम उदाहरण दें।
आइए एंड्रॉइड सेल फोन का एक उदाहरण लें। निर्माता एक स्टॉक रोम बनाएँ और इसे अपने उपभोक्ताओं को बेच दें। लेकिन ज्यादातर बार, इसमें बहुत सारे ब्लूटवेयर होते हैं और यह कमजोर हो जाता है। इसलिए, एक्सडीए और एंड्रॉइडेंट्रल जैसी वेबसाइटों में लोग हैं जो रॉम में अपना रास्ता इंजीनियर करते हैं, इसे बढ़ाते हैं और इसे सबूत बनाते हैं। एक प्रैक्टिकल उदाहरण साइनोजनमोड रोम होगा।
लेकिन यह समझने के लिए यह एक उदाहरण था कि यह क्या है। रिवर्स इंजीनियरिंग में एक ही अवधारणा है लेकिन इसका तरीका बहुत जटिल है कि सिर्फ एक रोम को संशोधित करना।
नोट: एक पायथन डेवलपर बनें
जानें कि एक सरल पायथन प्रोग्राम कैसे बनाएं। पुन: प्रयोज्य और टेस्टेबल कोड लिखें। चिकनी चल रही और अभिनव वेब अनुप्रयोगों और सॉफ्टवेयर उत्पादों का विकास करें।
संकलन और पायथन
यदि आपके पास पाइथन में अनुभव है, तो आप जानते हैं कि एक पायथन लिपि लिखते समय, यह एक वायरस, पेलोड, ट्रोजन या जो भी फाइल हो, वह केवल उन कंप्यूटरों में काम करेगी जिनमें पाइथन स्थापित है। तो, मान लीजिए, मैंने एक उत्कृष्ट कंप्यूटर ट्रोजन लिखा है जो किसी भी एंटी-वायरस को बाईपास कर सकता है, और मैं इसे विंडोज सिस्टम में तैनात करना शुरू करता हूं, लेकिन यदि विंडोज सिस्टम में पाइथन दुभाषिया स्थापित नहीं है, तो यह काम नहीं करेगा। इसलिए, किसी को लिखित पायथन लिपि की प्रत्येक फ़ाइल को निष्पादन योग्य में संकलित करने की आवश्यकता है और फिर इसे विंडोज सिस्टम में तैनात करना होगा।
रिवर्स इंजीनियरिंग विंडोज एक्जिक्यूटिव्स
अब आप जानते हैं कि हमें विंडोज़ में चलाने के लिए पाइथन स्क्रिप्ट को संकलित करने की आवश्यकता है, आपको यह भी पता होना चाहिए कि एक कंपाइलर होना आवश्यक है, जो पाइथन स्क्रिप्ट को निष्पादन योग्य में परिवर्तित करता है। हाँ वहाँ है। इसका नाम Py2exe है। Py2exe एक साधारण इंस्टॉलर है जो पाइथन स्क्रिप्ट को स्टैंडअलोन विंडोज प्रोग्राम में परिवर्तित करता है। अब, एक और उपकरण भी है जो पाइथन में लिखे गए विंडोज एक्जिक्यूटिव को पाइथन स्क्रिप्ट में परिवर्तित करता है। इसका नाम Pyinstaller Exe Rebuilder है।
पाई इंस्टॉलर exe rebuilder स्रोत कोड तक पहुंच के बिना अभियंता pyinstaller जेनरेट निष्पादन योग्य पुन: संयोजित / रिवर्स करने के लिए एक उपकरण है। जब आप ईएक्सई लॉन्च करते हैं – यह स्मृति में अनपॅक किया जाता है। इसमें .pyc फ़ाइलें शामिल हैं (पायथन कोड जिसे बाइटकोड में परिवर्तित किया गया है)। मूल रूप से पाई इंस्टॉलर और py2exe जैसे साधन पैकेज पैकेज और निर्भरता सभी एक साथ करते हैं ताकि आप उन्हें डाउनलोड करने या पाइथन दुभाषिया के साथ मशीन तैयार किए बिना ‘स्टैंड-अलोन’ ईएक्सई चला सकें।
एक और साधन किट भी है जो आपको स्रोत कोड के बहुत पास ले जाती है। नाम पीई रेटिक है जो रिवर्स इंजीनियर ओबफुसकेटेड पायथन बाइटकोड के लिए खड़ा है। यह साधन किट आपको डिस्क पर सीधे बाइटकोड तक पहुंच की आवश्यकता के बिना, स्मृति कोड में स्मृति ऑब्जेक्ट में ऑब्जेक्ट लेने की अनुमति देता है। यह उपयोगी हो सकता है यदि डिस्क पर अनुप्रयोगों के पीसी पर कई तरीकों से ओबफुसकेटेड हैं।
अनुशंसित पाठ्यक्रम
- जावा हाइबरनेट पर प्रशिक्षण
- जावा स्प्रिंग में ऑनलाइन प्रमाणन प्रशिक्षण
- वर्डप्रेस प्रोग्राम
- रूबी में प्रमाणन प्रशिक्षण
रिवर्स इंजीनियरिंग हार्ड वे
अब उपरोक्त भाग को समझना आसान है और व्यावहारिक रूप से ऐसा करते हैं जब आप पाइथन में बुनियादी ज्ञान कम से कम करते हैं। लेकिन यह हमेशा मामला नहीं है। कभी-कभी, आपके पास पाइथनलिपि में कोई दस्तावेज या टिप्पणियां नहीं होती हैं, और आपके लिए सभी को समझने के लिए भी फाइलें हो सकती हैं। अब इस हिस्से पर एक शानदार किताब है, लेकिन मैं उस पर ज्यादा ध्यान केंद्रित नहीं करूँगा।
पुस्तक का नाम “विरासत संहिता के साथ प्रभावी ढंग से कार्य करना” है। पुस्तक पायथन या किसी अन्य भाषा से स्वतंत्र है, और आपको लगभग किसी भी भाषा में रिवर्स इंजीनियरिंग के लिए एक विचार देगा। कोड का एक टुकड़ा समझने की कोशिश करते समय मुख्य फोकस, यही कारण है कि आप इसे समझना चाहते हैं।
चाहे आप इसे संशोधित करने के लिए कोड को इंजीनियर करना चाहते हैं, या इसे बंद करने के लिए, दोनों के लिए दृष्टिकोण काफी अलग होगा। इसलिए, लीगेसी कोड का वाद्ययंत्र, बैटरी और टेस्ट और ट्रेसिंग / लॉगिंग के मचान के साथ, सुरक्षित और जिम्मेदारी से समझने और संशोधित करने के लिए लंबे, कठोर नारे पर महत्वपूर्ण मार्ग है।
रिवर्स इंजीनियरिंग उपकरण
अब इसे एक आसान तरीका बनाने के लिए एक और तरीका है जिसे आप उपर्युक्त चरणों का पालन करने के साथ-साथ अनुसरण कर सकते हैं। एपीडोक नामक एक साइट है । इस साइट में, कोड की जांच करेगा और इसके लिए कुछ दस्तावेज तैयार करेगा। नतीजा मूल दस्तावेज के जितना अच्छा नहीं होगा, लेकिन यह आपको कम से कम एक विचार देगा कि यह वास्तव में कैसे काम करता है। और ऐसा करके, आप अपना खुद का दस्तावेज लिखना शुरू कर सकते हैं, और आंशिक रूप से दस्तावेज़ लिखने के बाद, आप शेष भाग के लिए साइट से शेष आंशिक दस्तावेज़ उत्पन्न कर सकते हैं।
आप कोड का विश्लेषण करने के लिए आईडीई उपकरण का भी उपयोग कर सकते हैं। यह आम तौर पर आपको कोड पूरा करने देता है, लेकिन इस मामले में अधिक महत्वपूर्ण बात यह है कि यह कहां से आता है यह देखने के लिए एक चर पर सीटीआरएल- क्लिक करना संभव बनाता है। जब आप अन्य लोगों के कोड को समझना चाहते हैं तो यह वाकई चीजों को गति देता है।
इसके अलावा, आपको डीबगर सीखना होगा। कोड के मुश्किल हिस्सों में, आप वास्तव में कोड क्या देखते हैं, यह देखने के लिए उन्हें डीबगर में कदम उठाना होगा। पायथन पीडीबी काम करता है, लेकिन कई आईडीई के पास एकीकृत डिबगर्स हैं, जो डिबगिंग को आसान बनाते हैं। एंडी बुल्का से लॉजिलाब और पायन्सोर्स से पीईआरवीर्स भी यूएमएल आरेख उत्पादन के लिए सहायक हैं ।
स्रोत कोड के दिए गए इनपुट से यूएमएल कक्षा मॉडल का उत्पादन करने की प्रक्रिया है। इसके साथ, आप अपने कोड-बेस के स्नैप शॉट को यूएमएल कक्षाओं और फॉर्म क्लास आरेख में आगे बढ़ा सकते हैं। दृश्य सामग्री को दृश्य यूएमएल मॉडल में लाकर, यह प्रोग्रामर या सॉफ्टवेयर इंजीनियरों को कार्यान्वयन की समीक्षा करने, संभावित बग या कमी की पहचान करने और संभावित सुधारों की तलाश करने में मदद करता है।
इसके अलावा, डेवलपर्स यूएमएल कक्षाओं के रूप में कोड लाइब्रेरी को उलट सकते हैं और उनके साथ मॉडल बना सकते हैं, जैसे कि सामान्य संग्रह ढांचे को उलटना और जेनेरिक एक को बढ़ाकर अपना खुद का ढांचा विकसित करना। इस अध्याय में, हम पाइथन के तत्काल रिवर्स के माध्यम से चले जाएंगे।
ऑब्जेक्ट्स और प्राइमर्स
पायथन के आंतरिक कार्यों को पूरी तरह से समझने के लिए, सबसे पहले पाइथन संकलन और कोड निष्पादित करने से परिचित होना चाहिए। जब पायथन में कोड संकलित किया जाता है तो परिणाम एक कोड ऑब्जेक्ट होता है। एक कोड ऑब्जेक्ट अपरिवर्तनीय है और कोड चलाने के लिए दुभाषिया द्वारा आवश्यक सभी जानकारी शामिल है। एक बाइट कोड निर्देश को एक बाइट ऑपोड मान के रूप में दर्शाया जाता है जब आवश्यक होने पर तर्क के बाद। कोड को ऑब्जेक्ट का उपयोग कोड ऑब्जेक्ट के अन्य गुणों में से एक में संदर्भित किया जाता है।
एक बाइट कोड स्ट्रिंग इस तरह दिखता है:
\ 64 \ X02 \ 64 \ x08 \ x66 \ X02
पायथन बाइट कोड वस्तुओं के ढेर पर चल रहा है। बाइट कोड को वापस पठनीय पायथन स्रोत कोड में ऑब्जेक्ट और फ़ंक्शन नामों के साथ पूरा करने का प्रयास करने के लिए एक और उद्यमी एक्सटेंशन होगा। पाइथन कोड को मार्शल मॉड्यूल का उपयोग करके बाइनरी रूप में वितरित किया जा सकता है। यह मॉड्यूल स्टोर और लोड फ़ंक्शंस का उपयोग करके कोड ऑब्जेक्ट्स को क्रमबद्ध और डिसेरिलाइज़ करने की क्षमता प्रदान करता है।
सबसे आम तौर पर सामना किया जाने वाला बाइनरी प्रारूप एक संकलित पायथन फ़ाइल (.pyc) है जिसमें एक जादू संख्या, एक टाइमस्टैम्प, और एक धारावाहिक वस्तु होती है। स्रोत फ़ाइल को कई बार पार्स करने से बचने के लिए यह फ़ाइल प्रकार आमतौर पर पाइथन दुभाषिया द्वारा संकलित ऑब्जेक्ट के कैश के रूप में उत्पादित किया जाता है। ये तकनीक बाइट कोड और प्रकार की जानकारी तक पहुंच की आसानी पर निर्भर करती हैं।
कोड ऑब्जेक्ट के बाइट कोड के साथ, कोड तर्क को संशोधित किया जा सकता है या यहां तक कि पूरी तरह से बदला जा सकता है। प्रकार की जानकारी निकालने से कार्यक्रम डिजाइन समझ और कार्य और वस्तु उद्देश्यों की पहचान में सहायता मिल सकती है।
आवेदन बाइट कोड का अपवित्रता और सख्तता हमेशा कार्यान्वयन करने वालों और इसे तोड़ने की मांग करने वालों के बीच एक दौड़ होगी। बाइट कोड पुनर्प्राप्ति के खिलाफ बचाव करने का प्रयास करने के लिए, तार्किक पहला कदम रनटाइम अनुवाद समाधान की ओर है।
कोड ऑब्जेक्ट की गुण किसी भी हस्ताक्षरित, एन्क्रिप्टेड, या अन्यथा ओबफुसकेटेड प्रारूप में संग्रहीत किया जा सकता है जिसे रनटाइम के दौरान डी-ओबफस्केटेड या अनुवादित किया जाता है और एक नई ऑब्जेक्ट को तुरंत चालू करने के लिए उपयोग किया जाता है। कोई भी परिवर्तनीय नाम लुकअप को दुभाषिया के भीतर नामकरण जानकारी को अपनाने के तरीके को भी बदल सकता है। वास्तविक नामों और स्रोत कोड के नामों के बीच एक अनुवाद परत जोड़कर, एक डेवलपर आगे की कोशिशों को कम कर सकता है।
निष्कर्ष
अब, इन सब को पढ़ने के बाद, आप वहां जाने वाले कुछ टोलों को जाने और प्रयोग करने की आवश्यकता महसूस कर सकते हैं। तो, यहां कुछ टूल्स हैं जो आपको अपने पायथन कोड में अपना रास्ता उलटा करने में मदद कर सकते हैं:
- पाई मेई
- सुले
- कैरेरा संग्रह
- पी इमू
- आईडीए पायथन
- इम डीबीजी
ये सभी कोड के महान टुकड़े हैं, लेकिन वास्तव में उन्हें बकाया बनाता है जब उनका एक साथ उपयोग किया जाता है। ध्यान रखें कि यह किसी भी तरह से पूरी सूची नहीं है, केवल वे जिन्हें मैं सबसे ज्यादा उपयोग करता हूं और सोचता हूं कि पाइथन की लचीलापन कैसे एक जटिल कार्य कर सकती है जैसे कि रिवर्स इंजीनियरिंग प्रबंधनीय।
अनुशंसित लेख
यहां कुछ लेख दिए गए हैं जो आपको पाइथन के साथ रिवर्स इंजीनियरिंग के बारे में अधिक जानकारी प्राप्त करने में मदद करेंगे ताकि लिंक के माध्यम से जाएं।
- 25 सबसे अद्भुत पायथन साक्षात्कार प्रश्न और उत्तर
- वेब विकास के लिए पायथन और डी जांगो के साथ शुरू करें
- पायथन का उपयोग करने के लाभ और सीमाएं क्या हैं?
- पायथन में करियर