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解析, 安全编程, 暴力破解检测, 渗透测试框架, 端点可见性, 跨架构编译, 逆向工程, 防御