AdaptixC2武器化二开
字数 4448 2025-10-01 14:05:44

AdaptixC2 武器化二次开发实战教程

概述

本文档详细解析了对开源C2框架 AdaptixC2 进行两项关键技术改造的过程:1. 客户端界面国际化(汉化)2. Beacon Loader 的实战化武器改造以提升抗AV/EDR能力。教程基于对源代码的修改,旨在提供深入、可操作的技术指南。

第一部分:基于 Qt LinguistTools 的客户端汉化

一、 目标与准备工作

  • 目标:为 AdaptixC2 客户端 (AdaptixClient) 增加多语言支持(以中文为例),实现界面文本的本地化显示。
  • 环境与前提
    • IDE: Qt Creator 17.0.1 (Community)
    • 源码: 自备 AdaptixC2 Server 与 Agent (Client) 的源代码
    • Qt 组件: 确保已安装 LinguistTools 组件。

二、 项目实施步骤

1. 修改项目配置文件 (CMakeLists.txt)

  • find_package 部分添加 LinguistTools 组件依赖。
    find_package(Qt6 REQUIRED COMPONENTS
        Core
        Gui
        Widgets
        Network
        WebSockets
        Sql
        Qml
        LinguistTools  # 新增:翻译工具支持
    )
    
  • 在文件末尾添加翻译文件设置,并将其编译进Qt资源系统中。
    # 国际化多语言支持
    set(TS_FILES translations/adaptix_zh_CN.ts)
    # 使用Qt6的标准翻译功能 将qm编译进资源中
    qt6_add_translations(AdaptixClient
        TS_FILES ${TS_FILES}
        RESOURCE_PREFIX "/translations"
    )
    

2. 修改主程序入口 (main.cpp)

  • 添加必要的头文件。
    #include <QTranslator>
    #include <QLocale>
    
  • QApplication 对象创建后、主窗口显示前,安装翻译器。此代码会根据系统语言环境自动加载对应的 .qm 文件。
    int main(int argc, char *argv[]) {
        QApplication a(argc, argv);
    
        // --- 添加国际化支持 ---
        static QTranslator translator; // 保证 translator 不会在 main() 结束后被销毁
        // 获取当前系统的语言环境,例如 "zh_CN"
        QString locale = QLocale::system().name();
        // 资源路径
        QString translationFile = QString(":/translations/adaptix_%1.qm").arg(locale);
        if (translator.load(translationFile)) {
            a.installTranslator(&translator);
        }
        // --- 结束 ---
    
        MainAdaptix w;
        w.show();
        return a.exec();
    }
    

3. 处理源代码中的字符串

  • 核心规则:将所有需要翻译的固定界面文本tr() 函数包裹。
  • 示例 (DialogConnect.cpp):
    // 原代码
    this->setWindowTitle("Connect");
    label_User->setText("User:");
    
    // 修改后
    this->setWindowTitle(tr("Connect"));
    label_User->setText(tr("User:"));
    
  • 关键问题修复:某些自定义 Widget 类因缺少 Q_OBJECT 宏而无法使用 tr()
    • 解决方案:在类声明中添加 Q_OBJECT 宏。
    • 修改文件AxConsoleWidget.h, ConsoleWidget.h 等。
    class MyWidget : public QWidget {
        Q_OBJECT // 必须添加此行
        // ... 其他成员 ...
    };
    

4. 生成与处理翻译文件 (.ts)

  1. 生成 TS 文件:在项目根目录打开终端,使用 lupdate 工具扫描源代码并生成或更新 .ts 文件。

    lupdate -no-obsolete -locations relative Source/ Headers/ -ts translations/adaptix_zh_CN.ts
    
    • 成功后提示找到若干可翻译字符串。
  2. 翻译字符串

    • 使用 Qt Linguist 工具打开 adaptix_zh_CN.ts 文件。
    • 在界面中逐条填写源文本(英文)对应的翻译(中文)。
    • 校对后保存。
  3. 发布翻译:在 Qt Linguist 中点击“发布”按钮,或使用 lrelease 命令将 .ts 文件编译为二进制的 .qm 文件。

    lrelease translations/adaptix_zh_CN.ts
    
    • 生成的 adaptix_zh_CN.qm 文件会根据 CMakeLists.txt 的配置自动嵌入到程序资源中。

