面向安全产品测试的静态混淆型 Shellcode Loader 设计与对抗分析

github 地址:https://github.com/LilDean17/ShellcodeLoader2025

一、项目背景

近年来,随着 C2 框架广泛应用于安全对抗模拟,各大安全厂商也不断提升其检测能力,那么安全厂商自研的安全软件,是否能有效防御此类威胁?对于此疑问的好奇,我开始对安全软件和 C2 框架进行了深入的研究,于是此项目诞生了。此项目旨在模拟严苛的静态环境来测试安全软件对于 C2 框架的检测力度。此项目对于研究安全问题的伙伴,对于安全厂商以及对于研发安全产品的企业提供了关于 C2 框架检测相关的数据支持。

1.1 什么是 C2 框架?

C2(Command &Control 命令与控制)框架,特指渗透人员用于建立、管理和维持对已控系统(被控端)的集中化、结构化的软件体系平台。它是高级持续性威胁和定向攻击的核心工具,实现了攻击行动的数据窃取和横向移动。其核心目标如下:

  • 持久化:长期地潜伏在目标网络而不被发现。

  • 数据窃取:将窃取的机密数据传输回渗透人员。

  • 任务执行:向被控端下发指令,用于执行恶意操作。

  • 隐蔽通信:在受害者系统与攻击者服务器之间建立难以检测的通信通道。

  • 集中化管理:提供渗透人与一个中心界面,用于批量控制大量被控端。

1.2 C2 框架的核心组件是什么?
  • C2 服务器:渗透人员的指挥中心,用于接收被控端连接、存储指令和任务、收集渗透数据、管理被控端状态。

  • 被控端代理程序:用于植入在被控端的软件程序,在目标系统上接收并执行 C2 服务器下发的指令,也是安全软件对抗的核心。

  • C2 操作界面:渗透人员使用的图形化或命令行界面。

C2 框架的核心架构图如下:

1.3 为什么要使用 loader?

shellcode 作为威胁存在的一种重要形式,其存储方式非常隐蔽,且可被攻击者快速地传播利用。loader 加载器是加载执行 shellcode 的一串代码,它通常直接或间接的运行 shellcode 程序。为了测试安全软件的功能性,观测其在木马隐蔽场景下的查杀率,所以选用 shellcode + loader 的方式测试安全软件的功能。

1.4 静态查杀与动态查杀的区别?

静态查杀通常是通过扫描文件的静态特征匹配病毒库来判断此文件是否属于木马家族或其他恶意文件,如果属于,安全软件则会发送告警。动态查杀通过监测可执行文件的行为,来匹配其是否属于恶意文件,如果其触发了安全厂商设定的敏感行为(如:修改注册表),则触发告警。

1.5 安全软件对 shellcode 的检测挑战

由于 shellcode 以二进制形式连续存储于内存之中,其可以被攻击者实施加密存储,因此静态识别并查杀情况下,shellcode 具有非常强的隐蔽性,安全软件需要多方面判断来识别 shellcode 所运行的进程是否具有危害。这极大的要求了安全软件在静态查杀和动态查杀方面的结合,通过一系列复杂的判断条件识别潜在的威胁。

二、软件设计

为了测试各大厂商的安全软件对于 shellcode 的识别能力,我自主开发了一套静态混淆型 shellcode 加载框架用于测试。本项目由两个子系统构成,分别承担 shellcode 构建、加壳和加载的任务。

2.1 shellcode builder(构建端)

使用 python 实现,主要职责:

  • 读取 shellcode 文件。

  • 初始化动态加密密钥/iv,并进行加密和编码。

  • 初始化动态的函数哈希。

  • 将以上所有配置信息注入到 shellcode loader(运行端)中。

  • 使用 ollvm 混淆编译 shellcode loader(运行端)。

包含模块:

  • encrypt.py:加密模块,用于生成动态 aes 密钥和 iv 并加密数据。

  • patch.py:配置注入模块,用于将如下信息注入到 shellcode loader:

    • 动态生成的 aes key 和 iv。

    • 动态生成的函数哈希。

    • 加密编码后的 shellcode。

  • compiler.py:编译模块,使用 ollvm 混淆编译 shellcode loader。

