Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

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

工具目录

分类

查看所有分类
Loading categories
BokuLoader — 一个概念验证的Cobalt Strike反射加载器,旨在重新创建、整合并增强Cobalt Strike的规避功能! | Kitploit
工具/GitHubGitHub/boku7/bokuloader
渗透测试框架漏洞利用框架Shellcode二进制分析红队Payload 开发
GitHubboku7/bokuloader

BokuLoader

一个概念验证的Cobalt Strike反射加载器,旨在重新创建、整合并增强Cobalt Strike的规避功能!

查看仓库
1.4k2752年前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 规避功能

测试

  • (2023/2/22) 使用 threatexpress/malleable-c2/master/jquery-c2.4.7.profile 测试了所有 4 种分配器方法。

项目起源

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

使用方法

  1. 使用 make 编译 BokuLoader 对象文件。
  2. 启动你的 Cobalt Strike 团队服务器。
  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 的第三个参数为 DONT_RESOLVE_DLL_REFERENCES (0x00000001)
    • 系统不会调用 DllMain
  • 如 MDSec 所述,不会解析 LDR PEB 条目中的地址。
  • 可通过 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 源代码在仓库中提供,可用于创建内存签名。
  • 如果您有其他检测指南,欢迎通过提交拉取请求贡献。

致谢/参考

反射调用栈欺骗

  • LoudSunRun: 带间接系统调用的调用栈合成帧欺骗器
  • SilentMoonwalk: 完全动态调用栈欺骗的概念验证实现
  • Vulcan Raven: 欺骗任意调用栈进行系统调用的概念验证实现
  • CallStackMasker: 使用定时器动态掩码调用栈的概念验证实现
  • ThreadStackSpoofer: 线程栈欺骗概念验证
  • Behind the Mask: 使用定时器动态欺骗调用栈

反射加载器

  • https://github.com/stephenfewer/ReflectiveDLLInjection
  • 如果您对反射 DLL 感兴趣,请查看以下视频:
    • 与导入地址表 (IAT) 共舞 - Sektor 7 MDI 课程
    • 遍历导出地址表 - Sektor 7 MDI 课程
    • 反射注入详解 - Sektor 7 MDI 课程
    • ReflectiveLoader 源码审查 - Sektor 7 MDI 课程
  • TitanLdr
  • AceLdr
  • KaynLdr

HalosGate 系统调用器

  • Reenz0h 来自 @SEKTOR7net
    • 请查看 Reenz0h 精彩的课程和博客!
    • 我参加过最好的恶意软件开发课程。
    • Halos Gate 技术的创建者。他的工作最初是此项工作的动力。
    • Sektor7 HalosGate 博客

HellsGate 系统调用器

  • @smelly__vx 和 @am0nsec(Hells Gate 技术的创建者/发布者)
    • 没有他们,我无法实现我的 HellsGate :)
    • 在此方法上做了出色的工作,我非常享受自己实践的过程。谢谢!
    • https://github.com/am0nsec/HellsGate
    • Hell's Gate 论文链接:https://vxug.fakedoma.in/papers/VXUG/Exclusive/HellsGate.pdf

Aggressor 脚本

  • sinusoid @the_bit_diddler : returnIntegerFromArray

Cobalt Strike 用户自定义反射加载器

  • https://www.cobaltstrike.com/help-user-defined-reflective-loader

学习 Intel 汇编的优秀资源

  • Pentester Academy - SLAE64

ETW 和 AMSI 绕过

  • @anthemtotheego inline-ExecuteAssembly
  • @mariuszbit - 在反射加载器中实现绕过的绝妙想法!
  • @XPN Hiding Your .NET – ETW
  • ajpc500/BOFs
  • Offensive Security OSEP

在 C 代码中使用 GCC 实现汇编

  • https://outflank.nl/blog/2020/12/26/direct-syscalls-in-beacon-object-files/
  • https://www.cs.uaf.edu/2011/fall/cs301/lecture/10_12_asm_c.html
  • http://gcc.gnu.org/onlinedocs/gcc-4.0.2/gcc/Extended-Asm.html#Extended-Asm

Cobalt Strike C2 配置文件

  • Tylous 的史诗级 SourcePoint 项目
  • threatexpress/malleable-c2/jquery-c2.4.7.profile
下载工具
命令选项支持情况
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字符串不支持