
Python module for running BOFs
PyBOFcarga y ejecución en memoria de BOFs
PyBOF permite a Python3 cargar archivos Beacon Object mediante bytes y ejecutar una función BOF objetivo en un intérprete de Python
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 cannot be used with 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")
Hay varios argumentos que se pueden usar con PyBOF; se describen en detalle a continuación.
Argumento posicional obligatorio que debe ser un objeto de bytes que contenga el contenido sin procesar de un BOF.
Argumento de palabra clave opcional que es una lista de argumentos para pasar a la función BOF objetivo.
Argumento de palabra clave opcional que es el nombre con formato de cadena de la función objetivo a ejecutar desde el BOF proporcionado; su valor predeterminado es go.
El argumento de palabra clave opcional es una cadena que informa al empaquetador de argumentos BOF de los tipos de argumento a medida que se empaquetan en el búfer. Esto es similar al argumento format de struct.pack. Las únicas opciones de formato válidas son las siguientes:
i para entero
s para short
z para cadena
b para binario
Z para wide
Debe suministrarse al menos un tipo de formato para cada argumento en la lista de args. Este argumento de palabra clave no se puede usar en conjunto con raw.
Argumento de palabra clave opcional que es un booleano que pasa los argumentos como una cadena unida por espacios sin empaquetarlos, en lugar de intentar empaquetar los argumentos formateados para la función BOF. Este argumento de palabra clave no se puede usar en conjunto con format.
Clona este repositorio
git clone https://github.com/rkbennett/pybof.git
Compila la extensión c _bof
cd pybof\src
python .\setup.py build
Copia el archivo pyd resultante al directorio bof
copy build\lib.win-xxx-cpython-3xx\_bof.cp3xx-win_xxxx.pyd ..\bof\
Cambia al directorio padre del directorio bof, importa y diviértete
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")
Si una función BOF no devuelve un valor, lanzo una advertencia que alerta al usuario del hecho de que no se devolvió nada. Supongo que este probablemente no sea el resultado previsto de una ejecución, pero no quise lanzar errores graves. Si ejecutas una función BOF y recibes la advertencia de ausencia de salida, ten en cuenta que el formato de tus argumentos puede necesitar definirse o puede estar definido incorrectamente, lo que puede causar este problema (específicamente usar string en lugar de wide).