2.2 shellcode loader(运行端)

使用 c 实现,主要职责:

  • 通过对比函数哈希初始化 winapi 地址。

  • 初始化 syscall 函数。

  • 解密并还原加密的 shellcode 数据。

  • 选择加载方式进行加载(指针回调、纤程执行、winapi 回调)

包含模块:

  • peb.cpp:用于读取函数哈希初始化 winapi 函数地址。

  • syscall.cpp:用于初始化间接 syscall 函数。

  • decrypt.cpp:用户解密解码 shellcode。

  • cLoader.cpp:用于执行 shellcode。

2.3 架构图

三、静态混淆策略
3.1 函数哈希的随机化

特征提取检测是安全软件检测市面上木马病毒常用手段,安全厂商通过提取特征码并存储到病毒库中来匹配某一特定的恶意程序。通常情况下特征码是从一些静态数据或恒定的二进制代码端提取的,为了避免被提取特征码,我将一些静态数据如函数哈希和密钥/iv 做了随机化处理,确保每一次生成的 loader 的静态数据都是不唯一的。

3.2 shellcode 加密处理

shellcode 加密是最常见的混淆手段,在程序运行前,shellcode 同时是加密存储在二进制文件中。加密存储虽然有效,但是安全厂商也有针对的应对策略,基于熵值的检测。shellcode 加密会导致文件熵值增高,这会导致可执行文件在安全软件严重十分可以,为了避免熵值的膨胀,我们需要将加密后的数据转换成合法数据。

3.3 shellcode 编码处理

shellcode 编码将加密后的数据转换成合法数据,如:ipv4 地址、uuid、mac 地址等,此软件实现 ipv4 地址和 uuid 编码降低熵值。

3.4 ollvm 混淆

为了防止代码段特征的提取,我使用了 clang 编译器开发此软件,重点使用此编译器拓展的 ollvm 混淆功能。ollvm 混淆能有效提升编译后的代码复杂度和逆向难度,ollvm 有非常多的混淆机制:如控制流平坦化、指令替换、虚假控制流等。

3.5 动态混淆策略

由于此项目的目的是针对安全软件对静态混淆型 shellcode loader 的测试,而不是单一地去绕过某一安全软件的检测,所以只添加了最基础的动态混淆的代码以提升 shellcode loader 的存活率。动态混淆方面,此项目使用到了开源 syscall 工具 hell’s gate,结合本项目,其详细功能如下:

  • 动态解析 ssn 号:遍历 ntdll 导出表。(动态解析 ssn 号,能防止源码嵌入 ssn 号而提取静态特征。)

  • 直接 syscall:动态获取 nt 函数地址并进行 0x12 偏移来提取多个 syscall 地址。

四、项目拓展

为了进一步测试安全软件的功能,我对此项目进行了扩展。真实场景中 loader 不一定是 exe 可执行文件,它很有可能是 dll 文件。某些情况下,dll 文件可能通过进程劫持注入代码。这种情况下,shellcode 的执行可能会更加隐蔽,为了模拟这种效果,我为我的项目实现了生成 dll 的功能。

五、安全软件测试结果

本项目设计目标之一是验证相同的静态混淆策略对主流终端安全软件的触发行为差异,以评估各加载方式的有效性与隐蔽性。

5.1 测试环境
  • windows 10 22H2(x64)

  • 测试平台:VMware 17

  • 是否接入互联网:是

  • 测试样本(被控端代理程序):

    • cobaltstrike 4.8 beacon

    • havoc demon

  • 安全软件版本

    • Microsoft Defender(客户端版本: 4.18.1909.6)

    • 360 安全卫士(版本:13.0.0.2009)

    • 火绒安全(个人版:6.0.6.6,病毒库:2025.6.28)

    • 卡巴斯基(企业版:kes 11.6.0.394)

