पॉलीमॉर्फिक कोड

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

उदाहरण के लिए, सरल गणित अभिव्यक्ति 3+1 और 6-2 दोनों एक ही परिणाम प्राप्त करते हैं, फिर भी सीपीयू में अलग-अलग मशीन कोड के साथ चलते हैं। इस तकनीक का उपयोग कभी-कभी कंप्यूटर वायरस, शेलकोड और कंप्यूटर वर्म द्वारा अपनी उपस्थिति को छिपाने के लिए किया जाता है।

कोड छिपाने के लिए एन्क्रिप्शन सबसे आम तरीका है। एन्क्रिप्शन के साथ, कोड का मुख्य भाग (जिसे इसका पेलोड भी कहा जाता है) एन्क्रिप्ट किया गया है और अर्थहीन दिखाई देगा। कोड के पहले की तरह कार्य करने के लिए, कोड में एक डिक्रिप्शन फ़ंक्शन जोड़ा जाता है। जब कोड निष्पादित किया जाता है, तो यह फ़ंक्शन पेलोड को पढ़ता है और बदले में इसे निष्पादित करने से पहले इसे डिक्रिप्ट करता है।

अकेले एन्क्रिप्शन पॉलीमॉर्फिक का गठन नहीं करता है। बहुरूपी व्यवहार प्राप्त करने के लिए, एन्क्रिप्टर/डिक्रिप्टर जोड़ी को कोड की प्रत्येक प्रति के साथ उत्परिवर्तित किया जाता है। यह कुछ कोड के विभिन्न संस्करणों को सभी समान कार्य करने की अनुमति देता है।

द्वेषपूर्ण (मालिसियस) कोड
अधिकांश एंटीवायरस सॉफ्टवेयर और इंट्रूज़न डिटेक्शन सिस्टम (IDS) कंप्यूटर फ़ाइलों और कंप्यूटर नेटवर्क पर भेजे गए डेटा पैकेट के माध्यम से द्वेषपूर्ण कोड का पता लगाने का प्रयास करते हैं।

यदि सुरक्षा सॉफ़्टवेयर को ऐसे पैटर्न मिलते हैं जो ज्ञात कंप्यूटर वायरस या वर्म्स के अनुरूप होते हैं, तो यह खतरे को बेअसर करने के लिए उचित कदम उठाता है। पॉलिमॉर्फिक एल्गोरिदम ऐसे सॉफ़्टवेयर के लिए आपत्तिजनक कोड को पहचानना मुश्किल बना देता है क्योंकि यह लगातार उत्परिवर्तित होता है।

मालिसियस प्रोग्रामर्स ने हर बार वायरस या वर्म के फैलने पर अनएन्क्रिप्टेड डिक्रिप्शन इंजन (और परिणामी एन्क्रिप्टेड पेलोड) को फिर से लिखकर इस वायरस-स्कैनिंग रणनीति से अपने एन्क्रिप्टेड कोड को बचाने की मांग की है। एंटी-वायरस सॉफ़्टवेयर डिक्रिप्शन इंजन के विभिन्न म्यूटेशनों के भीतर अंतर्निहित पैटर्न खोजने के लिए परिष्कृत पैटर्न विश्लेषण का उपयोग करता है, इस उम्मीद में कि ऐसे मैलवेयर का विश्वसनीय रूप से पता लगाया जा सके।

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

पहला ज्ञात बहुरूपी विषाणु मार्क वाशबर्न द्वारा लिखा गया था। वायरस, जिसे 1260 (कंप्यूटर वायरस) कहा जाता है, 1990 में लिखा गया था। एक बेहतर ज्ञात पॉलीमॉर्फिक वायरस 1992 में हैकर डार्क अवेंजर द्वारा एंटीवायरस सॉफ़्टवेयर से पैटर्न की पहचान से बचने के साधन के रूप में बनाया गया था। एक सामान्य और बहुत विषैला बहुरूपी विषाणु फ़ाइल संक्रमक विषाणु है।

उदाहरण
यह उदाहरण वास्तव में एक बहुरूपी कोड नहीं है, लेकिन XOR ऑपरेटर के माध्यम से एन्क्रिप्शन की दुनिया के लिए एक परिचय के रूप में काम करेगा। उदाहरण के लिए, एक एल्गोरिथ्म में वेरिएबल्स A और B का उपयोग करते हुए, लेकिन वेरिएबल C का नहीं, बड़ी मात्रा में कोड हो सकता है जो C को बदलता है, और इसका एल्गोरिथम पर कोई प्रभाव नहीं पड़ेगा, जिससे इसे अंतहीन रूप से बदला जा सकेगा और इस पर ध्यान दिए बिना कि अंतिम उत्पाद क्या होगा।

Start: GOTO Decryption_Code Encrypted: ...lots of encrypted code... Decryption_Code: C = C + 1 A = Encrypted Loop: B = *A C = 3214 * A 	B = B XOR CryptoKey *A = B 	C = 1 C = A + B 	A = A + 1 GOTO Loop IF NOT A = Decryption_Code C = C^2 GOTO Encrypted CryptoKey: some_random_number

एन्क्रिप्टेड कोड पेलोड है। कोड के विभिन्न संस्करणों को बनाने के लिए, प्रत्येक प्रतिलिपि में सी में हेरफेर करने वाली कचरा लाइनें बदल जाएंगी। "एन्क्रिप्टेड" ("बहुत सारे एन्क्रिप्टेड कोड") के अंदर कोड डिक्रिप्शन_कोड और क्रिप्टोकी और प्रत्येक एल्गोरिदम के बीच कोड को नए कोड के लिए खोज सकता है जो वही काम करता है। आमतौर पर, कोडर वायरस की पहली पीढ़ी के लिए एक शून्य कुंजी (उदाहरण के लिए; A xor 0 = A) का उपयोग करता है, जिससे कोडर के लिए यह आसान हो जाता है क्योंकि इस कुंजी के साथ कोड एन्क्रिप्ट नहीं किया जाता है। सांकेतिक शब्दों में बदलनेवाला तो एक वृद्धिशील कुंजी एल्गोरिथ्म या एक यादृच्छिक एक लागू करता है।

यह भी देखें

 * उल्लेखनीय कंप्यूटर वायरस और वर्म्स की समयरेखा
 * मेटामॉर्फिक कोड
 * स्व-संशोधित कोड
 * अल्फ़ान्यूमेरिक शेलकोड
 * शेलकोड
 * सॉफ्टवेयर क्रैकिंग
 * सुरक्षा दरार
 * भ्रमित कोड
 * ओलिगोमॉर्फिक कोड