
一个概念验证的用户自定义反射加载器 (UDRL),旨在重新创建、整合并增强 Cobalt Strike 的规避功能!
| 贡献者 | 显著贡献 | |
|---|---|---|
| Bobby Cooke | @0xBoku | 项目原作者和维护者 |
| Santiago Pecin | @s4ntiago_p | 反射加载器重大改进 |
| Chris Spehn | @ConsciousHacker | Aggressor 脚本 |
| Joshua Magri | @passthehashbrwn | IAT 钩子 |
| Dylan Tran | @d_tranman | 反射调用栈欺骗 |
| James Yeung | @5cript1diot | 间接系统调用 |
内置的 Cobalt Strike 反射加载器功能强大,支持 Cobalt Strike 提供的所有 Malleable PE 规避功能。使用自定义 UDRL 的主要缺点是,Malleable PE 规避功能可能无法开箱即用。
公开的 BokuLoader 项目旨在帮助红队创建自己的内部 Cobalt Strike UDRL。该项目旨在支持所有值得使用的 CS Malleable PE 规避功能。某些规避功能通过 CS 集成实现,有些则完全重新创建,还有一些不受支持。
在使用此项目的任何形式之前,您应充分测试规避功能是否按预期工作。在 C 代码和 Aggressor 脚本之间,使用不同版本的操作系统、编译器和 Java 进行编译可能会产生不同结果。
NtProtectVirtualMemory 完成obfuscate "true"0x1000 字节将全为零。XGetProcAddress 解析符号
Kernel32.GetProcAddressxLoadLibrary 解析 DLL 基址和 DLL 加载
TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleList 获取 DLL 基址Kernel32.LoadLibraryAmake 编译 BokuLoader 对象文件。BokuLoader.cna Aggressor 脚本。Script Console 确保 BokuLoader 已成功集成到 beacon 构建中。RAW beacon 开箱即用。如果使用 Artifact Kit 作为 beacon 加载器,stagesize 变量必须大于默认值。
| 原始 Cobalt Strike 字符串 | BokuLoader Cobalt Strike 字符串 |
|---|---|
| ReflectiveLoader | BokuLoader |
| Microsoft Base Cryptographic Provider v1.0 | 12367321236742382543232341241261363163151d |
| (admin) | (tomin) |
| beacon | bacons |
Kernel32.LoadLibraryExA 从磁盘映射 DLL。Kernel32.LoadLibraryExA 的第三个参数为 DONT_RESOLVE_DLL_REFERENCES (0x00000001)
RX 或 RWX 内存。Kernel32.CreateFileMappingA 和 Kernel32.MapViewOfFile 为虚拟 beacon DLL 分配内存。NtAllocateVirtualMemory、NtProtectVirtualMemoryntdll.dll 中设置用户态钩子不会检测到这些系统调用。mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 汇编指令。0x1000 字节为零。| 命令 | 选项 | 支持情况 |
|---|
allocator | HeapAlloc, MapViewOfFile, VirtualAlloc | 通过 BokuLoader 实现全部支持 |
module_x64 | 字符串 (DLL 名称) | 通过 BokuLoader 实现支持。与 CS 实现相同的 DLL 覆盖要求 适用。 |
obfuscate | true/false | HTTP/S beacon 通过 BokuLoader 实现支持。SMB/TCP 目前不支持 obfuscate true。详情见 issue。如果您能修复,欢迎帮助 :) |
entry_point | 十进制 RVA | 通过 BokuLoader 实现支持 |
cleanup | true | 通过 CS 集成支持 |
userwx | true/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_x64 | 4 字符字符串 | 通过 CS 集成支持 |
magic_pe | 2 字符字符串 | 通过 CS 集成支持 |
transform-x64 prepend | 转义十六进制字符串 | BokuLoader.cna Aggressor 脚本修改 |
transform-x64 strrep | 字符串 字符串 | BokuLoader.cna Aggressor 脚本修改 |
stomppe | true/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 | 字符串 | 不支持 |