5.2 测试方式说明
阶段说明
静态查杀下载 loader 可执行文件并执行后是否触发报毒。
解密解码解密解码 shellcode 后是否触发报毒
执行阶段开始执行是否触发报毒
执行后执行后进行常规操作是否触发报毒(这里采用读取文件信息进行测试)
敏感操作执行后进行敏感操作是否触发报毒(这里采 用读取系统进程信息进行测试)
5.3 测试结果

cobaltstrike 4.8 beacon 测试结果

安全软件文件类型静态查杀解密解码执行阶段执行后敏感操作
Microsoft Defenderexe 可执行文件❌触发扫描,但未报毒❌内存明文存放 shellcode,未报毒✔️立刻报毒
Microsoft Defenderdll 劫持❌未报毒❌未报毒❌未报毒❌未报毒❌未报毒
360 安全卫士exe 可执行文件❌主动扫描,未报毒❌未报毒❌未报毒❌未报毒❌未报毒
360 安全卫士dll 劫持✔️立刻报毒,标记为检测到 dll 劫持
火绒安全个人版exe 可执行文件❌未报毒❌未报毒❌未报毒❌未报毒❌未报毒
火绒安全个人版dll 劫持❌未报毒❌未报毒❌未报毒❌未报毒❌未报毒
卡巴斯基企业版exe 可执行文件❌未报毒❌未报毒❌未报毒❌未报毒❌未报毒
卡巴斯基企业版dll 劫持❌未报毒❌未报毒❌未报毒❌未报毒❌未报毒

havoc demon 测试结果

安全软件文件类型静态查杀解密解码执行阶段执行后敏感操作
Microsoft Defenderexe 可执行文件❌触发扫描,但未报毒❌内存明文存放 shellcode,未报毒❌未报毒❌未报毒❌未报毒
Microsoft Defenderdll 劫持❌未报毒❌未报毒❌未报毒❌未报毒❌未报毒
360 安全卫士exe 可执行文件❌主动扫描,未报毒❌未报毒❌未报毒❌未报毒❌未报毒
360 安全卫士dll 劫持❌未报毒❌未报毒❌未报毒❌未报毒❌未报毒
火绒安全个人版exe 可执行文件❌未报毒❌未报毒❌未报毒❌未报毒❌未报毒
火绒安全个人版dll 劫持❌未报毒❌未报毒❌未报毒❌未报毒❌未报毒
卡巴斯基企业版exe 可执行文件❌未报毒❌未报毒❌未报毒❌未报毒❌未报毒
卡巴斯基企业版dll 劫持❌未报毒❌未报毒❌未报毒❌未报毒❌未报毒

⚠️注:以上测试仅用作数据参考,不代表安全产品的优劣。

六、测试结果分析
6.1 C2 框架测试结果对比
对比维度cobaltstrike 4.8 beaconhavoc demon
静态检测风险高(即使高强度加密编码,仍能被 360 启发式识别)极低(无法识别)
内存行为检测风险高(Defender 捕获 exe 内存特征可以识别)极低(无法识别)
感知强度高(安全厂商针对性研究)极低(全平台规避监测)
6.2 各大厂商安全软件测试结果对比
安全厂商查杀方式类别对 beacon 的响应对 demon 的响应查杀策略水平评估初步技术判断/推测机制
Microsoft Defender内存行为感知 + 部分特征扫描✔️ 执行阶段立刻报毒❌ 全程绕过⭐⭐⭐⭐(4/5)监控内存 + 内存扫描
360 安全卫士启发式判定✔️ dll 劫持加载瞬间拦截,exe 无响应❌ 全程绕过⭐⭐⭐(3/5)启发式判定系统评估
火绒安全软件以防护为主❌ 全程绕过❌ 全程绕过⭐⭐(2/5)未知
卡巴斯基企业版未知❌ 全程绕过❌ 全程绕过⭐⭐(2/5)未知
6.3 什么是启发式查杀?

启发(heuristic):(一种教学方法)让学生通过自己发现事物并从自己的经验中学习,而不是通过告诉他们事物来学习。

