khalid609/Shellcode-Encoder

GitHub: khalid609/Shellcode-Encoder

一个用 C++ 编写的简易 XOR shellcode 编码器,使用滚动密钥对原始字节进行对称编码并生成可嵌入项目的头文件,主要用于安全研究和教学。

Stars: 0 | Forks: 0

# 🔐 XOR Shellcode 编码器 ## 📌 概述 一个简单的 C++ 工具,它使用滚动密钥对 shellcode 字节数组进行 XOR 编码,并将编码后的结果输出为可直接使用的 `.h` 头文件。专为研究 shellcode 混淆技术的安全研究人员和学生而设计。 ## 🔬 工作原理 ``` shellcode[] (raw bytes) │ ▼ XOR(key, shellcode, size) ← rolling key XOR — each byte XOR'd with key[i % keylen] │ ▼ encoded_shellcode.h ← output header with encoded bytes ready to embed ``` 每个字节编码后的形式为: ``` encoded[i] = shellcode[i] ^ key[i % key.length()] ``` 相同的函数可以对其进行解码 —— XOR 是对称的,因此使用相同的密钥再次运行 `XOR()` 即可恢复原始字节。 ## 📁 文件 | 文件 | 描述 | |---|---| | `XorEncoder.cpp` | 主编码器 —— 对 shellcode 进行 XOR 操作并写入输出的头文件 | | `encoded_shellcode.h` | 自动生成的输出,包含编码后的字节数组 | ## ⚙️ 设置 ### 前置条件 - Windows 或 Linux - 任意 C++ 编译器: - **Windows:** Visual Studio 2022 或通过 MinGW 使用 `g++` - **Linux:** `g++` ## 🚀 如何使用 ### 步骤 1 —— 添加你的 shellcode 打开 `XorEncoder.cpp` 并将占位符 shellcode 替换为你自己的字节: ``` unsigned char shellcode[] = { 0xFC, 0x48, 0x83, ... // paste your raw shellcode bytes here }; ``` ### 步骤 2 —— 设置你的 XOR 密钥 ``` std::string key = "mysecretkey"; // replace with your own key ``` ### 步骤 3 —— 构建 **Visual Studio:** ``` Build → Build Solution (Ctrl+Shift+B) ``` **g++ (Windows/Linux):** ``` g++ XorEncoder.cpp -o XorEncoder ``` ### 步骤 4 —— 运行 **Windows:** ``` XorEncoder.exe ``` **Linux:** ``` ./XorEncoder ``` ### 步骤 5 —— 使用输出 该工具会生成 `encoded_shellcode.h`: ``` unsigned char shellcode[] = { 0xdd, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d }; ``` 将此文件复制到你的项目中并包含它: ``` #include "encoded_shellcode.h" ``` 要在运行时解码,只需在执行前使用相同的密钥再次调用 `XOR()`: ``` XOR(key, shellcode, sizeof(shellcode)); ``` ## 📊 示例 **输入 shellcode** (NOP sled): ``` 0x90, 0x90, 0x90, 0x90 ``` **密钥:** `"mysecretkey"` **编码后的输出:** ``` 0x90 ^ 'm' = 0xFD 0x90 ^ 'y' = 0x09 0x90 ^ 's' = 0x03 0x90 ^ 'e' = 0xF5 ``` ## ⚠️ 限制 | 问题 | 详情 | |---|---| | 无密钥验证 | 空密钥会在 `key.length()` 中导致除以零错误 —— 务必设置一个非空密钥 | | 仅支持 XOR | 单层混淆 —— 结合 AES 以获得更强的保护 | | 密钥以明文存储 | 密钥在二进制文件中可见 —— 考虑对其进行混淆 | ## 🛡️ 学习内容 | 主题 | 详情 | |---|---| | XOR 混淆 | 滚动密钥 XOR 在字节级别是如何工作的 | | Shellcode 编码 | 编码后的 payload 如何逃避静态签名检测 | | C++ 文件 I/O | 将格式化的输出写入 `.h` 头文件 | | 对称编码 | 为什么 XOR 使用相同密钥时是其自身的逆运算 | ## 👤 作者 **Khalid** —— 网络安全学生 GitHub: [@khalid609](https://github.com/khalid609) ## 📄 许可证 仅供教育和授权的安全研究使用。
标签:C++, DNS 反向解析, Gophish, Shellcode编码, 数据擦除, 混淆