BOF这个东西无论是使用效果还是目前的生态,都非常的好,唯一不方便的就是开发起来不得劲,主要有编写、调试这两个方面,其实主要就是编写起来费事,需要确保用到的Win32 API都定义好,并且十分冗长。
所以为了写起来方便点,之前参考
https://github.com/securifybv/Visual-Studio-BOF-template
这个项目以及把TrustedSec 定义的很多常用Win32API声明
https://github.com/trustedsec/CS-Situational-Awareness-BOF/blob/master/src/common/bofdefs.h
把他俩结合起来发布了一个Visual Studio的BOF模板:
https://github.com/evilashz/Visual-Studio-BOF-template/tree/oldversion
但确实还是需要定义很多冗长的声明。
DFR
前段时间看到CS官方这篇文章:https://www.cobaltstrike.com/blog/simplifying-bof-development,解决了这问题,今天找时间将里面提到的解决方法再次结合到Visual-Studio-BOF-template里面。(没有Kit的大JB小子,呜呜呜)
他们用预处理器宏定义来解决了冗长的声明
#define DFR_LOCAL(module, function)
DECLSPEC_IMPORT decltype(function) module##$##function;
decltype(module##$##function) *##function = module##$##function; 解释一下
-
DECLSPEC_IMPORT decltype(function) module##$##function;
-
DECLSPEC_IMPORT
是一个常见的宏,用于声明一个函数或变量是在另一个模块中定义的,这通常用于 Windows 的 DLL 导入。在这里,它声明了一个名为module$function
的外部函数,其类型为function
的类型(用decltype
获取)。
-
-
decltype(module##$##function) *function = module##$##function;
-
这行代码首先定义了一个指针变量 *function
,其类型为module$function
的类型。然后将这个指针变量初始化为module$function
的地址。
-
大体来说现在可以比较方便的使用c++来编写BOF、并且可以调试、Beacon API我只实现了一个BeaconPrintf,剩下的可以自己到beacon.cpp写一下实现,另外调试时候的参数打包提取我没有实现。
使用的时候只需要导入这个模板(导入方式看之前的文章:使用 Visual Studio 开发 CS 的 BOF),将需要的API这样进行导入即可。
调试的时候这么切换即可:
去这找改完的模板:
https://github.com/evilashz/Visual-Studio-BOF-template/tree/main
原文始发于微信公众号(黑客在思考):「更新」Visual-Studio-BOF-template
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论