启发式查杀:给予安全软件一定的规则,让安全软件以此规则作为经验,去分析一个程序的合规性,而不是通过严格的逻辑推理来解决问题。常见的启发式查杀经验:

  • 文件熵值过高。

  • 导出表空但含大量代码段。

  • 导出表含大量函数,但代码段很小。

6.4 Microsoft Defender 测试结果分析

查杀 beacon 原因推测分析如下:

执行阶段立刻查杀,此时 shellcode 已被解密解码,明文存储在内存中。但是,Microsoft Defender 全程监控此进程内存,当检测到 shellcode 的内存由 RW -> RX 修改时,扫描该区域并匹配到 beacon 特征。

未检测到 dll 劫持原因推测分析如下:

完全忽视 dll 劫持场景,不对进程进行监控。

未检测到 demon 的原因:

未分析并提取 demon 特征。

6.5 360 安全卫士测试结果分析

瞬间查杀 beacon 的 dll 劫持原因推测分析如下:

启发式判定系统检测到可疑 dll(导出表可疑等),最主要的判定其为恶意 dll 的原因是分析加密编码后的 shellcode 的特征,如:

  • 即使 aes 加密 + uuid 编码,其 payload 长度与 beacon 做同样操作后长度类似。

  • aes 加密 + uuid 编码后长度过长,引起怀疑。

未检测到 exe 中的 shellcode 的原因如下:

启发式判定系统认为 exe 中存在过长的数据是合理行为。

dll 劫持未查杀 demon 的原因:

  • 缺乏 demon payload 的确切特征。

  • aes 加密 + uuid 编码后长度非常小。

6.6 火绒安全软件测试结果分析

未检测到 shellcode 的原因:

个人版以安全防护为主,考虑真实用户体验。

6.7 卡巴斯基企业版测试结果分析

卡巴斯基企业版即使开启云查杀等所有功能,但仍未检测到 shellcode 的原因:

  • 个人研发的 loader 具备强大的静态混淆能力,几乎达到 100% 的静态混淆。

  • 未对内存中的明文 shellcode 进行扫描。可能扫描机制是延迟或事件触发型。

  • 卡巴斯基可能没有 360 那种对 beacon payload 的泛化机制,它没有对 aes 加密 + uuid 编码的 shellcode 起疑心

本实验使用卡巴斯基企业版默认配置,联网环境并开启云查杀,但在本测试环境下确实未触发检测机制。

⚠️注:以上结论可能导致对卡巴斯基的查杀水平错误低估,请理性看待。

6.8 总结

针对严苛静态无特征化的 shellcode loader 有用的技术:

  • 内存监控 + 内存扫描

  • 启发式判定

七、使用方法
7.1 运行环境
  • Python:3.11.0

  • ninja:1.12.0.git

  • clang:20.1.5(ollvm)

  • vs 2022 C++ 桌面开发环境

  • python 库:pycryptodome=3.20.0

  • python 库:pyfiglet=1.0.2

注:以上是本人使用的运行环境,仅仅作为参考。

7.2 支持参数
  • --i:用于输入 shellcode.bin 文件。

    • shellcode 的 文件路径。

  • --exec:用于设置执行方式。

    • thread:创建线程执行 shellcode。

    • fiber:创建纤程执行 shellcode。

    • callback:Winapi 回调函数执行 shellcode。

  • --encode:

    • ipv4:用于将加密的 shellcode 编码成 ipv4 地址。

    • uuid:用于将加密的 shellcode 编码成 uuid 地址。

  • --file:

    • exe:用于指定生成 exe 文件。

    • dll:用于指定生成 dll 文件。

  • --export(仅在生成 dll 文件情况下生效):

    • 文件路径:用于指定 dll 文件的导出函数。

 

其中 --export 导出函数文件存储如下示例内容:

7.3 构建过程

使用如上默认配置进行构建,python 将执行如下操作进行构建:

配置注入:

  • 获取 loader 的项目路径(c 语言) 。

  • 获取 shellcode.bin 文件路径,读取、加密、编码并 patch 到源文件。

  • 初始化 aes 密钥和 iv,并 patch 到源文件。

  • 初始化 Winapi 函数哈希,并 patch 到源文件。

