免杀Packer框架开发
字数 1840 2025-08-29 08:30:30

免杀Packer框架开发教学文档

1. 框架概述

本免杀Packer框架是一个用于Shellcode免杀的工具,通过模块化设计实现了多种免杀技术组合。框架采用C++和Python混合开发,其中核心功能使用C++实现,GUI和部分Shellcode处理使用Python(PyQt)实现。

2. 框架架构

2.1 核心模块划分

  1. Shellcode处理模块:负责Shellcode的加载和处理
  2. 内存分配模块:负责分配具有特定属性的内存
  3. 执行方式模块:提供多种执行Shellcode的方法
  4. 杂项模块:包含反调试、反虚拟化等辅助功能
  5. 配置与控制模块:管理全局变量和配置项
  6. 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加载方式

  1. 直接嵌入:将Shellcode硬编码在.data段
  2. 分离加载:使用LSB隐写技术将Shellcode隐藏在图片中
  3. 远程拉取:(待实现)从远程服务器获取Shellcode

3.2 加密方法

  1. XOR加密:简单的异或加密
  2. RC4加密:流加密算法
  3. AES加密:高级加密标准

3.3 SGN处理

使用Python实现Shellcode的SGN(Shikata Ga Nai)编码处理,增加免杀效果。

4. 内存分配模块

提供三种内存分配策略:

  1. Private属性内存:使用NtAllocateVirtualMemory分配

    • 代码结构:NtAllocateVirtualMemoryStruct
    • 特点:分配具有RW(读写)权限的私有内存
  2. Mapped属性内存:使用NtMapViewOfSection分配

    • 代码结构:NtMapViewOfSection
    • 特点:创建内存映射区域
  3. 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类

关键动态调用封装类,支持两种调用方式:

  1. Syscall调用:直接系统调用

    • 基于开源项目PigSyscall
    • 需要获取SSN(System Service Number)
  2. 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 反沙箱技术

  1. 编译时加密关键字符串
  2. 环境检测(虚拟机、沙箱)
  3. 行为混淆

6.3 反调试技术

  1. 检测调试器存在
  2. 时间差检测
  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实现的图形界面,主要功能:

  1. Shellcode加载与处理
  2. 执行方式选择
  3. 加密方式配置
  4. 内存分配策略选择
  5. 反检测功能开关

9. 开发注意事项

  1. 内存管理:确保正确释放分配的内存
  2. 错误处理:所有系统调用都需要检查返回值
  3. 兼容性:考虑不同Windows版本的差异
  4. 免杀维护:定期更新加密和混淆方法
  5. 模块化:保持各模块独立性便于扩展

10. 测试效果

使用计算器(calc)的Shellcode测试,静态检测绕过效果良好。动态行为需结合反沙箱技术进一步增强。

11. 扩展建议

  1. 增加更多Shellcode加载方式(如DNS隧道)
  2. 实现更多加密算法(如TEA、Blowfish)
  3. 添加进程注入技术(如Process Hollowing)
  4. 集成更多反检测技术
  5. 优化Python与C++的交互效率

12. 参考资源

  1. PigSyscall项目: https://github.com/evilashz/PigSyscall
  2. UACME项目: https://github.com/hfiref0x/UACME
  3. Shellcode编码技术: SGN(Shikata Ga Nai)
  4. Windows系统调用文档
免杀Packer框架开发教学文档 1. 框架概述 本免杀Packer框架是一个用于Shellcode免杀的工具,通过模块化设计实现了多种免杀技术组合。框架采用C++和Python混合开发,其中核心功能使用C++实现,GUI和部分Shellcode处理使用Python(PyQt)实现。 2. 框架架构 2.1 核心模块划分 Shellcode处理模块 :负责Shellcode的加载和处理 内存分配模块 :负责分配具有特定属性的内存 执行方式模块 :提供多种执行Shellcode的方法 杂项模块 :包含反调试、反虚拟化等辅助功能 配置与控制模块 :管理全局变量和配置项 GUI模块 :提供用户界面(Python实现) 2.2 关键数据结构 在 struct.h 中定义的核心结构: 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 函数统一调度: 5.2 DynamicInvoker类 关键动态调用封装类,支持两种调用方式: Syscall调用 :直接系统调用 基于开源项目 PigSyscall 需要获取SSN(System Service Number) NT函数动态调用 :通过动态获取NTDLL函数地址调用 示例(NtProtectVirtualMemory调用): 注意 :Syscall实现需要防止多次解密导致的执行失败。 6. 杂项模块 6.1 Defender专项对抗 基于 UACME 项目的 windefend.c 实现,将所有Windows API替换为动态调用。 6.2 反沙箱技术 编译时加密关键字符串 环境检测(虚拟机、沙箱) 行为混淆 6.3 反调试技术 检测调试器存在 时间差检测 异常处理检测 7. 配置与控制模块 7.1 config.h 全局配置文件,主要配置项: 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系统调用文档