
जब DLLMain ही एकमात्र रास्ता हो
उन स्थितियों के लिए जब DLLMain ही एकमात्र रास्ता हो
LdrLockLiberator उन तकनीकों का एक संग्रह है जो DllMain या किसी अन्य स्थान से अपना कोड निष्पादित करते समय Loader Lock से बचने या उसे छोड़ देने के लिए उपयोग की जाती हैं, जहाँ भी लॉक मौजूद हो सकता है। इसे "Perfect DLL Hijacking" लेख के साथ जारी किया गया था। हम आपको लाइब्रेरी लोडर को अनलॉक करने और अपने लोडर के साथ जो चाहें करने की कुंजी देते हैं (अपने ही कंप्यूटर पर)!
ये तकनीकें जहाँ संभव हो, सार्वभौमिक, स्वच्छ और 100% सुरक्षित होने के लिए बनाई गई हैं। इन्हें मेमोरी प्रोटेक्शन या पॉइंटर्स को संशोधित किए बिना काम करने के लिए डिज़ाइन किया गया है। यह आधुनिक एक्सप्लॉइट शमन के साथ संगत बने रहने के लिए महत्वपूर्ण है। एकमात्र आधिकारिक रूप से समर्थित आर्किटेक्चर x86-64 है (32-बिट काफी हद तक विलुप्त है)।
जानना चाहते हैं कि DllMain Windows पर इतना परेशानी भरा क्यों है, जबकि Unix-जैसे ऑपरेटिंग सिस्टम को यहाँ कोई परेशानी नहीं होती? कृपया, आपका स्वागत है!
यह बिल्कुल वैसा ही है जैसा यह सुनाई देता है। Loader Lock को अनलॉक करें, लोडर इवेंट्स सेट करें, और LdrpWorkInProgress को फ्लिप करें। सर्वोत्तम स्थिरता के लिए RUN_PAYLOAD_DIRECTLY_FROM_DLLMAIN को अपरिभाषित रखने की अनुशंसा की जाती है।
इस तकनीक का उपयोग प्रोडक्शन कोड में न करें। यह मेरी गहरी जिज्ञासा और हर पहलू को जाँचने की इच्छा के उप-उत्पाद के रूप में बनाई गई थी। इस कोड के साथ आप जो भी करेंगे, उसकी ज़िम्मेदारी आपकी होगी।
हम अपने DLL कोड में आमतौर पर EXEs द्वारा उपयोग किए जाने वाले CRT atexit का उपयोग करते हैं ताकि प्रोग्राम के बाहर निकलने पर Loader Lock से बच सकें। डायनामिक लोड (LoadLibrary का उपयोग करके) के लिए, LdrAddRefDll का उपयोग करके अपनी लाइब्रेरी को पिन (LDR_ADDREF_DLL_PIN) करके इसे 100% सुरक्षित बनाया जाता है, ताकि बाद में FreeLibrary हमारे DLL को मेमोरी से न हटा सके।
जल्द आ रहा है!
दिए गए नमूने C:\Program Files\Windows Defender\Offline\OfflineScannerShell.exe से MpClient.dll का हाईजैक करते हैं। स्रोत कोड टिप्पणियों में निर्देश दिए गए हैं ताकि इसे किसी भी अन्य DLL और प्रोग्राम युग्म के लिए आसानी से अनुकूलित किया जा सके (मुख्य रूप से केवल स्टैटिक लोड के लिए एक्सपोर्ट्स को अपडेट करके)!
एक प्रूफ ऑफ कॉन्सेप्ट के रूप में, हम डिफ़ॉल्ट पेलोड के रूप में ShellExecute चलाते हैं। हालाँकि, आप इसे जो चाहें करवा सकते हैं!
इस प्रोजेक्ट के रूट में मौजूद LdrLockLiberator.c को Visual Studio 2022 पर संकलित करने के लिए परीक्षण किया गया है।
Solution Explorer विंडो में वर्तमान Visual Studio प्रोजेक्ट का चयन करके, फिर मेनू बार में Project > Properties पर जाकर NTDLL से लिंक करें। शीर्ष पर स्थित ड्रॉप-डाउन Configuration मेनू से, All Configurations और All Platforms चुनें। अब, Linker > Input पर जाएँ और Additional Dependencies में जोड़ें: ntdll.lib।
C:\Windows\System32\msvcrt.dll) से लिंक करने का आधिकारिक समर्थन करता है5edc723b50ea28a070cad361dd0927df402b7a861a036bbcf11d27ebba77657dKitSetup.exe चलाएँLdrLockLiberatorWDK पर जाएँ (cd का उपयोग करके)build चलाएँहो गया! आपकी DLL बन चुकी है और उपयोग के लिए तैयार है!
WDK के विकल्प के रूप में, MinGW के साथ संकलन भी संभवतः काम करेगा।
MIT लाइसेंस - कॉपीराइट (C) 2023-2024 Elliot Killick [email protected]