edspecialmed/LoadPE-Polymorphic-PE-Crypter
GitHub: edspecialmed/LoadPE-Polymorphic-PE-Crypter
一个教育性质的多态PE加密器项目,演示Windows可执行文件的加密、加载和多种规避技术的实现原理。
Stars: 0 | Forks: 0
# LoadPE — 多态 PE 加密器
## 概述
LoadPE 是一个多态 PE 加密器,使用 AES-256 CBC 加密 Windows 可执行文件,并将其封装在独立的加载器 stub 中。每次构建都会通过多层源代码级多态性产生结构上唯一的二进制文件,使其成为恶意软件分析师的实用研究目标,也是进攻性安全研究人员的参考实现。
**涵盖的核心概念:**
- PE 文件格式内部结构(头、节、导入表、重定位表)
- AES-256 CBC 加密 — 独立实现,无 CRT 依赖
- Windows 内部机制:PEB 遍历、模块枚举、导出表遍历
- 通过手写 x64 MASM 跳板实现间接系统调用
- 静态和动态分析规避技术
## 架构
```
builder.py ← Python build script (encrypts PE, generates polymorphic stub)
stub.c ← C loader template (injected with payload + per-build code)
entry.asm ← Generated x64 MASM (RSP alignment + indirect syscall trampolines)
test_payload.c ← Minimal test payload (MessageBox)
compile_test.py ← Helper to compile test_payload.exe via MSVC
```
### 构建流水线
```
input.exe
│
▼
[AES-256 CBC encrypt] ← random key + IV per build
│
▼
[stub.c template] ← inject payload, polymorphic hashes, obfuscated S-box, junk code
│
▼
[name randomization] ← all internal symbols renamed to random hex identifiers
│
▼
[MSVC compile + ML64]
│
▼
[PE post-processing] ← strip overlay, randomize timestamp, erase Rich header
│
▼
output.exe
```
## 功能特性
### 加密技术
| 特性 | 详情 |
|---|---|
| 算法 | AES-256 CBC |
| 密钥调度 | 独立的 `KeyExpansion` 实现 — 无 OpenSSL,无 CRT |
| S-box 混淆 | S-box 和逆 S-box 与每次构建的随机字节进行 XOR 运算;运行时解码 |
| 密钥清除 | 解密后从内存中清除 AES 密钥、IV 和上下文 |
### 多态性(每次构建随机化)
| 特性 | 详情 |
|---|---|
| API 哈希 | DJB2 配合随机种子;所有 `HASH_*` 宏在每次构建时重新生成 |
| S-box XOR 密钥 | 随机 1 字节密钥应用于两个 S-box 表 |
| 符号名称 | 所有函数/变量名称替换为随机十六进制标识符 |
| 垃圾代码 | 在 4 个位置注入死代码块(算术、条件、循环) |
| PE 时间戳 | 编译后在 COFF 头中随机化 |
| Rich 头 | 编译后从 MZ stub 中擦除 |
| 覆盖数据剥离 | 移除最后一个 PE 节之后的数据 |
### 加载器 (stub.c)
- **无导入** — 通过 PEB → LDR → 导出表哈希遍历在运行时解析所有 API
- **间接系统调用** — `NtAllocateVirtualMemory`、`NtProtectVirtualMemory`、`NtFreeVirtualMemory` 通过 MASM 跳板调用(SSN 从 ntdll stub 中提取,`syscall` gadget 动态定位)
- **NTDLL 脱钩** — 从磁盘映射 ntdll 的干净副本并覆盖 `.text` 节以移除用户态钩子
- **完整 PE 加载器** — 复制节、修复 IAT(导入地址表)、应用基址重定位、设置每节内存保护
- **控制台支持** — 如果载荷具有 `IMAGE_SUBSYSTEM_WINDOWS_CUI`,则分配控制台
- **线程执行** — 通过 `CreateThread` + `WaitForSingleObject` 调用载荷入口点 |
### 规避技术(用于分析/研究)
| 技术 | 实现方式 |
|---|---|
| 反调试 | PEB `BeingDebugged`、`NtGlobalFlag`,RDTSC 时序增量 |
| 反沙箱 | RAM < 4 GB 检查,CPU 数量 < 2 检查,Sleep 时序快进检测 |
| ETW 绕过 | 用 `xor eax, eax; ret` 修补 `EtwEventWrite` |
| AMSI 绕过 | 用 `mov eax, E_INVALIDARG; ret` 修补 `AmsiScanBuffer` |
| 虚假版本信息 | 生成包含随机公司名称、产品和版本的 `.rc` 资源 |
## 环境要求
- Windows x64
- **Visual Studio 2019/2022**(MSVC + ML64)— 通过 `vswhere` 自动检测
- Python 3.x + `pycryptodome`
```
pip install pycryptodome
```
## 使用方法
### 1. 编译测试载荷
```
python compile_test.py
```
生成 `test_payload.exe` — 一个简单的 MessageBox,用于确认加载器工作正常。
### 2. 构建加密二进制文件
```
python builder.py
```
示例:
```
python builder.py test_payload.exe test_payload_crypted.exe
```
示例输出:
```
=== PE CRYPTER [POLYMORPHIC + EVASION EDITION] ===
[*] Reading test_payload.exe...
[*] Polymorphism Seed: 482931
[*] S-box XOR key: 0xA7
[*] Resource: Windows System Service by Intel Corporation v8.3.14821
[*] Found MSVC 14.38.33130 at C:\...\bin\Hostx64\x64
[*] Compiling with Polymorphism + Evasion...
[+] SUCCESS! Unique Build: test_payload_crypted.exe
[*] PE metadata manipulated (timestamp=0x5f3a1c88, Rich header erased)
[*] No overlay detected
```
## 学习主题
本项目是以下主题的实践参考:
**逆向工程**
- 如何在 IDA 或 x64dbg 中识别 PE 加密器/加载器
- 基于 PEB 的模块解析 vs. `GetModuleHandle`
- 基于哈希的导入解析(vs. 基于字符串)
- 间接系统调用以及如何找到真实的 SSN
**密码学**
- AES-256 CBC:分组密码、密钥调度、CBC 链式操作
- 为什么清除内存中的密钥材料很重要
- S-box 混淆作为静态分析的障碍
**Windows 内部机制**
- PE 格式:DOS 头、NT 头、节表、导入/重定位目录
- PEB 结构以及加载器模块列表
- 内存保护和 `VirtualProtect` / `NtProtectVirtualMemory`
**恶意软件分析**
- 常见的反调试和反沙箱模式
- ETW 和 AMSI — 它们是什么,绕过如何工作,以及如何检测它们
- NTDLL 钩子/脱钩(用户态 EDR 钩子)
## 免责声明
本项目仅发布用于**教育和研究目的**。旨在帮助安全专业人员、学生和 CTF 参与者了解 PE 加载器、加密器和规避技术在底层是如何工作的。
**请勿将此软件用于您不拥有或未获得明确书面测试许可的系统。**
作者对任何误用不承担责任。
标签:AES-256, Chrome扩展, DAST, DNS 反向解析, DOM解析, Hpfeeds, MASM, PEB遍历, PE文件格式, Windows API, x64汇编, 二进制安全, 云资产清单, 代码混淆, 加密器, 加载器, 动态分析规避, 反调试, 多态加密, 安全测试, 客户端加密, 恶意软件分析, 攻击性安全, 漏洞评估, 端点可见性, 系统调用, 网络安全, 逆向工具, 逆向工程, 隐私保护, 静态分析规避