Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
BokuLoader — 一个概念验证(Proof-of-Concept)Cobalt Strike 反射加载器,旨在重现、集成并增强 Cobalt Strike 的规避功能! | Kitploit
工具/GitHubGitHub/xforcered/bokuloader
渗透测试框架IDS/IPS规避后渗透利用命令与控制红队Payload 开发对抗性攻击
GitHubxforcered/bokuloader

BokuLoader

一个概念验证(Proof-of-Concept)Cobalt Strike 反射加载器,旨在重现、集成并增强 Cobalt Strike 的规避功能!

查看仓库
33525332年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

BokuLoader:Cobalt Strike 反射加载器

这是一个概念验证的用户自定义反射加载器(UDRL),旨在重现、集成并增强 Cobalt Strike 的规避功能!

贡献者:

贡献者Twitter主要贡献
Bobby Cooke@0xBoku项目原作者与维护者
Santiago Pecin@s4ntiago_p反射加载器重大增强
Chris Spehn@ConsciousHackerAggressor 脚本编写
Joshua Magri@passthehashbrwnIAT 挂钩
Dylan Tran@d_tranman反射调用栈欺骗
James Yeung@5cript1diot间接系统调用

UDRL 使用注意事项

内置的 Cobalt Strike 反射加载器非常健壮,能够处理 Cobalt Strike 所提供的所有 Malleable PE 规避功能。使用自定义 UDRL 的主要缺点是,Malleable PE 规避功能可能无法开箱即用地得到支持。

BokuLoader 公开项目的目标是帮助红队创建自己的内部 Cobalt Strike UDRL。该项目旨在支持所有有价值的 CS Malleable PE 规避功能。部分规避功能利用 CS 集成实现,部分已完全重新实现,还有一些则不受支持。

在以任何形式使用本项目之前,你应当充分测试规避功能是否按预期工作。在 C 代码与 Aggressor 脚本之间,使用不同版本的操作系统、编译器以及 Java 进行编译可能会产生不同的结果。

规避功能

BokuLoader 特有的规避功能

  • 通过合成帧进行反射调用栈欺骗。
  • 自定义 ASM/C 反射加载器代码
  • 通过 HellsGate 与 HalosGate 技术实现间接 NT 系统调用
    • 所有分配选项的所有内存保护更改均通过间接系统调用 NtProtectVirtualMemory 完成
  • 通过自定义 UDRL Aggressor 脚本实现 obfuscate "true"。
  • NOHEADERCOPY
    • 加载器不会将原始 beacon DLL 的头部复制到虚拟 beacon DLL。前 0x1000 字节将为空。
  • 使用 XGetProcAddress 解析符号
    • 不使用 Kernel32.GetProcAddress
  • 使用 xLoadLibrary 解析 DLL 的基址并加载 DLL
    • 对于已加载的 DLL,从 TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleList 获取 DLL 基址
    • 不使用 Kernel32.LoadLibraryA
  • 使用凯撒密码进行字符串混淆
  • 100k UDRL 大小
  • 导入 DLL 名称和导入条目名称字符串会在虚拟 beacon DLL 中被覆盖。

受支持的 Malleable PE 规避功能

命令选项是否支持
allocatorHeapAlloc、MapViewOfFile、VirtualAlloc全部通过 BokuLoader 实现支持
module_x64字符串(DLL 名称)通过 BokuLoader 实现支持。与 CS 实现相同的 DLL 踩踏要求适用
obfuscatetrue/falseHTTP/S beacon 已通过 BokuLoader 实现支持。目前 SMB/TCP 不支持 obfuscate true。详情见 issue。如果你能修复,欢迎提供帮助 :)
entry_point十进制数字形式的 RVA通过 BokuLoader 实现支持
cleanuptrue通过 CS 集成支持
userwxtrue/false通过 BokuLoader 实现支持
sleep_mask(true/false) 或 (Sleepmask Kit+true)支持。使用默认的 "sleepmask true"(不使用 sleepmask kit)时,设置 "userwx true"。使用支持 RX beacon.text 内存(src47/Ekko)的 sleepmask kit 时,设置 "sleepmask true" 且 "userwx false"。
magic_mz_x644 字符字符串通过 CS 集成支持
magic_pe2 字符字符串通过 CS 集成支持
transform-x64 prepend转义十六进制字符串BokuLoader.cna Aggressor 脚本修改
transform-x64 strrep字符串 字符串BokuLoader.cna Aggressor 脚本修改
stomppetrue/false不支持。BokuLoader 不会复制 beacon DLL 的头部。虚拟 beacon DLL 的前 0x1000 字节为 0x00
checksum数字实验性。BokuLoader.cna Aggressor 脚本修改
compile_time日期时间字符串实验性。BokuLoader.cna Aggressor 脚本修改
image_size_x64十进制值不支持
name字符串实验性。BokuLoader.cna Aggressor 脚本修改
rich_header转义十六进制字符串实验性。BokuLoader.cna Aggressor 脚本修改
stringw字符串不支持
string字符串不支持

