anonymouschichvy/makne
GitHub: anonymouschichvy/makne
makne 是一个基于 Zydis 的 C++17 PE 二进制级多态与变形混淆引擎,旨在通过多种代码变换技术改变 x86/x64 可执行文件的签名与结构。
Stars: 1 | Forks: 0
```
███╗ ███╗ █████╗ ██╗ ██╗███╗ ██╗███████╗
████╗ ████║██╔══██╗██║ ██╔╝████╗ ██║██╔════╝
██╔████╔██║███████║█████╔╝ ██╔██╗ ██║█████╗
██║╚██╔╝██║██╔══██║██╔═██╗ ██║╚██╗██║██╔══╝
██║ ╚═╝ ██║██║ ██║██║ ██╗██║ ╚████║███████╗
╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝
```
[](https://github.com/anonymouschichvy/makne/actions/workflows/publish.yml) [](https://pypi.org/project/makne/) [](https://pypi.org/project/makne/) [](https://opensource.org/licenses/MIT) [](https://github.com/anonymouschichvy/makne)
一个用于 **PE (Portable Executable) 32位 (x86) 和 64位 (x64)** 二进制文件的高级二进制级别变异与混淆框架,使用 C++17 编写。该引擎利用高性能的 **Zydis 反汇编器**后端,动态解析 PE 文件,识别指令/基本块边界,应用多态和变形转换处理,并使用修改后的节结构和更新后的 PE 元数据重新生成可执行文件。
## 📂 项目目录结构
本项目遵循清晰、模块化的 C++ 目录布局,将定义(头文件)与源代码和配置分开:
```
makne/
├── CMakeLists.txt # Cross-platform build configuration
├── README.md # Project documentation
├── include/ # Header files
│ ├── PEStructs.h # Native PE structures definitions (DOS, COFF, Optional headers)
│ ├── CodeReorderer.h # Basic block analysis and shuffling definitions
│ ├── ControlFlowObfuscator.h # Control flow flattening & opaque predicate definitions
│ ├── DataEncoder.h # Data/String encoding & decoder stub generation
│ ├── DecryptorGenerator.h # Polymorphic decryptor stub creation
│ ├── ImportObfuscator.h # IAT obfuscation and API hashing definitions
│ ├── InstructionSubstitutor.h# Instruction-equivalent database mapping
│ ├── JunkCodeInserter.h # Dead code/junk sequence generator
│ ├── MetamorphicEngine.h # High-level metamorphic mutation pipeline
│ ├── PayloadEncryptor.h # Section-level encryption management
│ ├── PolymorphicEngine.h # Core processing, PE parsing, and orchestrator
│ ├── RegisterRandomizer.h # ModR/M register mapping and randomization
│ ├── SectionRandomizer.h # PE section name, layout, and alignment shuffler
│ └── Utils.h # Randomness and helper definitions
└── src/ # Implementation files
├── main.cpp # Command-line driver and argument parser
├── CodeReorderer.cpp # Basic block identification, jump fixing, and shuffling
├── ControlFlowObfuscator.cpp # Flow flatters, dispatchers, and opaque predicates
├── DataEncoder.cpp # XOR, Base64, and split-string algorithms
├── DecryptorGenerator.cpp # Dynamic x86 assembly generator for decryption
├── ImportObfuscator.cpp # IAT parsing, dynamic DLL resolution, and API hashing
├── InstructionSubstitutor.cpp # x86 equivalent instruction mapping execution
├── JunkCodeInserter.cpp # NOP-equivalent & flag-safe instruction generation
├── MetamorphicEngine.cpp # Loop unrolling, inlining, and expansion levels
├── PayloadEncryptor.cpp # XOR encryption and decryption insertion logic
├── PolymorphicEngine.cpp # Core engine implementation (PE parsing, rebuilding)
├── RegisterRandomizer.cpp # Register swapping and translation tables
├── SectionRandomizer.cpp # Section shuffling, renaming, and alignment fixing
└── Utils.cpp # Cryptographic RNG (CryptoRandom)
```
## 🛠 功能与特性
该引擎具有两种截然不同的转换模式,它们可以组合使用(混合模式):
### 1. 多态转换
* **Zydis 反汇编器后端**:用功能齐全的 Zydis 解码器取代了自定义的前缀/操作码长度解析器,以安全地识别 x86/x64 指令边界,解码操作数布局,并执行原子字节流修改。
* **指令替换**:用等效的 CPU 序列替换指令模式。例如:
* `MOV reg, Imm` $\rightarrow$ `PUSH Imm; POP reg`
* `XOR reg, reg` $\rightarrow$ `SUB reg, reg`
* `NOP` $\rightarrow$ `PUSH RBX; POP RBX` 或 `XCHG RAX, RAX`
* *x64 安全过滤器*:自动绕过 x64 目标上的单字节传统 `INC` (`0x40`) / `DEC` (`0x48`) 替换,以防止与 REX 前缀字节范围 (`0x40-0x4F`) 发生冲突。
* **寄存器随机化器**:在遵守严格架构限制的同时,动态重新映射通用寄存器的使用:
* *调用约定安全*:保留调用者/被调用者边界寄存器 `RAX/EAX`(返回值)、`RCX/ECX, RDX/EDX, R8, R9`(参数)、`RSP/ESP, RBP/EBP`(堆栈帧)和 `R12, R13`(特殊 SIB 地址)。
* *分区混淆*:仅在传统(`RBX, RSI, RDI`)和扩展(`R10, R11, R14, R15`)组内安全地混淆寄存器,确保指令长度和 REX 前缀状态保持完全不变。
* *动态隐式寄存器扫描*:解码指令操作数以自动检测并排除隐式寄存器(例如,除法中的 EAX/EDX,或字符串操作中的 ESI/EDI/RSI/RDI),防止语义损坏。
* *RIP 相对寻址保护*:自动绕过对包含 RIP 相对或 EIP 相对位移寻址的指令进行寄存器随机化,以维持正确的相对内存引用。
* **导入混淆**:擦除原始导入地址表 (IAT) 名称,并将其替换为动态生成的导入解析 stub:
* *x86 目标*:通过 `FS:[0x30]` 遍历 32 位 PEB 加载器列表以定位模块基址,并在运行时使用 `ROR13` 哈希解析 API 地址。
* *x64 目标*:通过 `GS:[0x60]` 遍历 64 位 PEB,实现带有 32 字节堆栈影子空间分配的完整 Microsoft x64 调用约定,并利用 RIP 相对寻址来定位字符串表偏移量。
* **异常目录重定位**:自动解析 x64 `.pdata` 运行时函数表和 `UNWIND_INFO` 结构,以在混淆或重命名 PE 节时重定位 32 位异常处理程序 RVA。
* **代码重排 (x86/x64)**:将代码划分为基本块,随机打乱它们的位置,并通过使用 JMP 指令将块缝合在一起来维持原始执行流。使用 Zydis 解析分支偏移量和相对内存位移以修补目标。
* **垃圾代码插入器 (x86/x64)**:插入上下文相关且无害的垃圾指令(例如,标志位安全操作),以在不改变执行行为的情况下修改字节签名。过滤掉 x64 上仅限 x86 的指令。
* **控制流混淆 (x86/x64)**:通过用等效的联合条件对(例如 `JO` + `JNO`)替换跳转,以及用反转的 Jcc 跳过替换 Jcc 条件,来扭曲控制流。
* **Payload 加密**:加密目标 payload 节(XOR 等),并注入动态生成的解密器 stub 作为入口点。在 x64 目标上,stub 使用 `GS:[0x60]`(而不是 x86 上的 `FS:[0x30]`)查询进程环境块 (PEB) 以进行反调试分析。
* **数据编码**:使用 XOR、Base64 或字符串拆分对静态数据字符串进行编码,以避免被检测到明文字符串。
### 2. 变形转换
* **Zydis 中间表示**:将目标函数反汇编并解码为 IR,重写位移和 `%rip` 相对位移,以在变异时修补跳转偏移和重定位。
* **指令排列 (x86/x64)**:使用 Bernstein 的数据依赖条件(RAW、WAR、WAW)更改指令位置,同时保留堆栈帧布局寄存器(`RSP`、`ESP`、`RBP`、`EBP`)。
* **代码扩展**:将指令扩展为多字节等效指令,以改变可执行文件的大小。
* **循环展开与函数内联**:通过消除调用和分支来修改堆栈帧结构和执行序列。
* **反调试 / 反模拟**:集成 stub 以检测 Hypervisor、沙箱和调试器(例如,PEB 检查、时间检查)。
* **FileAlignment 节大小调整**:安全地填充、调整大小并将原始 PE 节大小的增长对齐到 `FileAlignment` 边界,自动重定位 COFF 符号表以防止出现符号警告或映像加载程序崩溃。
## ⚙️ 编译与安装
本项目可以作为独立的 C++ 命令行工具进行编译,也可以作为带有编程式 C++ 包装器绑定的 Python 包进行安装。
### 🐍 Python 包安装(通过 pip)
您可以直接将项目作为 Python 包进行构建和安装。PEP 517 构建后端 (`scikit-build-core`) 将在安装时通过 CMake 自动配置并构建 C++ 代码库。
#### 1. 前置条件
确保您已安装 C++17 编译器(Windows 上的 MSVC,Linux 上的 GCC,macOS 上的 Clang)和 CMake。
* **Windows 源码构建说明**:如果在标准的 PowerShell/CMD 终端中从源码安装,并且 MSVC 工具不在您的路径中,则必须指定生成器:
$env:CMAKE_GENERATOR="MinGW Makefiles"
或者,在 **Developer PowerShell for Visual Studio** 中运行该命令。
#### 2. 从 PyPI 安装(生产环境)
```
pip install makne
```
#### 3. 从源码安装(本地开发)
克隆存储库并运行:
```
# 可编辑安装(推荐开发者使用)
pip install -e .
# 或标准本地安装
pip install .
```
#### 4. 验证与使用
* **CLI 用法**:安装该包将注册一个全局命令行入口点:
makne --help
* **Python API 用法**:您可以直接从 Python 脚本运行混淆器:
import makne
# 混淆一个 PE 二进制文件
return_code = makne.obfuscate("input.exe", "output.exe", ["--polymorphic", "--substitution"])
if return_code == 0:
print("混淆成功!")
### 🖥️ 原生 C++ 独立编译
如果您更喜欢在不使用 Python 的情况下构建独立的原生可执行文件,构建系统会利用 **CMake** 进行配置和构建。构建系统会在配置期间通过 CMake 的 `FetchContent` 模块自动获取 **Zydis disassembler** 和 **Zycore** 等依赖项,因此无需手动下载子模块。
### 🪟 Windows (MSVC)
#### 1. 前置条件
* **Visual Studio 2019 或 2022**(社区版、专业版或企业版)。
* 在安装过程中,确保勾选了 **“使用 C++ 的桌面开发”** 工作负载。这将安装 MSVC 编译器、CMake 和所需的 Windows SDK。
* 或者,您可以使用独立的 **CMake (3.15+)** 和 **Visual Studio 生成工具**。
#### 2. 从命令行构建
打开 **VS 的开发者 PowerShell** 或 **VS 的开发者命令提示符** 并运行:
```
# 生成构建配置
cmake -B build -S .
# 构建 Release binary
cmake --build build --config Release
```
编译后的可执行文件 `makne.exe` 将位于 `build/Release/` 中。
#### 3. 通过 Visual Studio (IDE) 构建
1. 打开 Visual Studio。
2. 选择 **打开本地文件夹**,并选择包含 `CMakeLists.txt` 的根目录。
3. Visual Studio 将自动检测并配置 CMake 项目。
4. 转到菜单:**生成 > 全部生成**(或选择 `makne.exe` 启动项并按 F5/Ctrl+F5 进行生成和运行)。
### 🐧 Linux (GCC/Clang)
#### 1. 前置条件
安装 CMake 和兼容 C++17 的编译器(GCC 8+ 或 Clang 7+):
* **Ubuntu / Debian**:
sudo apt update
sudo apt install -y build-essential cmake
* **Fedora / CentOS / RHEL**:
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y cmake
* **Arch Linux**:
sudo pacman -Syu base-devel cmake
#### 2. 构建
在项目根文件夹中打开一个终端:
```
# 为 Release build 生成构建配置
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
# 构建项目
cmake --build build
```
编译后的可执行文件 `makne` 将位于 `build/` 中。
### 🍎 macOS (Clang)
#### 1. 前置条件
* **Xcode 命令行工具**:在终端中运行以下命令进行安装:
xcode-select --install
* **CMake**:使用包管理器安装 CMake:
* **Homebrew**(推荐):
brew install cmake
* **MacPorts**:
sudo port install cmake
#### 2. 构建
在项目根文件夹中打开一个终端:
```
# 为 Release build 生成构建配置
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
# 构建项目
cmake --build build
```
编译后的可执行文件 `makne` 将位于 `build/` 中。
## 🧠 系统架构与逻辑
```
graph TD
A[Input PE Binary] --> B[PE Parser]
B --> C[Disassembler & Block Finder]
C --> D{Transformation Mode}
D -->|Polymorphic| E[Polymorphic Pipeline]
D -->|Metamorphic| F[Metamorphic Pipeline]
D -->|Mixed| G[Polymorphic & Metamorphic Pipeline]
E --> H[Payload Encryption & Stub Generation]
F --> I[Block Permutation & Expansion]
G --> J[Combined Transformations]
H --> K[PE Rebuilder & Checksum Generator]
I --> K
J --> K
K --> L[Output Obfuscated PE Binary]
```
### 流程演练
1. **解析 (PE 解析器)**:
加载目标 `.exe` 文件的原始字节流。解析 DOS MZ 签名、COFF 头、可选头和节,以在内存中构建代码(`.text`)和数据(`.data`、`.rdata`)段的结构映射。
2. **代码分析与反汇编**:
解析机器代码指令,确定字节长度的边界偏移量,识别分支(跳转、调用),并隔离出独立的执行块(基本块)。
3. **应用变异**:
运行选定混淆处理的 pipeline。引擎会跟踪偏移量的修改,因为指令替换、垃圾代码插入和代码块混淆会改变虚拟地址 (RVA)。
4. **头文件重建与重新生成**:
调整重定位,重新计算入口点 (OEP),移动节头偏移量,修复导入地址表 (IAT) 指针,生成动态导入解析 stub,计算新的 PE 校验和,并保存新的输出二进制文件。
## 🚀 CLI 用法与示例
### 使用语法:
* **Windows (PowerShell/CMD)**:
.\makne.exe 标签:Bash脚本, C++17, HTTP头分析, PE文件, Wayback Machine, 二进制混淆, 云资产清单, 代码变异, 反汇编, 逆向工具, 逆向工程