5. 编译与测试

  • 在 Qt Creator 中重新构建整个项目 (Build -> Build All)。
  • 运行编译后的程序,客户端界面应已根据系统语言显示为中文。

6. 注意事项与局限性

  • 扩展命令:由服务端 ax_config.axs 文件或第三方扩展定义的命令/功能名称,其文本通常未在客户端代码中,因此无法通过此方法汉化。文中采用了对 ax_config.axs 进行硬编码修改的取巧方法。
  • 动态切换:本教程实现的是启动时根据系统语言确定界面语言。如需在运行时动态切换,需实现 changeEvent 事件监听和 retranslateUi 函数,更为复杂。

第二部分:Beacon Loader 的实战化武器改造

一、 目标与思路

  • 目标:增强原版 AdaptixC2 Beacon 的免杀能力,使其能绕过主流杀毒软件 (AV) 和终端检测响应 (EDR) 的检测,满足实战需求。
  • 核心思路:分离执行流程,采用多阶段加载隐蔽持久化技术。
    1. Loader(加载器):一个高度免杀的初始程序,负责解密、加载并执行核心DLL。
    2. DLL(核心模块):包含实际的Shellcode加载和执行逻辑。
    3. Shellcode:从AdaptixC2生成的加密的 agent.x64.bin

二、 技术实现细节

1. Shellcode 预处理

  • 原始 agent.x64.bin 文件极易被检测。需先进行加密/编码。
  • 方法:使用简单的 XOR 异或加密,并可转换为 Base64 编码字符串方便存储。
  • 操作:编写一个Python脚本(或其他语言)对 agent.x64.bin 进行加密,然后将加密后的 payload 部署到远程服务器(如云存储、GitHub Gist等)或嵌入到Loader中。

2. Loader(加载器)设计 - C# (.NET)

Loader 承担核心的免杀和持久化职责。

  • 功能 1: 内存加载 .NET DLL

    • 技术:使用 Assembly.Load() 直接从内存字节数组加载DLL,避免DLL文件落地。
    • 流程:Loader 自身包含加密的DLL数据 -> 在内存中解密 -> 调用 Assembly.Load(decryptedBytes) -> 通过反射调用DLL的入口方法。
  • 功能 2: 反分析技术

    • 反虚拟机 (Anti-VM):检查常见虚拟机特征(如特定进程、硬件信息、注册表项)。
    • 反调试 (Anti-Debug):检查调试器是否存在(如 IsDebuggerPresent, 检查运行时间)。
    • 反沙箱 (Anti-Sandbox):检查系统运行时间、内存大小、CPU核心数等,排除短时运行的沙箱环境。
  • 功能 3: 持久化驻留机制 - WMI 事件订阅

    • 优势:高级、隐蔽、系统级权限,难以发现和清除。
    • 核心组件
      1. __EventFilter: 定义触发条件。例如:SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name='explorer.exe' 或更常见的 系统启动后一段时间触发SELECT * FROM __InstanceModificationEvent WHERE TargetInstance ISA 'Win32_LocalTime' AND TargetInstance.Second = 0 AND TargetInstance.Minute = 0 AND TargetInstance.Hour = 0 (每天午夜) 或使用 系统运行时间SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_OperatingSystem' AND TargetInstance.SystemUpTime >= 300 AND TargetInstance.SystemUpTime < 360 (系统启动后5-6分钟)。
      2. ActiveScriptEventConsumer: 执行动作。使用VBScript/JScript执行命令,无需落地exe文件。命令为:forfiles /p %APPDATA% /m <Loader_Name> /c "<Loader_Full_Path>"
        • 利用 forfiles.exe:这是一个合法的、有微软签名的系统程序。用它来启动Loader,可以破坏进程父子关系,使检测引擎难以关联恶意行为与持久化源,提升迷惑性。
      3. __FilterToConsumerBinding: 将上述过滤器和消费者绑定起来。
    • 流程:Loader 首次运行时,以高权限创建上述三个WMI实例,实现持久化。随后可将自身复制到 %APPDATA% 等隐蔽目录,并删除原始文件。