编译 loader:

  • 构建并编译 loader。

 

构建完成后,在 build 目录下会生成 loader。

八 、项目价值与边界
8.1 应用场景价值

本项目设计初衷为在合法授权的环境中,用作以下内容的研究与评估:

  • 安全软件测试评估:测试安全软件在严苛的静态对抗环境下的检测能力。

  • 安全软件行为研究:测试安全软件用于检测威胁的技术方式。

  • 教学与演示:适合作为教学样例,展示设计架构和静态混淆技术。

  • 提供数据:向研究人员提供数据参考。

8.2 合规边界声明

本项目不包含任何恶意 payload 或远控功能,仅提供 loader 框架和加密封装机制,所有测试 payload 必须由用户在合法授权环境下自行提供,且尽在授权环境中使用。

8.3 作者声明
  • 本人不对任何非法使用本项目代码所产生的后果负责。

  • 严禁在未授权的目标环境中部署与测试。

  • 若您是安全厂商/研究人员,欢迎就技术实现展开探讨。

九、声明与许可
9.1 项目免责声明

本项目仅供安全研究、教育教学和防御评估。不得将其用于任何非法用途,包括但不仅限于未授权渗透、后门植入等。所有示例均在授权环境下进行测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87032.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度强化学习DRL——策略学习

一、策略网络 策略函数 π \pi π的输入是状态 s s s和动作 a a a,输出是一个介于0和1之间的概率值,用神经网络 π ( a ∣ s ; θ ) \pi(a \mid s; \boldsymbol{\theta}) π(a∣s;θ)近似策略函数 π ( a ∣ s ) \pi(a\mid s) π(a∣s), θ …

ISP Pipeline(5): Auto White Balance Gain Control (AWB) 自动白平衡

G_gain 1.0 # 常作为参考通道 R_gain G_avg / R_avg B_gain G_avg / B_avgAuto White Balance Gain Control(AWB)自动调整图像中红色、绿色、蓝色通道的增益,使图像中灰白区域的颜色看起来为“中性白”或“灰白”,从而矫正因光…

Python中钩子函数的实现方式

在Python中,钩子函数(Hook)是一种允许你在程序执行的特定点插入自定义代码的技术。它本质上是一种回调机制,当特定事件发生时自动调用预先注册的函数。 Python中钩子函数的实现方式 Python中实现钩子主要有以下几种方式: ​回调函数​&…

【RTSP从零实践】3、实现最简单的传输H264的RTSP服务器

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

零开始git使用教程-传html文件

1. 准备工作 (1) 确保你已经安装: Visual Studio (VS)(任何版本,社区版也行) Git(去官网 git-scm.com 下载安装) (2) 注册 Gitee/GitHub 账号 国内推荐 Gitee(码云):…

CPT204-Advanced OO Programming: Lists, Stacks, Queues, and Priority Queues

目录 1.Java 集合框架层次结构Java Collection Framework hierarchy 1.1Java 集合框架描述: 1.2数据结构Data structures 1.3 Java 集合框架支持两种类型的容器(数据结构): 1.4 Java 集合框架的设计 2.Collection 2.1 Coll…

【网络安全】Mysql注入中锁机制

前言 在sql注入的延时注入中,常见的函数有sleep()直接延时、BENCHMARK()通过让数据库进行大量的计算而达到延时的效果、笛卡尔积、正则匹配等,但还有一个常常被忽略的函数,也就是Mysql中的锁机制。虽然早些年就已经出现过相关的技术文章&…

博途多重背景、参数实例

1:我们在博途中先新建一个工程,并且建立一个FB块名字为motor_fb,同样建立一个FC块名字为MOTOR_FC,里面写上我们电机程序里常用的逻辑控制。二者程序内容相同。下面是motor_fb块的程序截图: 2:我们再新建一个FB块,名字为…

运维的利器–监控–zabbix–第三步:配置zabbix–中间件–Tomcat–步骤+验证

