Arrbat/Veil-Forge
GitHub: Arrbat/Veil-Forge
纯 C 实现的教育性 PE 打包器,通过 ChaCha20-Poly1305 加密与进程镂空技术保护 x64 PE 免受静态与动态分析。
Stars: 6 | Forks: 3

# Veil-Forge
## 太长不看
使用 C 语言编写的面向研究的 PE 打包器,实现了 ChaCha20-Poly1305、HKDF 和 SHA-256 算法,并结合了反调试技术和进程镂空技术。
该项目探讨了受保护或恶意软件中常用的规避和反分析技术,重点关注实现细节和逆向工程的影响。
## 免责声明
本项目并非为恶意软件开发而创建。
它仅用于**合法**和**教育**目的。作者**不**支持或认可任何非法使用行为,包括但不限于创建、分发或执行恶意软件。**请负责任地使用此工具,并且仅在您已获得明确授权的环境中使用。**
本项目也**不保证在密码学及整体上是安全的**。它的创建是为了演示编程和逆向工程技能。但是,如果在不违反所在国家法律的前提下,此工具能对您有所帮助,那将不胜感激。
## 概述
Veil-Forge 会对给定的 x64 PE 可执行文件进行加密,并将其嵌入到预编译的解包存根中。
在运行时,该存根会:
- 使用 HKDF 派生密钥
- 解密 payload
- 通过进程镂空技术执行它
这种设计防止了对原始二进制文件的直接静态检查,并为动态分析增加了额外的复杂性。
## 构建
您需要安装 `x86_64-w64-mingw32-gcc` 交叉编译器。
要自动构建,请运行:
```
./build.bat
```
## 使用说明
用法:
```
./packer.exe your.exe KEY64_IN_HEX NONCE24_IN_HEX
```
使用测试文件的示例:
```
./packer.exe hello_world.exe 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef 0123456789abcdef0123456789abcdef0123456789abcdef
```
用户必须提供 key 和 nonce。如果缺少其中任何一个,最终的应用程序将无法运行。
请使用安全的方法(例如加密密钥生成器,您可以在网络服务上找到)生成 64 字节的 key 和 24 字节的 nonce,并以十六进制格式提供。
## 技术细节
该项目使用了以下算法:
```
- AEAD ChaCha20-Poly1305
- SHA-256
- HKDF (HMAC-based key derivation)
- Process Hollowing
- Anti-debug techniques
```
限制:
```
No support for 32-bit systems
No Linux/macOS support
No anti-VM or sandbox detection
Stub does not use any obfuscation
AV software (like Windows Defender) will almost certainly detect the final exe as a trojan
⚠️ Antivirus software may flag or delete the generated executable.
F.e. Windows Defender sometimes thinks that final executable file is suspicious at least
and describes it as the trojan and tries to delete it.
```

# 测试
项目在 Windows 11 (v.23H2, x64) 上进行了测试、编译和运行。
此外,还针对打包器和解包器函数编写了单元测试。如果要自动测试应用程序,请运行编译好的 tests.exe。
如果一切正常,您应该会看到(以 hello_world.exe 为例):
```
./build.bat
Note that building requires x86_64-w64-mingw32-gcc compiler and supports only Windows 64-bit.
tests.exe will be builded with all unit tests included, so that you can check if app works as expected by running ./tests.exe .
Building with default warning settings. ./build.bat WARN_ALL for more information of building.
UNPACKER BUILDING SUCCESS
PACKER BUILDING SUCCESS
TESTS_PACKER BUILD SUCCESS
TESTS_UNPACKER BUILD SUCCESS
```
```
./packer.exe hello_world.exe 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef 0123456789abcdef0123456789abcdef0123456789abcdef
Checking input arguments...
Arguments are valid.
Reading input file...
Read file successfully.
Validate input file as x64 PE...
File is valid x64 PE.
Encrypting data...
Encryption ended successfully.
Copying stub template...
Copying stub template ended successfully.
HKDF: reset=0 input=0 result=0. HKDF ended as expected.
Adding encrypted resource to final.exe...
Added encrypted resources.
Packing completed successfully! Output file: final.exe.
```
```
./final.exe
```

## 检测和分析说明
生成的打包二进制文件:
- 在静态分析期间混淆原始代码和字符串
- 将可见性转移至运行时行为
- 依赖于进程注入(进程镂空),这是一种可检测的行为模式
潜在的检测方法包括:
- 对进程创建和内存修改进行行为监控
- 识别进程镂空模式
- 对解包存根进行基于启发式或规则的检测
此外,还有一种方法是在运行时手动转储已解包的样本。为了增加此操作的难度,我们实现了反分析技术。
本项目并非旨在提供生产级别的保护或*密码学保证*。
它是对打包器设计、逆向工程意识以及底层实现的技术演示。
*非常欢迎点 Star*
@Arrbat
标签:ChaCha20-Poly1305, DOM解析, Gophish, HKDF, MinGW, PE加壳, PE打包器, SHA-256, SSH蜜罐, 二进制分析, 云安全运维, 云资产清单, 代码保护, 动态分析对抗, 反调试, 可执行文件加密, 安全防御绕过, 客户端加密, 密码学, 恶意软件开发研究, 手动系统调用, 数据展示, 混淆工具, 端点可见性, 红队, 网络安全, 进程 hollowing, 进程注入, 逆向工程, 防分析, 隐私保护, 静态分析对抗