Ap3x/COFF-Loader
GitHub: Ap3x/COFF-Loader
Cobalt Strike Beacon Object File 加载器的 C++ 重新实现,支持在独立环境中加载、解析和执行 BOF 文件。
Stars: 66 | Forks: 15
# COFF-Loader
这是对 [TrustedSec COFF Loader](https://github.com/trustedsec/COFFLoader) 的重新实现。我决定创建这个仓库来挑战我对 Windows PE 格式的理解。这种技术最初用于 [Cobalt Strike](https://www.cobaltstrike.com/)。对于希望使用 VS Debugger 并跟踪其内存操作加载器执行情况的用户,本项目使用 Visual Studio 2022 开发。
在编写此代码时,我主要使用了以下资源:
- [Microsoft PE Format](https://learn.microsoft.com/en-us/windows/win32/debug/pe-format)
- [Otterhacker's COFF Loader Article](https://otterhacker.github.io/Malware/CoffLoader.html)
## 下载
预构建的 `COFFLoader.exe` 可从最新的 [GitHub Actions run](https://github.com/Ap3x/COFF-Loader/actions) 获取。前往最近一次成功运行的记录并下载 `COFFLoader` 构件。
## 构建
### 前置条件
- Visual Studio 2022(带有 C++ 工作负载)
- CMake(随 Visual Studio 附带)
### 构建
```
cmake -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config Release
```
这将构建:
- `build/Release/COFFLoader.exe` — COFF 加载器
- `build/bofs/*.obj` — 来自 [Beacon-Object-File-Library](https://github.com/Ap3x/Beacon-Object-File-Library) 子模块的所有 BOF 目标文件
## 用法
```
COFFLoader.exe
```
`function name` 是 BOF 函数入口名称。通常是 `"go"`。
### 示例
```
# 运行 WhoAmI BOF
COFFLoader.exe go build\bofs\WhoAmI.obj
# 运行 Ipconfig BOF
COFFLoader.exe go build\bofs\Ipconfig.obj
# 运行 EnumDeviceDrivers BOF
COFFLoader.exe go build\bofs\EnumDeviceDrivers.obj
# 运行 GetSystemDirectory BOF
COFFLoader.exe go build\bofs\GetSystemDirectory.obj
```
### 内置 BOF
以下 BOF 由 [Beacon-Object-File-Library](https://github.com/Ap3x/Beacon-Object-File-Library) 子模块构建:
| BOF | 描述 |
|-----|-------------|
| WhoAmI | 获取当前用户名 |
| EnumDeviceDrivers | 枚举已加载的设备驱动程序 |
| GetSystemDirectory | 获取系统目录路径 |
| Ipconfig | 列出网络适配器配置 |
| FileExfiltrationUrlEncoded | URL 编码的文件窃取 |
| RegistryPersistence | 基于注册表的持久化 |
| TimeStomp | 修改文件时间戳 |
### BOF 参数
为了向 BOF 传递参数,我使用了与 [Otterhacker's COFF Loader](https://github.com/OtterHacker/CoffLoader) 完全相同的代码。结构体如下:
```
typedef struct _Arg {
char* value;
size_t size;
BOOL includeSize;
} Arg;
```
你可以在[这里](./Src/main.cpp)的第 25 行查看该用法的示例。
## 示例

### 参考资料
- [Microsoft PE Format](https://learn.microsoft.com/en-us/windows/win32/debug/pe-format)
- 这是一篇非常棒的博客文章 --> [Otterhacker COFF Loader Article](https://otterhacker.github.io/Malware/CoffLoader.html)
- [TrustedSec COFFLoader](https://github.com/trustedsec/COFFLoader)
- [TrustedSec Situational Awareness BOF Repo](https://github.com/trustedsec/CS-Situational-Awareness-BOF)
- [Otterhacker COFF Loader Repo](https://github.com/OtterHacker/CoffLoader)
- [Cobalt Strike BOF C API](https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/beacon-object-files_bof-c-api.htm)
标签:Bash脚本, BOF加载器, C++, Cobalt Strike, COFF加载器, EDR绕过, HTTP工具, Linux, PE格式, Visual Studio, Windows internals, 中高交互蜜罐, 代理, 内存加载, 后渗透, 恶意软件开发, 攻击诱捕, 数据擦除, 无文件攻击, 无线安全, 高交互蜜罐