免杀Packer框架开发
字数 1840 2025-08-29 08:30:30
免杀Packer框架开发教学文档
1. 框架概述
本免杀Packer框架是一个用于Shellcode免杀的工具,通过模块化设计实现了多种免杀技术组合。框架采用C++和Python混合开发,其中核心功能使用C++实现,GUI和部分Shellcode处理使用Python(PyQt)实现。
2. 框架架构
2.1 核心模块划分
- Shellcode处理模块:负责Shellcode的加载和处理
- 内存分配模块:负责分配具有特定属性的内存
- 执行方式模块:提供多种执行Shellcode的方法
- 杂项模块:包含反调试、反虚拟化等辅助功能
- 配置与控制模块:管理全局变量和配置项
- GUI模块:提供用户界面(Python实现)
2.2 关键数据结构
在struct.h中定义的核心结构:
// Shellcode信息结构
typedef struct _SHELLCODE_INFO {
LPVOID address; // Shellcode地址
SIZE_T length; // Shellcode长度
} SHELLCODE_INFO, *PSHELLCODE_INFO;
// 执行方式枚举
typedef enum _EXECUTION_METHOD {
METHOD_CREATETHREAD,
METHOD_QUEUEUSERAPC,
METHOD_FAKEEXCEPTION,
// 可扩展其他方法...
} EXECUTION_METHOD;
3. Shellcode处理模块
3.1 Shellcode加载方式
- 直接嵌入:将Shellcode硬编码在.data段
- 分离加载:使用LSB隐写技术将Shellcode隐藏在图片中
- 远程拉取:(待实现)从远程服务器获取Shellcode
3.2 加密方法
- XOR加密:简单的异或加密
- RC4加密:流加密算法
- AES加密:高级加密标准
3.3 SGN处理
使用Python实现Shellcode的SGN(Shikata Ga Nai)编码处理,增加免杀效果。
4. 内存分配模块
提供三种内存分配策略:
-
Private属性内存:使用
NtAllocateVirtualMemory分配- 代码结构:
NtAllocateVirtualMemoryStruct - 特点:分配具有RW(读写)权限的私有内存
- 代码结构:
-
Mapped属性内存:使用
NtMapViewOfSection分配- 代码结构:
NtMapViewOfSection - 特点:创建内存映射区域
- 代码结构:
-
Image属性内存:使用Module Stomping技术
- 代码结构:
ModuleStomping - 特点:适合小型Shellcode,利用现有模块内存空间
- 代码结构:
5. 执行方式模块
5.1 执行流程
通过ExecuteShellcode函数统一调度:
BOOL ExecuteShellcode(PSHELLCODE_INFO pShellcodeInfo, EXECUTION_METHOD method) {
switch (method) {
case METHOD_CREATETHREAD:
return CreateThreadExecution(pShellcodeInfo);
case METHOD_QUEUEUSERAPC:
return QueueUserAPCExecution(pShellcodeInfo);
case METHOD_FAKEEXCEPTION:
return FakeExceptionExecution(pShellcodeInfo);
// 可扩展其他执行方法...
default:
return FALSE;
}
}
5.2 DynamicInvoker类
关键动态调用封装类,支持两种调用方式:
-
Syscall调用:直接系统调用
- 基于开源项目PigSyscall
- 需要获取SSN(System Service Number)
-
NT函数动态调用:通过动态获取NTDLL函数地址调用
示例(NtProtectVirtualMemory调用):
NTSTATUS status = DynamicInvoker::Invoke<NTSTATUS>(
NtProtectVirtualMemoryAddress,
NtProtectVirtualMemoryHash,
processHandle,
&baseAddress,
&size,
newProtect,
&oldProtect
);
注意:Syscall实现需要防止多次解密导致的执行失败。
6. 杂项模块
6.1 Defender专项对抗
基于UACME项目的windefend.c实现,将所有Windows API替换为动态调用。
6.2 反沙箱技术
- 编译时加密关键字符串
- 环境检测(虚拟机、沙箱)
- 行为混淆
6.3 反调试技术
- 检测调试器存在
- 时间差检测
- 异常处理检测
7. 配置与控制模块
7.1 config.h
全局配置文件,主要配置项:
// 执行方式配置
EXECUTION_METHOD g_executionMethod = METHOD_CREATETHREAD;
// Syscall配置
BOOL g_isSyscall = TRUE;
// 加密配置
ENCRYPTION_METHOD g_encryptionMethod = ENCRYPTION_XOR;
// 内存分配配置
MEMORY_ALLOCATION_METHOD g_memoryMethod = MEMORY_PRIVATE;
7.2 Python模板替换
Python脚本通过模板替换方式生成最终配置,提高灵活性。
8. GUI模块
使用PyQt实现的图形界面,主要功能:
- Shellcode加载与处理
- 执行方式选择
- 加密方式配置
- 内存分配策略选择
- 反检测功能开关
9. 开发注意事项
- 内存管理:确保正确释放分配的内存
- 错误处理:所有系统调用都需要检查返回值
- 兼容性:考虑不同Windows版本的差异
- 免杀维护:定期更新加密和混淆方法
- 模块化:保持各模块独立性便于扩展
10. 测试效果
使用计算器(calc)的Shellcode测试,静态检测绕过效果良好。动态行为需结合反沙箱技术进一步增强。
11. 扩展建议
- 增加更多Shellcode加载方式(如DNS隧道)
- 实现更多加密算法(如TEA、Blowfish)
- 添加进程注入技术(如Process Hollowing)
- 集成更多反检测技术
- 优化Python与C++的交互效率
12. 参考资源
- PigSyscall项目: https://github.com/evilashz/PigSyscall
- UACME项目: https://github.com/hfiref0x/UACME
- Shellcode编码技术: SGN(Shikata Ga Nai)
- Windows系统调用文档