测试

  • (2023 年 2 月 22 日)所有 4 种分配器方法均已使用 threatexpress/malleable-c2/master/jquery-c2.4.7.profile 进行了测试

项目起源

  • 基于 Stephen Fewer 令人惊叹的反射加载器项目:
    • https://github.com/stephenfewer/ReflectiveDLLInjection
  • 最初是在跟随 Sektor7 恶意软件开发中级(MDI)课程 中 Renz0h 的反射 DLL 视频学习时创建的

用法

  1. 使用 make 编译 BokuLoader 目标文件
  2. 启动你的 Cobalt Strike Team Server
  3. 在 Cobalt Strike 中导入 BokuLoader.cna Aggressor 脚本
  4. 生成 x64 beacon(Attacks -> Packages -> Windows Executable (S))
  5. 使用 Script Console 确认 BokuLoader 已集成到 beacon 构建中
  • 不支持 x86 选项。x86 bin 是原始的反射加载器目标文件。
  • 生成 RAW beacon 开箱即用。当使用 Artifact Kit 作为 beacon 加载器时,stagesize 变量必须大于默认值。
    • 更多信息请参阅 Cobalt Strike 用户自定义反射加载器文档

检测指南

硬编码字符串

  • BokuLoader 将一些常见的被检测字符串改为新的硬编码值。这些字符串可用于对 BokuLoader 进行特征签名:
原始 Cobalt Strike 字符串BokuLoader 的 Cobalt Strike 字符串
ReflectiveLoaderBokuLoader
Microsoft Base Cryptographic Provider v1.012367321236742382543232341241261363163151d
(admin)(tomin)
beaconbacons

内存分配器

DLL 模块踩踏

  • 调用 Kernel32.LoadLibraryExA 将 DLL 从磁盘映射到内存
  • Kernel32.LoadLibraryExA 的第 3 个参数是 DONT_RESOLVE_DLL_REFERENCES (0x00000001)
    • 系统不会调用 DllMain
  • 不会解析 LDR PEB 条目中的地址,MDSec 此处 有详细说明
  • 可通过 pe-sieve 工具扫描进程内存来检测

堆分配

  • 如果未使用 sleepmask kit,堆中将存在可执行的 RX 或 RWX 内存。

映射分配器

  • 调用 Kernel32.CreateFileMappingA 和 Kernel32.MapViewOfFile 为虚拟 beacon DLL 分配内存。

Sleepmask 检测

  • 如果使用了 sleepmask kit,对这种独立内存分配存在检测方法,MDSec 此处 有详细说明

间接系统调用

  • BokuLoader 调用以下 NT 系统调用来设置已加载的可执行 beacon 内存:NtAllocateVirtualMemory、NtProtectVirtualMemory
  • 这些调用是从 BokuLoader 可执行内存中间接发起的。
  • 在 ntdll.dll 中设置用户态挂钩无法检测到这些系统调用。
  • 也许可以通过内核驱动程序注册内核回调来监视上述系统调用并检测其使用情况。
  • BokuLoader 自身的可执行内存中将包含 mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 汇编指令。

虚拟 beacon DLL 头部

  • 虚拟 beacon DLL 的前 0x1000 字节为零。

提供源代码

  • BokuLoader 源代码随仓库提供,可用于创建内存特征。
  • 如果你有其他检测方法,欢迎提交 pull request 贡献。
下载工具