🏠个人主页:fo安方的博客✨ 💂个人简历:大家好,我是fo安方,目前中南大学MBA在读,也考取过HCIE Cloud Computing、CCIE Security、PMP、CISP、RHCE、CCNP RS、PEST 3等证书。🐳 &…

大模型在重症哮喘手术全流程风险预测与治疗方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目标与方法 1.3 研究创新点 二、重症哮喘概述 2.1 定义与发病机制 2.2 分类与临床表现 2.3 诊断标准与方法 三、大模型技术原理与应用现状 3.1 大模型的基本原理 3.2 在医疗领域的应用案例分析 3.3 适用于重症哮喘预测的…

Webpack的插件机制Tapable

Tapable 是一个轻量级的库,用于创建和管理插件钩子(hooks),它在 Webpack 中广泛应用,用于实现插件系统。Tapable 提供了一种机制,允许插件在特定的生命周期阶段插入自定义逻辑,从而扩展应用程序…

FRONT归因-两阶段训练流程

FRONT, Fine-Grained Grounded Citations归因 FRONT归因,首先从检索到的源文档中选择支持性引用,然后基于这些引用指导生成过程,确保生成回答有据可依,引用准确无误。 FRONT的特色在于两阶段归因训练,要点如下: 阶…

单端转差分放大器AD8138

根据 AD8138 的数据手册特性及参数,可以实现单端 5Vpp(偏置 0V)正弦波转差分 5Vpp(共模 2.5V)的功能,但需注意以下细节: 1. 信号幅度匹配性 输入信号:单端 5Vpp(峰峰值…

用R包mice进行多重插补

利用R包mice实现的链式方程多重插补方法来插补缺失的数据。 所有多重插补方法都遵循三个步骤 插补——与单次插补类似,对缺失值进行插补。但是,插补值会从分布中提取m次,而不是仅提取一次。此步骤结束时,应该有m 个完整的数据集…

【专题】网络攻防技术期末复习资料

网络攻防技术期末复习资料 链接:https://blog.csdn.net/Pqf18064375973/article/details/148996272?sharetypeblogdetail&sharerId148996272&sharereferPC&sharesourcePqf18064375973&sharefrommp_from_link 网络安全威胁的成因。 分类&#xff1a…

地震灾害的模拟

为确保地震灾害模拟的准确性和高效性,涉及的系统需要处理复杂的物理模型、数据输入和多层次的模拟过程。在技术设计方案中,我们将涵盖以下几个方面: 背景:描述该模拟系统的目的与应用场景。需求:列出系统的功能需求&a…

9.9 《1/10成本实现GPT-3.5级表现!ChatGLM3-6B QLoRA微调实战:4bit量化+低秩适配全解析》

1/10成本实现GPT-3.5级表现!ChatGLM3-6B QLoRA微调实战:4bit量化+低秩适配全解析 ChatGLM3-6B 微调入门实战:QLoRA 量化低秩适配技术 ▲ ChatGLM3-6B采用GLM架构改进版,支持32K上下文长度和代码生成能力 一、QLoRA 技术原理精要 QLoRA(Quantized Low-Rank Adaptation)…

【Python基础】11 Python深度学习生态系统全景解析:从基础框架到专业应用的技术深度剖析(超长版,附多个代码及结果)

引言:Python在深度学习领域的统治地位 在人工智能浪潮席卷全球的今天,Python已经成为深度学习领域当之无愧的王者语言。这不仅仅是因为Python语法简洁易学,更重要的是围绕Python构建的深度学习生态系统的完整性和强大性。从Google的TensorFlow到Facebook的PyTorch,从科学计…

RESTful API 设计原则深度解析

在 Web 服务架构中,RESTful API作为一种轻量级、可扩展的接口设计风格,通过 HTTP 协议实现资源的标准化访问。本文从核心原则、URL 设计、HTTP 方法应用、状态管理及面试高频问题五个维度,结合工程实践与反例分析,系统解析 RESTfu…

java web2(黑马)

数据库设计 简介 1.软件的研发步骤 2.数据库设计概念 > 数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优 的数据存储模型 > 建立数据库中的表结构以及表与表之间的关联关系的过程, > …