
Python module for running BOFs
PyBOF内存中加载并执行 BOF
PyBOF 使 Python3 能够通过字节加载 Beacon 对象文件,并在 Python 解释器中执行目标 BOF 函数
data = open(r'c:\path\to\example.o', 'rb').read()
bof.run(data)
data = open(r'c:\path\to\example.o', 'rb').read()
bof.run(data, args=["foo"], raw=True)
# Raw 不能与 function kwarg 一起使用
data = open(r'c:\path\to\example.o', 'rb').read()
bof.run(data, args=[r"c:\users"], format="Z")
import bof
from urllib.request import urlopen
data = urlopen("https://github.com/trustedsec/CS-Situational-Awareness-BOF/raw/master/SA/dir/dir.x64.o").read()
bof.run(data, args=[r"c:\users"], format="Z")
PyBOF 支持多种参数,下面进行更详细的说明
必填的第一个位置参数,必须是一个字节对象,包含 BOF 的原始内容
可选关键字参数,是一个要传递给目标 BOF 函数的参数列表
可选关键字参数,是字符串格式的目标函数名称,用于从提供的 BOF 中执行,默认为 go
可选关键字参数,是一个字符串,用于告知 BOF 参数打包器参数类型,因为参数会被打包进缓冲区。这与 struct.pack 的 format 参数类似。唯一有效的格式选项如下:
i 表示整数
s 表示短整数
z 表示字符串
b 表示二进制
Z 表示宽字符串
args 列表中的每个参数必须至少提供一种格式类型。此关键字参数不能与 raw 一起使用
可选关键字参数,是一个布尔值,将 args 作为空格连接的字符串传递而不进行打包,而不是尝试为 BOF 函数打包格式化参数。此关键字参数不能与 format 一起使用
克隆此仓库
git clone https://github.com/rkbennett/pybof.git
构建 _bof C 扩展
cd pybof\src
python .\setup.py build
将生成的 pyd 文件复制到 bof 目录中
copy build\lib.win-xxx-cpython-3xx\_bof.cp3xx-win_xxxx.pyd ..\bof\
切换到 bof 目录的父目录,导入并开始使用
cd ..\
python
>>> import bof
>>> from urllib.request import urlopen
>>> data = urlopen("https://github.com/trustedsec/CS-Situational-Awareness-BOF/raw/master/SA/dir/dir.x64.o").read()
>>> bof.run(data, args=[r"c:\users"], format="Z")
如果 BOF 函数没有返回值,我会发出警告,提醒用户没有返回任何内容。我猜测这很可能不是执行的预期结果,但我不想抛出硬错误。如果你运行 BOF 函数并收到无输出警告,请记住你的 args 格式可能需要定义,或者可能定义不正确,这可能导致此问题(尤其是使用 string 而不是 wide 时)