anonymouschichvy/makne

GitHub: anonymouschichvy/makne

makne 是一个基于 Zydis 的 C++17 PE 二进制级多态与变形混淆引擎,旨在通过多种代码变换技术改变 x86/x64 可执行文件的签名与结构。

Stars: 1 | Forks: 0

``` ███╗ ███╗ █████╗ ██╗ ██╗███╗ ██╗███████╗ ████╗ ████║██╔══██╗██║ ██╔╝████╗ ██║██╔════╝ ██╔████╔██║███████║█████╔╝ ██╔██╗ ██║█████╗ ██║╚██╔╝██║██╔══██║██╔═██╗ ██║╚██╗██║██╔══╝ ██║ ╚═╝ ██║██║ ██║██║ ██╗██║ ╚████║███████╗ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝ ``` [![发布到 PyPI 和 GitHub Releases](https://static.pigsec.cn/wp-content/uploads/repos/cas/ab/abff1802e4c20dfc21f3c5a3b1f49051c28d24061da54c2a61f12d9c790ae228.svg)](https://github.com/anonymouschichvy/makne/actions/workflows/publish.yml) [![PyPI 版本](https://img.shields.io/pypi/v/makne.svg)](https://pypi.org/project/makne/) [![Python 版本](https://img.shields.io/pypi/pyversions/makne.svg)](https://pypi.org/project/makne/) [![许可证: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) [![平台](https://img.shields.io/badge/platform-windows%20%7C%20linux%20%7C%20macos-lightgrey.svg)](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 [options] * **Linux / macOS**: ./makne [options] ### CLI 命令选项 | 选项 | 类别 | 描述 | | :--- | :--- | :--- | | `--polymorphic` | 转换 | 应用多态转换(默认) | | `--metamorphic` | 转换 | 应用变形转换 | | `--mixed` | 转换 | 结合多态和变形 pipeline | | `--substitution` | 多态 | 启用指令替换 | | `--registers` | 多态 | 启用寄存器随机化 | | `--reorder` | 多态 | 启用基本块代码重排 | | `--junk` | 多态 | 启用垃圾/死代码插入 | | `--cflow` | 多态 |启用控制流混淆(平坦化/谓词) | | `--encrypt` | 多态 | 启用 payload 节加密 | | `--data` | 多态 | 启用静态数据/字符串编码 | | `--sections` | 多态 | 随机化节名称和布局 | | `--imports` | 多态 | 混淆 IAT 和导入名称 | | `--permute <1-5>` | 变形 | 设置指令排列复杂度级别 | | `--expand <1-5>` | 变形 | 设置代码扩展乘数 | | `--garbage <1-5>` | 变形 | 设置垃圾插入密度 | | `--unroll` | 变形 | 启用循环展开 | | `--inline` | 变形 | 启用函数内联 | | `--antidebug` | 高级 | 添加反调试器 stub 检测 | | `--antiemu` | 高级 | 添加反模拟时间检查 | | `--level <1-5>` | 高级 | 设置全局混淆强度(默认:3) | | `--iterations `| 高级 | 要运行的变异处理次数 | | `--help` | 常规 | 显示帮助文档 | ### 命令示例 以下是运行引擎的示例。请确保从包含已编译可执行文件(`build/` 或 `build/Release/`)的目录中运行它们,或者提供其完整路径。 #### 1. 显示帮助与选项 验证安装并查看受支持参数的完整列表。 * **Windows (PowerShell)**: .\makne.exe --help * **Linux / macOS**: ./makne --help #### 2. 标准多态混淆 应用指令替换、寄存器随机化、代码重排以及节名称/布局随机化。 * **Windows (PowerShell)**: .\makne.exe input.exe output.exe --polymorphic --substitution --registers --reorder --sections * **Linux / macOS**: ./makne input.exe output.exe --polymorphic --substitution --registers --reorder --sections * **标志说明**: * `--polymorphic`:激活多态转换 pipeline。 * `--substitution`:用等效序列替换常见的指令模式。 * `--registers`:安全地随机化通用寄存器的使用。 * `--reorder`:将代码划分为基本块并将它们混淆,添加缝合跳转。 * `--sections`:随机化 PE 节名称和结构布局。 #### 3. 高级变形混淆 应用激进的代码扩展、高复杂度指令排列、循环展开和函数内联。 * **Windows (PowerShell)**: .\makne.exe input.exe output.exe --metamorphic --permute 5 --expand 4 --unroll --inline * **Linux / macOS**: ./makne input.exe output.exe --metamorphic --permute 5 --expand 4 --unroll --inline * **标志说明**: * `--metamorphic`:激活变形转换 pipeline。 * `--permute 5`:设置指令排列的最高复杂度(级别 5)。 * `--expand 4`:将代码扩展乘数设置为 4。 * `--unroll`:启用优化的循环展开。 * `--inline`:在安全的情况下内联函数调用。 #### 4. 混合最大保护(组合 Pipeline) 结合所有变形和多态功能,平坦化控制流,混淆导入表,编码静态字符串,添加反分析/调试器/模拟检查,并运行多次处理。 * **Windows (PowerShell)**: .\makne.exe input.exe output.exe --mixed --cflow --encrypt --imports --data --antidebug --antiemu --level 5 --iterations 2 * **Linux / macOS**: ./makne input.exe output.exe --mixed --cflow --encrypt --imports --data --antidebug --antiemu --level 5 --iterations 2 * **标志说明**: * `--mixed`:按顺序运行多态和变形 pipeline。 * `--cflow`:通过分发器和不透明谓词扭曲控制流。 * `--encrypt`:加密目标节并在入口点插入解密 stub。 * `--imports`:混淆导入地址表 (IAT) 并动态解析 DLL。 * `--data`:编码静态字符串(XOR/Base64/拆分)。 * `--antidebug` 和 `--antiemu`:注入检查以检测调试器、Hypervisor 和沙箱。 * `--level 5`:将全局强度设置为最大值 (5)。 * `--iterations 2`:运行两次整个变异 pipeline 以生成嵌套的混淆层。 ## ⚖️ 许可证与免责声明 本软件严格仅出于**教育、安全研究和防御性二进制分析**目的而开发。严禁使用本软件混淆恶意软件以绕过防病毒扫描程序进行未经授权的部署,这违反了当地和国际法律。对于滥用此工具的行为,开发者不承担任何责任。
标签:Bash脚本, C++17, HTTP头分析, PE文件, Wayback Machine, 二进制混淆, 云资产清单, 代码变异, 反汇编, 逆向工具, 逆向工程