
Python module for running BOFs
PyBOFIn-Memory-Laden und Ausführen von BOFs
PyBOF ermöglicht es Python3, Beacon Object Files per Bytes zu laden und eine Ziel-BOF-Funktion in einem Python-Interpreter auszuführen
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 kann nicht mit dem Funktions-Kwarg verwendet werden
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")
Es gibt mehrere Argumente, die mit PyBOF verwendet werden können; diese werden unten genauer beschrieben
Erforderliches erstes Positionsargument, das ein Byte-Objekt sein muss, das die rohen Inhalte eines BOF enthält
Optionales Keyword-Argument, das eine Liste von Argumenten ist, die an die Ziel-BOF-Funktion übergeben werden sollen
Optionales Keyword-Argument, das den als String formatierten Namen der Zielfunktion angibt, die aus dem bereitgestellten BOF ausgeführt werden soll; standardmäßig go
Optionales Keyword-Argument ist ein String, der dem BOF-Argument-Packer die Argumenttypen mitteilt, während sie in den Puffer gepackt werden. Dies ähnelt dem format-Argument von struct.pack. Die einzigen gültigen Formatoptionen sind wie folgt:
i für Integer
s für Short
z für String
b für Binär
Z für Wide
Für jedes Argument in der args-Liste muss mindestens ein Formattyp angegeben werden. Dieses Keyword-Argument kann nicht zusammen mit raw verwendet werden
Optionales Keyword-Argument ist ein Boolean, das Argumente als leerzeichenverbundenen String übergibt, ohne sie zu packen, anstatt zu versuchen, formatierte Argumente für die BOF-Funktion zu packen. Dieses Keyword-Argument kann nicht zusammen mit format verwendet werden
Klonen Sie dieses Repository
git clone https://github.com/rkbennett/pybof.git
Erstellen Sie die _bof C-Erweiterung
cd pybof\src
python .\setup.py build
Kopieren Sie die resultierende pyd-Datei in das bof-Verzeichnis
copy build\lib.win-xxx-cpython-3xx\_bof.cp3xx-win_xxxx.pyd ..\bof\
Wechseln Sie ins übergeordnete Verzeichnis des bof-Verzeichnisses, importieren Sie und haben Sie Spaß
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")
Wenn eine BOF-Funktion keinen Wert zurückgibt, gebe ich eine Warnung aus, die den Benutzer darauf hinweist, dass nichts zurückgegeben wurde. Ich gehe davon aus, dass dies wahrscheinlich nicht das beabsichtigte Ergebnis einer Ausführung ist, wollte aber keine harten Fehler werfen. Wenn Sie eine BOF-Funktion ausführen und die Warnung "keine Ausgabe" erhalten, denken Sie daran, dass Ihre Argumentformatierung möglicherweise definiert werden muss oder falsch definiert ist, was dieses Problem verursachen kann (insbesondere die Verwendung von String anstelle von Wide)