
IDA Pro के लिए एक इंटरैक्टिव बाइनरी पैचिंग प्लगइन

मौजूदा प्रोग्राम के व्यवहार को बदलने के लिए असेंबली कोड को पैच करना मैलवेयर विश्लेषण, सॉफ्टवेयर रिवर्स इंजीनियरिंग और सुरक्षा अनुसंधान के व्यापक क्षेत्रों में असामान्य नहीं है। यह प्रोजेक्ट लोकप्रिय IDA Pro डिसअसेंबलर को विस्तारित करता है ताकि तीव्र पुनरावृत्ति के लिए डिज़ाइन किया गया अधिक मजबूत इंटरैक्टिव बाइनरी पैचिंग वर्कफ़्लो बनाया जा सके।
यह प्रोजेक्ट वर्तमान में सर्वव्यापी Keystone Engine के एक छोटे फोर्क द्वारा संचालित है, जो x86/x64 और Arm/Arm64 पैचिंग का समर्थन करता है और भविष्य के रिलीज़ में शेष Keystone आर्किटेक्चर को सक्षम करने की योजना है।
इस प्लगइन के विकास का समर्थन करने के लिए Hex-Rays को विशेष धन्यवाद।
इस प्लगइन के लिए IDA 7.6 और Python 3 की आवश्यकता है। यह Windows, Linux और macOS का समर्थन करता है।
कृपया ध्यान दें, IDA के पुराने संस्करण (8.2 और नीचे) Python 3.11 और इसके ऊपर के संस्करणों के साथ संगत नहीं हैं।
प्लगइन को स्वचालित रूप से स्थापित करने के लिए IDA कंसोल में निम्नलिखित लाइन चलाएँ:
import urllib.request as r; exec(r.urlopen('https://github.com/gaasedelen/patching/raw/main/install.py').read())
import urllib.request as r; exec(r.urlopen('https://github.com/gaasedelen/patching/raw/main/install.py', cafile='/etc/ssl/cert.pem').read())
वैकल्पिक रूप से, प्लगइन को आपके संबंधित प्लेटफ़ॉर्म के लिए वितरण योग्य प्लगइन पैकेज को रिलीज़ पृष्ठ से डाउनलोड करके और इसे आपके प्लगइन फ़ोल्डर में अनज़िप करके मैन्युअल रूप से स्थापित किया जा सकता है।
इस प्लगइन को IDA के उपयोगकर्ता प्लगइन निर्देशिका में स्थापित करने की दृढ़ता से अनुशंसा की जाती है:
import ida_diskio, os; print(os.path.join(ida_diskio.get_user_idadir(), "plugins"))
पैचिंग प्लगइन समर्थित आर्किटेक्चर (x86/x64/Arm/Arm64) के लिए स्वचालित रूप से लोड होगा और IDA डिसअसेंबली व्यू के राइट-क्लिक संदर्भ मेनू में प्रासंगिक पैचिंग क्रियाएँ इंजेक्ट करेगा:

प्रासंगिक पैचिंग क्रियाओं की पूरी सूची निम्नलिखित अनुभागों में वर्णित है।
मुख्य पैचिंग डायलॉग को राइट-क्लिक संदर्भ मेनू में Assemble क्रिया के माध्यम से लॉन्च किया जा सकता है। यह एक मूल IDA डिसअसेंबली व्यू का अनुकरण करता है जिसका उपयोग तेजी से एक या अधिक निर्देशों को संपादित करने के लिए किया जा सकता है।

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

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

व्यक्तिगत निर्देशों के साथ-साथ निर्देशों की चयनित श्रेणी को भी NOP किया जा सकता है।
एक सशर्त जंप को हमेशा 'अच्छा' पथ निष्पादित करने के लिए बाध्य करना एक और सामान्य पैचिंग क्रिया है। प्लगइन यह क्रिया केवल तभी दिखाएगा जब आप किसी सशर्त जंप निर्देश पर राइट-क्लिक करते हैं।

यदि आप कभी नहीं चाहते कि कोई सशर्त जंप लिया जाए, तो आप इसे इसके बजाय NOP कर सकते हैं!
पैच को किसी भी समय पैचिंग सबमेनू के माध्यम से चयनित निष्पादन योग्य में सहेजा (लागू) किया जा सकता है। त्वरित-लागू क्रिया समान सेटिंग्स का उपयोग करके बाद के पैच को सहेजना और भी तेज़ बनाती है।

प्लगइन मूल निष्पादन योग्य का एक बैकअप (.bak) बनाए रखने का सक्रिय प्रयास भी करेगा, जिसका उपयोग यह प्रत्येक सहेज के दौरान डेटाबेस पैच के वर्तमान सेट को 'स्वच्छ' रूप से लागू करने के लिए करता है।
अंत में, यदि आप कभी किसी पैच से असंतुष्ट हैं, तो आप पैच किए गए (पीले) ब्लॉकों पर राइट-क्लिक करके उन्हें उनके मूल मान पर वापस ला सकते हैं।

जबकि बाइट्स को उनके मूल मान पर वापस लाना 'आसान' है, विश्लेषण को उसकी पिछली स्थिति में बहाल करना 'कठिन' हो सकता है। किसी पैच को पूर्ववत करने के लिए कभी-कभी अतिरिक्त मानवीय सुधारों की आवश्यकता हो सकती है।
समय और प्रेरणा के अनुसार, भविष्य के कार्य में निम्नलिखित शामिल हो सकते हैं:
xor eax, eax; ret;)Pretty: mov [rsp+48h+dwCreationDisposition], 3
Raw: mov [rsp+20h], 3
मैं बाहरी योगदान, मुद्दों और सुविधा अनुरोधों का स्वागत करता हूँ। कृपया यदि आप चाहते हैं कि उन्हें भविष्य के रिलीज़ में शामिल किया जाए, तो इस रिपॉजिटरी की develop शाखा में कोई भी पुल अनुरोध करें।