
Python module for running BOFs
PyBOFBOF のインメモリ読み込みと実行
PyBOF は、Python3 が Beacon Object Files をバイト列として読み込み、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 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")
PyBOF で使用できる引数はいくつかあります。以下で詳しく説明します。
必須の最初の位置引数で、BOF の生の内容を含むバイトオブジェクトである必要があります。
オプションのキーワード引数で、対象の BOF 関数に渡す引数のリストです。
オプションのキーワード引数で、指定された BOF から実行する対象関数の文字列形式の名前です。デフォルトは go です。
オプションのキーワード引数は文字列で、BOF の引数パッカーに、バッファへパックする際の引数タイプを伝えます。これは struct.pack の format 引数に似ています。有効なフォーマットオプションは次のとおりです。
i は integer(整数)
s は short(ショート)
z は string(文字列)
b は binary(バイナリ)
Z は wide(ワイド)
args リスト内の各引数に対して、少なくとも1つのフォーマットタイプを指定する必要があります。このキーワード引数は raw と併用できません。
オプションのキーワード引数で、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 を使用する場合)。