3. DLL(核心模块)设计 - C/C++

DLL 负责最终执行Shellcode。

  • 功能 1: 加载远程Shellcode

    • 从预设的URL下载加密的(Base64+XOR)Shellcode。
    • 在内存中进行解密,得到原始的 agent.x64.bin 数据。
  • 功能 2: 进程注入

    • 技术共享内存区注入 (Section Injection)进程镂空 (Process Hollowing)
    • 目标进程:寄生到 explorer.exe 等合法、常见的系统进程中,以掩盖恶意行为。
    • 流程
      1. 创建目标进程(或打开现有进程),并将其挂起。
      2. 在目标进程内存中分配空间,写入解密后的Shellcode。
      3. 通过设置进程上下文、调用 CreateRemoteThreadQueueUserAPC 等方式,在目标进程中执行Shellcode。

三、 武器化流程与检测规避

  1. 生成Payload:在AdaptixC2中创建HTTPS监听器,生成 Shellcode 类型的Payload (agent.x64.bin)。
  2. 加密Payload:使用提供的Python脚本加密 agent.x64.bin,并上传到远程服务器。
  3. 编译Loader&DLL:分别编译Loader(C#)和DLL(C++)项目。将加密后的DLL数据以字节数组形式嵌入到Loader代码中。
  4. 分发:将最终的Loader可执行文件进行伪装(如:伪装成PDF文档的图标,实际为exe;或与诱饵文档捆绑)。
  5. 执行链
    • 受害者运行Loader。
    • Loader 进行反分析检查,通过后则在内存加载DLL。
    • DLL 从远程服务器下载加密Shellcode,解密后注入到 explorer.exe 进程。
    • Beacon 在 explorer.exe 中上线。
    • Loader 设置WMI持久化后自我删除并隐藏副本。

四、 注意事项

  • 时效性:所有免杀技术都有时效性,需根据目标环境持续研究和迭代。
  • Go环境问题:编译原版AdaptixC2时,若遇到生成Go Agent失败,通常是网络问题(无法下载Go依赖)或Go环境配置错误。需为服务器配置可靠的网络代理或国内镜像源,并检查Go环境完整性。
  • 责任性:本文档仅用于安全技术研究和学习,请勿用于非法用途。

总结

本教程详细介绍了对AdaptixC2进行二次开发的两个核心方向:

  1. 国际化:通过修改源码、使用Qt国际化框架,实现了客户端的本地化,提升了操作体验。
  2. 武器化:通过多阶段加载、内存操作、反分析技术和隐蔽的WMI持久化等高级技术,显著提升了Beacon的隐蔽性和生存能力,使其更适用于对抗性环境。

这些改造充分体现了APT攻击中“代码开发”和“战术技巧”相结合的特点,为红队人员提供了深入的技术参考。

AdaptixC2 武器化二次开发实战教程 概述 本文档详细解析了对开源C2框架 AdaptixC2 进行两项关键技术改造的过程: 1. 客户端界面国际化(汉化) 和 2. Beacon Loader 的实战化武器改造以提升抗AV/EDR能力 。教程基于对源代码的修改,旨在提供深入、可操作的技术指南。 第一部分:基于 Qt LinguistTools 的客户端汉化 一、 目标与准备工作 目标 :为 AdaptixC2 客户端 (AdaptixClient) 增加多语言支持(以中文为例),实现界面文本的本地化显示。 环境与前提 : IDE : Qt Creator 17.0.1 (Community) 源码 : 自备 AdaptixC2 Server 与 Agent (Client) 的源代码 Qt 组件 : 确保已安装 LinguistTools 组件。 二、 项目实施步骤 1. 修改项目配置文件 ( CMakeLists.txt ) 在 find_package 部分添加 LinguistTools 组件依赖。 在文件末尾添加翻译文件设置,并将其编译进Qt资源系统中。 2. 修改主程序入口 ( main.cpp ) 添加必要的头文件。 在 QApplication 对象创建后、主窗口显示前,安装翻译器。此代码会根据系统语言环境自动加载对应的 .qm 文件。 3. 处理源代码中的字符串 核心规则 :将所有需要翻译的 固定界面文本 用 tr() 函数包裹。 示例 ( DialogConnect.cpp ): 关键问题修复 :某些自定义 Widget 类因缺少 Q_OBJECT 宏而无法使用 tr() 。 解决方案 :在类声明中添加 Q_OBJECT 宏。 修改文件 : AxConsoleWidget.h , ConsoleWidget.h 等。 4. 生成与处理翻译文件 (.ts) 生成 TS 文件 :在项目根目录打开终端,使用 lupdate 工具扫描源代码并生成或更新 .ts 文件。 成功后提示找到若干可翻译字符串。 翻译字符串 : 使用 Qt Linguist 工具打开 adaptix_zh_CN.ts 文件。 在界面中逐条填写源文本(英文)对应的翻译(中文)。 校对后保存。 发布翻译 :在 Qt Linguist 中点击“发布”按钮,或使用 lrelease 命令将 .ts 文件编译为二进制的 .qm 文件。 生成的 adaptix_zh_CN.qm 文件会根据 CMakeLists.txt 的配置自动嵌入到程序资源中。 5. 编译与测试 在 Qt Creator 中 重新构建 整个项目 (Build -> Build All)。 运行编译后的程序,客户端界面应已根据系统语言显示为中文。 6. 注意事项与局限性 扩展命令 :由服务端 ax_config.axs 文件或第三方扩展定义的命令/功能名称,其文本通常未在客户端代码中,因此无法通过此方法汉化。文中采用了对 ax_config.axs 进行 硬编码修改 的取巧方法。 动态切换 :本教程实现的是 启动时根据系统语言确定界面语言 。如需在运行时动态切换,需实现 changeEvent 事件监听和 retranslateUi 函数,更为复杂。 第二部分:Beacon Loader 的实战化武器改造 一、 目标与思路 目标 :增强原版 AdaptixC2 Beacon 的免杀能力,使其能绕过主流杀毒软件 (AV) 和终端检测响应 (EDR) 的检测,满足实战需求。 核心思路 :分离执行流程,采用 多阶段加载 和 隐蔽持久化 技术。 Loader(加载器) :一个高度免杀的初始程序,负责解密、加载并执行核心DLL。 DLL(核心模块) :包含实际的Shellcode加载和执行逻辑。 Shellcode :从AdaptixC2生成的加密的 agent.x64.bin 。 二、 技术实现细节 1. Shellcode 预处理 原始 agent.x64.bin 文件极易被检测。需先进行加密/编码。 方法 :使用简单的 XOR 异或加密 ,并可转换为 Base64 编码字符串方便存储。 操作 :编写一个Python脚本(或其他语言)对 agent.x64.bin 进行加密,然后将加密后的 payload 部署到远程服务器(如云存储、GitHub Gist等)或嵌入到Loader中。 2. Loader(加载器)设计 - C# (.NET) Loader 承担核心的免杀和持久化职责。 功能 1: 内存加载 .NET DLL 技术 :使用 Assembly.Load() 直接从内存字节数组加载DLL,避免DLL文件落地。 流程 :Loader 自身包含加密的DLL数据 -> 在内存中解密 -> 调用 Assembly.Load(decryptedBytes) -> 通过反射调用DLL的入口方法。 功能 2: 反分析技术 反虚拟机 (Anti-VM) :检查常见虚拟机特征(如特定进程、硬件信息、注册表项)。 反调试 (Anti-Debug) :检查调试器是否存在(如 IsDebuggerPresent , 检查运行时间)。 反沙箱 (Anti-Sandbox) :检查系统运行时间、内存大小、CPU核心数等,排除短时运行的沙箱环境。 功能 3: 持久化驻留机制 - WMI 事件订阅 优势 :高级、隐蔽、系统级权限,难以发现和清除。 核心组件 : __ EventFilter : 定义触发条件。例如: SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name='explorer.exe' 或更常见的 系统启动后一段时间触发 : SELECT * FROM __InstanceModificationEvent WHERE TargetInstance ISA 'Win32_LocalTime' AND TargetInstance.Second = 0 AND TargetInstance.Minute = 0 AND TargetInstance.Hour = 0 (每天午夜) 或使用 系统运行时间 : SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_OperatingSystem' AND TargetInstance.SystemUpTime >= 300 AND TargetInstance.SystemUpTime < 360 (系统启动后5-6分钟)。 ActiveScriptEventConsumer : 执行动作。使用VBScript/JScript执行命令,无需落地exe文件。命令为: forfiles /p %APPDATA% /m <Loader_Name> /c "<Loader_Full_Path>" 。 利用 forfiles.exe :这是一个合法的、有微软签名的系统程序。用它来启动Loader,可以 破坏进程父子关系 ,使检测引擎难以关联恶意行为与持久化源,提升迷惑性。 __ FilterToConsumerBinding : 将上述过滤器和消费者绑定起来。 流程 :Loader 首次运行时,以高权限创建上述三个WMI实例,实现持久化。随后可将自身复制到 %APPDATA% 等隐蔽目录,并删除原始文件。 3. DLL(核心模块)设计 - C/C++ DLL 负责最终执行Shellcode。 功能 1: 加载远程Shellcode 从预设的URL下载加密的(Base64+XOR)Shellcode。 在内存中进行解密,得到原始的 agent.x64.bin 数据。 功能 2: 进程注入 技术 : 共享内存区注入 (Section Injection) 或 进程镂空 (Process Hollowing) 。 目标进程 :寄生到 explorer.exe 等合法、常见的系统进程中,以掩盖恶意行为。 流程 : 创建目标进程(或打开现有进程),并将其挂起。 在目标进程内存中分配空间,写入解密后的Shellcode。 通过设置进程上下文、调用 CreateRemoteThread 或 QueueUserAPC 等方式,在目标进程中执行Shellcode。 三、 武器化流程与检测规避 生成Payload :在AdaptixC2中创建HTTPS监听器,生成 Shellcode 类型的Payload ( agent.x64.bin )。 加密Payload :使用提供的Python脚本加密 agent.x64.bin ,并上传到远程服务器。 编译Loader&DLL :分别编译Loader(C#)和DLL(C++)项目。将加密后的DLL数据以字节数组形式嵌入到Loader代码中。 分发 :将最终的Loader可执行文件进行伪装(如:伪装成PDF文档的图标,实际为exe;或与诱饵文档捆绑)。 执行链 : 受害者运行Loader。 Loader 进行反分析检查,通过后则在内存加载DLL。 DLL 从远程服务器下载加密Shellcode,解密后注入到 explorer.exe 进程。 Beacon 在 explorer.exe 中上线。 Loader 设置WMI持久化后自我删除并隐藏副本。 四、 注意事项 时效性 :所有免杀技术都有时效性,需根据目标环境持续研究和迭代。 Go环境问题 :编译原版AdaptixC2时,若遇到生成Go Agent失败,通常是网络问题(无法下载Go依赖)或Go环境配置错误。需为服务器配置可靠的网络代理或国内镜像源,并检查Go环境完整性。 责任性 :本文档仅用于安全技术研究和学习,请勿用于非法用途。 总结 本教程详细介绍了对AdaptixC2进行二次开发的两个核心方向: 国际化 :通过修改源码、使用Qt国际化框架,实现了客户端的本地化,提升了操作体验。 武器化 :通过多阶段加载、内存操作、反分析技术和隐蔽的WMI持久化等高级技术,显著提升了Beacon的隐蔽性和生存能力,使其更适用于对抗性环境。 这些改造充分体现了APT攻击中“代码开发”和“战术技巧”相结合的特点,为红队人员提供了深入的技术参考。