
रिफ्लेक्टिव DLL इंजेक्शन का शेलकोड कार्यान्वयन। DLL को पोजीशन इंडिपेंडेंट शेलकोड में कन्वर्ट करें।
sRDI DLL फ़ाइलों को पोज़िशन इंडिपेंडेंट शेलकोड में बदलने की अनुमति देता है। यह एक पूर्ण रूप से कार्यात्मक PE लोडर होने का प्रयास करता है जो उचित सेक्शन अनुमतियों, TLS कॉलबैक और सैनिटी जाँचों का समर्थन करता है। इसे एक पैक्ड DLL से जुड़े शेलकोड PE लोडर के रूप में सोचा जा सकता है।
कार्यक्षमता दो घटकों के माध्यम से प्राप्त की जाती है:
इस प्रोजेक्ट में निम्नलिखित तत्व शामिल हैं:
DLL को RDI के साथ संकलित करने की आवश्यकता नहीं है, हालांकि यह तकनीक क्रॉस-कम्पैटिबल है।
उपयोग से पहले, मैं अनुशंसा करता हूँ कि आप Reflective DLL Injection और इसके उद्देश्य से परिचित हों।
from ShellcodeRDI import *
dll = open("TestDLL_x86.dll", 'rb').read()
shellcode = ConvertToShellcode(dll)
DotNetLoader.exe TestDLL_x64.dll
python ConvertToShellcode.py TestDLL_x64.dll
NativeLoader.exe TestDLL_x64.bin
Import-Module .\Invoke-Shellcode.ps1
Import-Module .\ConvertTo-Shellcode.ps1
Invoke-Shellcode -Shellcode (ConvertTo-Shellcode -File TestDLL_x64.dll)
PE लोडर कोड लोडिंग लॉजिक के विभिन्न विकल्पों को नियंत्रित करने के लिए flags तर्क का उपयोग करता है:
SRDI_CLEARHEADER [0x1]: लक्ष्य DLL के DOS हेडर और DOS स्टब को लोड करने पर शून्य बाइट्स से पूरी तरह मिटा दिया जाता है (e_lfanew को छोड़कर)। इससे बेस एड्रेस को स्यूडो HMODULE के रूप में आपूर्ति करते समय स्टॉक विंडोज API में समस्याएँ हो सकती हैं।SRDI_CLEARMEMORY [0x2]: लोड किए गए मॉड्यूल (DllMain और किसी भी निर्यात) में फ़ंक्शन को कॉल करने के बाद, DLL डेटा मेमोरी से साफ़ हो जाएगा। यह खतरनाक है यदि आप मॉड्यूल से कोड निष्पादित करना जारी रखने की उम्मीद करते हैं (थ्रेड्स / GetProcAddressR)।SRDI_OBFUSCATEIMPORTS [0x4]: IAT पैचिंग शुरू करने से पहले मॉड्यूल में आयातों का क्रम यादृच्छिक किया जाएगा। इसके अतिरिक्त, फ़्लैग के उच्च 16 बिट्स का उपयोग अगले आयात को संसाधित करने से पहले रुकने के लिए सेकंड की संख्या को संग्रहीत करने के लिए किया जा सकता है। उदाहरण के लिए, flags | (3 << 16) हर आयात के बीच 3 सेकंड रुकेगा।SRDI_PASS_SHELLCODE_BASE [0x8]: निर्यातित फ़ंक्शन को आपूर्ति किए गए उपयोगकर्ता डेटा को पास करने के बजाय, sRDI वर्तमान में निष्पादित शेलकोड ब्लॉक का बेस एड्रेस पास करेगा। यह अधिक उन्नत मॉड्यूल के अंदर स्व-सफाई के लिए उपयोगी हो सकता है।यह प्रोजेक्ट Visual Studio 2019 (v142) और Windows SDK 10 का उपयोग करके बनाया गया है। python स्क्रिप्ट Python 3 का उपयोग करके लिखी गई है।
Python और Powershell स्क्रिप्ट यहाँ स्थित हैं:
Python\ConvertToShellcode.pyPowerShell\ConvertTo-Shellcode.ps1प्रोजेक्ट बनाने के बाद, अन्य बाइनरी यहाँ स्थित होंगी:
bin\NativeLoader.exebin\DotNetLoader.exebin\TestDLL_<arch>.dllbin\ShellcodeRDI_<arch>.binयदि आप किसी भी टूल के अंदर स्थिर ब्लॉब को अपडेट करना चाहते हैं:
> python .\lib\Python\EncodeBlobs.py -h
usage: EncodeBlobs.py [-h] solution_dir
sRDI Blob Encoder
positional arguments:
solution_dir Solution Directory
optional arguments:
-h, --help show this help message and exit
> python lib\Python\EncodeBlobs.py C:\code\srdi
[+] Updated C:\code\srdi\Native/Loader.cpp
[+] Updated C:\code\srdi\DotNet/Program.cs
[+] Updated C:\code\srdi\Python/ShellcodeRDI.py
[+] Updated C:\code\srdi\PowerShell/ConvertTo-Shellcode.ps1
यदि आपको मेरा कोड घिनौना लगता है, या बस एक वैकल्पिक मेमोरी-PE लोडर प्रोजेक्ट की तलाश है, तो इनमें से कुछ देखें:
इस प्रोजेक्ट का आधार "Improved Reflective DLL Injection" from Dan Staples से लिया गया है, जो स्वयं Stephen Fewer के मूल प्रोजेक्ट से व्युत्पन्न है।
C कोड को शेलकोड के रूप में संकलित करने का प्रोजेक्ट फ्रेमवर्क Mathew Graeber's reasearch "PIC_BindShell" से लिया गया है।