No-Consolation开发者指南:从编译到自定义BOF功能的完整路线图
【免费下载链接】No-ConsolationA BOF that runs unmanaged PEs inline项目地址: https://gitcode.com/gh_mirrors/no/No-Consolation
No-Consolation是一款强大的Beacon Object File (BOF)工具,能够在内存中内联执行非托管PE文件(EXE/DLL),且无需分配控制台(即不会生成conhost.exe进程)。本指南将帮助开发者快速掌握从环境搭建到自定义功能开发的全流程,轻松解锁内存中PE执行的高级技巧。
一、认识No-Consolation:BOF工具的核心优势
No-Consolation作为一款专注于内存中PE执行的BOF工具,具备以下核心特性:
- 跨架构支持:完美兼容32位和64位系统,满足多样化的部署需求
- 多类型PE支持:同时支持EXE和DLL文件的内存加载与执行
- 无进程创建:直接在Beacon进程空间内执行,避免新进程创建带来的检测风险
- PEB链接功能:可将模块链接到PEB,确保
GetModuleHandle/GetProcAddress等API正常工作 - 内存持久化:自动加密并存储已执行的二进制文件,避免重复传输
- 异常处理:64位系统下支持C++异常处理,提升复杂PE文件的执行稳定性
这些特性使No-Consolation成为红队操作和内存中执行场景下的理想选择,特别是在需要隐蔽执行和减少痕迹的场景中表现突出。
二、环境搭建:编译No-Consolation的快速步骤
2.1 准备必要工具
编译No-Consolation需要以下工具链:
- mingw-w64交叉编译器(x86_64和i686版本)
- GNU Make构建工具
2.2 获取源代码
首先克隆项目仓库:
git clone https://gitcode.com/gh_mirrors/no/No-Consolation cd No-Consolation2.3 编译发布版本
项目提供了简洁的Makefile构建系统,执行以下命令编译发布版本:
make release该命令会自动:
- 使用
x86_64-w64-mingw32-gcc编译64位版本,输出到dist/NoConsolation.x64.o - 使用
i686-w64-mingw32-gcc编译32位版本,输出到dist/NoConsolation.x86.o - 对生成的目标文件进行strip处理,减小体积
2.4 编译调试版本
如需进行开发调试,可编译调试版本(包含调试符号和额外输出):
make debug调试版本会添加-DDEBUG宏定义,启用额外的调试信息输出。
三、基础使用:No-Consolation命令详解
No-Consolation提供了丰富的命令行选项,以下是常用功能的使用方法:
3.1 基本语法
noconsolation [选项] /path/to/binary.exe [参数]3.2 核心选项说明
| 选项 | 简写 | 说明 |
|---|---|---|
--local | -l | 从目标Windows机器加载二进制文件 |
--link-to-peb | -ltp | 将PE加载到PEB中 |
--dont-unload | -du | 不卸载DLL(保持加载状态) |
--timeout | -t | 设置超时时间(秒),默认为60,0表示禁用 |
--method | -m | 指定DLL中要执行的导出函数名 |
--list-pes | -lpe | 列出所有已加载到内存的PE文件 |
--unload-pe | -upe | 从内存中卸载指定的PE文件 |
3.3 实用示例
执行本地PowerShell并获取语言模式:
beacon> noconsolation --local C:\windows\system32\windowspowershell\v1.0\powershell.exe $ExecutionContext.SessionState.LanguageMode内存中执行mimikatz:
beacon> noconsolation /tmp/mimikatz.exe privilege::debug token::elevate exit列出已加载的PE文件:
beacon> noconsolation --list-pes四、高级技巧:内存中PE管理策略
4.1 PE内存持久化机制
No-Consolation会自动加密并在内存中存储首次执行的二进制文件,后续执行无需重新传输,只需指定文件名即可:
首次执行(完整路径):
beacon> noconsolation --local C:\windows\system32\cmd.exe /c ipconfig后续执行(仅需文件名):
beacon> noconsolation cmd.exe /c ipconfig4.2 PE内存管理命令
- 列出内存中的PE:
noconsolation --list-pes - 卸载内存中的PE:
noconsolation --unload-pe mimikatz.exe - 临时执行不保存:
noconsolation --dont-save /path/to/binary.exe
4.3 DLL加载高级技巧
加载可疑DLL并链接到PEB:
beacon> noconsolation --dont-unload --link-to-peb --no-output --dont-save --local C:\path\to\suspicious.dll此命令会:
- 将DLL加载到内存
- 链接到PEB,使
GetModuleHandle等API可正常工作 - 执行
DllMain函数 - 不保存DLL到内存,避免留下痕迹
五、自定义开发:扩展No-Consolation功能
5.1 项目结构解析
No-Consolation采用清晰的模块化结构:
头文件目录:
include/entry.h:定义核心数据结构,如_SAVED_PE、_LOADED_PE_INFO等loader.h:PE加载相关结构体和函数声明beacon.h:Cobalt Strike Beacon相关定义
源文件目录:
source/entry.c:程序入口点,包含BOF主逻辑loader.c:PE加载和执行核心实现utils.c:辅助功能函数
5.2 添加自定义命令行选项
要添加新的命令行选项,需修改以下文件:
- 在
source/entry.c中解析新选项 - 在
include/entry.h中添加相关结构体成员(如需要存储状态) - 更新README.md文档,添加新选项说明
5.3 扩展PE加载功能
若需扩展PE加载功能(如添加新的注入技术),可修改source/loader.c中的LoadPE函数,该函数负责PE文件的解析和内存加载。
5.4 实现自定义输出处理
输出处理逻辑位于source/output.c,可在此文件中添加自定义的输出捕获和处理机制,如加密输出或自定义格式。
六、常见问题与解决方案
6.1 编译错误:找不到头文件
确保mingw-w64编译器路径已添加到环境变量,或在Makefile中指定完整路径。
6.2 PE执行失败:依赖项问题
若目标PE有依赖DLL,No-Consolation会使用LoadLibrary加载,可能触发检测。建议先加载依赖DLL,再执行目标PE。
6.3 内存不足:PE文件过大
No-Consolation对大型PE文件支持有限,建议使用压缩或分段加载技术减小内存占用。
七、总结与展望
No-Consolation为开发者提供了一个强大而灵活的BOF框架,用于在内存中安全高效地执行PE文件。通过本指南,你已掌握从环境搭建、基础使用到高级定制的全流程知识。
未来,No-Consolation可能会添加更多高级特性,如反调试保护、更强大的内存加密和多架构支持。欢迎通过项目贡献代码或提出改进建议,共同完善这一强大工具。
附录:核心数据结构参考
- SAVED_PE:
include/entry.h中定义,用于内存中存储PE文件信息 - LOADED_PE_INFO:
include/entry.h中定义,跟踪已加载PE的状态 - IMAGE_RELOC:
include/loader.h中定义,处理PE重定位信息
【免费下载链接】No-ConsolationA BOF that runs unmanaged PEs inline项目地址: https://gitcode.com/gh_mirrors/no/No-Consolation
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考