免杀基础
字数 1281 2025-09-01 11:26:17

免杀基础:Shellcode加密与动态API调用技术

一、Shellcode加密技术

1. Shellcode导出与基础加密

  1. 导出bin文件

    • 首先需要将Shellcode导出为二进制文件格式,这是后续加密处理的基础
  2. 使用010 Editor进行异或加密

    • 使用010 Editor等二进制编辑工具对Shellcode进行异或加密
    • 异或加密是一种简单但有效的加密方式,可以改变Shellcode的特征
    • 需要记录使用的异或密钥,用于后续解密执行
  3. 转换为IPv6格式

    • 使用Python脚本将加密后的二进制文件转换为IPv6格式
    • 命令示例:python3 ipv6.py payload.bin
    • 这种转换可以进一步混淆Shellcode,使其看起来像网络数据

2. 文件分离技术

  • 将Shellcode与加载器分离可以增强免杀效果
  • 可以采用外部文件、网络资源或注册表等方式存储加密的Shellcode

二、Shellcode加载技术

1. 基础加载方法

  • 堆调用方法:在内存中创建堆空间来加载和执行Shellcode
  • 替代方案
    • DLL镂空技术
    • 进程镂空技术
    • 这些技术可以更好地隐藏Shellcode的执行行为

2. 动态API调用框架

传统方式的问题

// 容易被杀软检测的传统方式
GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
  • 直接使用GetProcAddress等函数容易被杀毒软件标记

PEB获取API地址技术

  1. 获取kernel32.dll基地址

    • 通过PEB结构从InInitializationOrderModuleList中找出kernel32.dll的加载基址
    • 这是最简单的PEB获取方式
  2. 扩展方法

    • 通过PEB遍历InMemoryOrderModuleList
    • 使用hash比较方式获取模块基地址
    • 注意32位和64位系统的进入方式不同
  3. 完整流程

    • 获取kernel32.dll地址
    • 解析PE头结构
    • 获取GetProcAddress和LoadLibraryA的地址

实现细节

  • 使用局部变量存储关键数据
  • 自定义函数名称,避免使用标准API名称
  • 通过hash比较而非字符串比较来查找函数

三、免杀框架搭建

  1. 基础框架

    • 完成上述动态API获取后,就搭建好了免杀的基础框架
    • 后续可以随意调用Windows API,且能自定义调用方式
  2. 增强技术

    • 使用白名单技术绕过检测
    • 局部变量使用:避免全局变量暴露关键数据
    • API调用混淆:通过中间层调用API
  3. 效果评估

    • 该方法能有效规避基于特征码的检测
    • 动态获取API使静态分析难以识别全部行为
    • 加密和混淆技术增加了分析难度

四、技术要点总结

  1. Shellcode处理

    • 导出 → 加密 → 格式转换 → 分离存储
  2. 加载技术

    • 选择隐蔽的加载方式(堆/DLL镂空/进程镂空)
  3. API调用

    • 避免直接调用敏感API
    • 通过PEB结构动态获取API地址
    • 使用hash比较替代字符串比较
  4. 增强措施

    • 白名单利用
    • 局部变量优先
    • 调用链混淆

通过以上技术的组合应用,可以构建一个基础的免杀框架,有效规避常见杀毒软件的检测。实际应用中还需要根据目标环境进行适当调整和增强。

免杀基础:Shellcode加密与动态API调用技术 一、Shellcode加密技术 1. Shellcode导出与基础加密 导出bin文件 : 首先需要将Shellcode导出为二进制文件格式,这是后续加密处理的基础 使用010 Editor进行异或加密 : 使用010 Editor等二进制编辑工具对Shellcode进行异或加密 异或加密是一种简单但有效的加密方式,可以改变Shellcode的特征 需要记录使用的异或密钥,用于后续解密执行 转换为IPv6格式 : 使用Python脚本将加密后的二进制文件转换为IPv6格式 命令示例: python3 ipv6.py payload.bin 这种转换可以进一步混淆Shellcode,使其看起来像网络数据 2. 文件分离技术 将Shellcode与加载器分离可以增强免杀效果 可以采用外部文件、网络资源或注册表等方式存储加密的Shellcode 二、Shellcode加载技术 1. 基础加载方法 堆调用方法 :在内存中创建堆空间来加载和执行Shellcode 替代方案 : DLL镂空技术 进程镂空技术 这些技术可以更好地隐藏Shellcode的执行行为 2. 动态API调用框架 传统方式的问题 直接使用 GetProcAddress 等函数容易被杀毒软件标记 PEB获取API地址技术 获取kernel32.dll基地址 : 通过PEB结构从 InInitializationOrderModuleList 中找出kernel32.dll的加载基址 这是最简单的PEB获取方式 扩展方法 : 通过PEB遍历 InMemoryOrderModuleList 使用hash比较方式获取模块基地址 注意32位和64位系统的进入方式不同 完整流程 : 获取kernel32.dll地址 解析PE头结构 获取GetProcAddress和LoadLibraryA的地址 实现细节 使用局部变量存储关键数据 自定义函数名称,避免使用标准API名称 通过hash比较而非字符串比较来查找函数 三、免杀框架搭建 基础框架 : 完成上述动态API获取后,就搭建好了免杀的基础框架 后续可以随意调用Windows API,且能自定义调用方式 增强技术 : 使用白名单技术绕过检测 局部变量使用:避免全局变量暴露关键数据 API调用混淆:通过中间层调用API 效果评估 : 该方法能有效规避基于特征码的检测 动态获取API使静态分析难以识别全部行为 加密和混淆技术增加了分析难度 四、技术要点总结 Shellcode处理 : 导出 → 加密 → 格式转换 → 分离存储 加载技术 : 选择隐蔽的加载方式(堆/DLL镂空/进程镂空) API调用 : 避免直接调用敏感API 通过PEB结构动态获取API地址 使用hash比较替代字符串比较 增强措施 : 白名单利用 局部变量优先 调用链混淆 通过以上技术的组合应用,可以构建一个基础的免杀框架,有效规避常见杀毒软件的检测。实际应用中还需要根据目标环境进行适当调整和增强。