Ylxmy/Windows-Shellcode-Generator-Loader

GitHub: Ylxmy/Windows-Shellcode-Generator-Loader

一个Windows shellcode开发框架,提供位置无关代码生成、动态API解析和跨架构支持,用于安全研究和渗透测试中的自定义载荷开发。

Stars: 3 | Forks: 0

# ShellCode 一个综合性的 Windows shellcode 开发框架,用于通过动态 API 分析创建位置无关的可执行代码。本项目提供了利用先进规避技术创建 shellcode 的工具。 ## 特性 - **位置无关代码生成**:创建可在任意内存位置执行的 shellcode - **动态 API 解析**:使用基于哈希的 API 解析以避免静态导入 - **跨架构支持**:兼容 x86、x64 和 ARM 架构 - **规避技术**:实施先进技术以绕过安全机制 - **完整工具链**:包含生成器和加载器组件 - **最小依赖**:自包含框架,无外部运行时依赖 ## 安装 ### 构建 - 将项目下载到您的计算机。 - 将项目解压到一个文件夹中。 - 在您的计算机上下载 Visual Studio - 打开解决方案文件 (.sln)。 3. **构建项目:** - 将配置设置为 `Release` 以获得优化的 shellcode - 首先构建 `ShellCodeFrame` 项目 - 其次构建 `ShellCodeLoader` 项目 4. **验证构建输出:** Release/ ├── ShellCode.bin # 生成的 shellcode 二进制文件 ├── ShellCodeFrame.exe # Shellcode 生成器 └── ShellCodeLoader.exe # Shellcode 加载器/测试器 ## 快速开始 ### 生成 Shellcode ``` // Run the ShellCodeFrame generator ./Release/ShellCodeFrame.exe // This creates ShellCode.bin containing your position-independent code ``` ### 测试 Shellcode ``` // Load and execute the generated shellcode ./Release/ShellCodeLoader.exe // Expected output: Message box displaying "Hello GuiShou" ``` ### 基本集成 ``` #include int main() { // Load shellcode from file HANDLE hFile = CreateFileA("ShellCode.bin", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); DWORD dwSize = GetFileSize(hFile, NULL); // Allocate executable memory LPVOID lpBuffer = VirtualAlloc(NULL, dwSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE); // Read and execute DWORD dwRead; ReadFile(hFile, lpBuffer, dwSize, &dwRead, NULL); ((void(*)())lpBuffer)(); // Execute shellcode // Cleanup VirtualFree(lpBuffer, 0, MEM_RELEASE); CloseHandle(hFile); return 0; } ``` ## 项目结构 ``` ShellCode/ ├── ShellCodeFrame/ # Main shellcode generator │ ├── 0.entry.cpp # Entry point and file generation │ ├── a.start.cpp # Shellcode entry and initialization │ ├── b.work.cpp # Core functionality and API resolution │ ├── z.end.cpp # Shellcode termination marker │ ├── api.h # API function definitions and structures │ ├── hash.h # Pre-computed API hashes │ └── header.h # Common headers and declarations ├── ShellCodeLoader/ # Shellcode testing utility │ └── main.cpp # Loader implementation └── README.md # This file ``` ## 使用方法 ### 自定义 Shellcode 开发 1. **修改** `a.start.cpp` **中的 payload**: void ShellCodeEntry() { Functions fn; Initfunctions(&fn); // 您的自定义 shellcode 逻辑在此 char szMessage[] = {'Y','o','u','r',' ','m','e','s','s','a','g','e',0}; char szTitle[] = {'T','i','t','l','e',0}; fn.fnMessageBoxA(NULL, szMessage, szTitle, MB_OK); } 2. **在** `api.h` **中添加新的 API 函数**: typedef BOOL (WINAPI *pfnCreateProcessA)(/* parameters */); typedef struct _FUNCTIONS { pfnLoadLibraryA fnLoadLibraryA; pfnMessageBoxA fnMessageBoxA; pfnCreateProcessA fnCreateProcessA; // 新函数 } Functions, *Pfunctions; 3. **计算 API 哈希值**并添加到 `hash.h`: #define HASH_CreateProcessA 0x12345678 // 使用哈希算法计算 4. **在** `b.work.cpp` **中初始化新函数**: void Initfunctions(Pfunctions pfn) { pfn->fnLoadLibraryA = (pfnLoadLibraryA)GetProcAddressWithHash(HASH_LoadLibraryA); pfn->fnCreateProcessA = (pfnCreateProcessA)GetProcAddressWithHash(HASH_CreateProcessA); } ### 高级配置 #### 内存布局控制 ``` // Adjust memory sections in project settings #pragma comment(linker, "/SECTION:.text,ERW") #pragma comment(linker, "/MERGE:.rdata=.text") #pragma comment(linker, "/MERGE:.data=.text") ``` #### 反分析特性 ``` // Add obfuscation techniques #define OBFUSCATE_STRING(str) /* Your obfuscation method */ #define ANTI_DEBUG_CHECK() /* Your anti-debug code */ ``` ## 技术细节 ### 基于哈希的 API 解析 该框架使用自定义哈希算法动态解析 Windows API 函数: ``` DWORD CalculateHash(const char* functionName, const char* moduleName) { DWORD hash = 0; // ROR13 hash algorithm implementation while (*functionName) { hash = ROTR32(hash, 13); hash += *functionName++; } return hash + moduleHash; } ``` ### 内存保护绕过 加载器演示了几种内存保护绕过技术: 1. **使用 PAGE_EXECUTE_READWRITE 的 VirtualAlloc** 2. **通过函数指针直接执行内存** 3. **用于精确控制的内联汇编** ### 跨架构兼容性 ``` #if defined(_WIN64) PebAddress = (PPEB)__readgsqword(0x60); // x64 #elif defined(_M_ARM) PebAddress = (PPEB)((ULONG_PTR)_MoveFromCoprocessor(15, 0, 13, 0, 2) + 0); // ARM #else PebAddress = (PPEB)__readfsdword(0x30); // x86 #endif ``` ## 代码示例 ### 基本消息框 Shellcode ``` void ShellCodeEntry() { Functions fn; Initfunctions(&fn); // Obfuscated strings to avoid static analysis char szText[] = {'H','e','l','l','o',' ','W','o','r','l','d',0}; char szCaption[] = {'S','h','e','l','l','c','o','d','e',0}; fn.fnMessageBoxA(NULL, szText, szCaption, MB_OK); } ``` ### 进程创建 Shellcode ``` void ShellCodeEntry() { Functions fn; Initfunctions(&fn); // Load kernel32.dll for CreateProcessA char szKernel32[] = {'k','e','r','n','e','l','3','2','.','d','l','l',0}; fn.fnLoadLibraryA(szKernel32); // Get CreateProcessA function pfnCreateProcessA fnCreateProcessA = (pfnCreateProcessA)GetProcAddressWithHash(HASH_CreateProcessA); // Execute notepad.exe char szNotepad[] = {'n','o','t','e','p','a','d','.','e','x','e',0}; STARTUPINFOA si = {0}; PROCESS_INFORMATION pi = {0}; si.cb = sizeof(si); fnCreateProcessA(NULL, szNotepad, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); } ``` ### 网络通信 Shellcode ``` void ShellCodeEntry() { Functions fn; Initfunctions(&fn); // Load ws2_32.dll for network functions char szWs2_32[] = {'w','s','2','_','3','2','.','d','l','l',0}; HMODULE hWs2_32 = fn.fnLoadLibraryA(szWs2_32); // Initialize Winsock and create reverse shell // ... implementation details } ``` ## 配置 ### 哈希生成 要添加新的 API 函数,请使用此算法计算其哈希值: ``` def calculate_hash(function_name, module_name): def ror32(value, shift): return ((value >> shift) | (value << (32 - shift))) & 0xFFFFFFFF # Calculate module hash module_hash = 0 for char in module_name.upper(): module_hash = ror32(module_hash, 13) module_hash = (module_hash + ord(char)) & 0xFFFFFFFF # Calculate function hash function_hash = 0 for char in function_name: function_hash = ror32(function_hash, 13) function_hash = (function_hash + ord(char)) & 0xFFFFFFFF return (function_hash + module_hash) & 0xFFFFFFFF # 示例用法 hash_value = calculate_hash("MessageBoxA", "USER32.DLL") print(f"#define HASH_MessageBoxA 0x{hash_value:08X}") ``` ### 代码风格 ``` // Use descriptive variable names DWORD dwFunctionHash = 0; // Comment complex algorithms // ROR13 hash algorithm for API resolution hash = ROTR32(hash, 13); // Maintain consistent indentation if (condition) { // Action } ``` ## 免责声明 本软件仅用于教育和研究目的。作者对因滥用本软件造成的任何后果不承担任何责任。 ## 许可证 本项目基于 MIT 许可证授权 - 详见 [LICENSE](LICENSE) 文件。
标签:C/C++, Conpot, DNS 反向解析, Fail2ban, Golang, Hash调用, PIC, Shellcode开发, Shellcode生成器, UML, VisualStudio, Windows安全, x86/x64/ARM, 事务性I/O, 二进制安全, 云资产清单, 位置无关代码, 免杀技术, 动态API解析, 安全编程, 暴力破解检测, 渗透测试框架, 端点可见性, 跨架构编译, 逆向工程, 防御