
Python module for running BOFs
PyBOFالتحميل والتنفيذ في الذاكرة لملفات BOF
يتيح PyBOF للغة Python3 تحميل ملفات Beacon Object عبر وحدات البايت وتنفيذ دالة BOF المستهدفة داخل مترجم 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")
هناك عدة وسائط يمكن استخدامها مع PyBOF، وهي موصوفة بالتفصيل أدناه
وسيطة موضعية أولى إلزامية، ويجب أن تكون كائن bytes يحتوي على المحتوى الخام لملف BOF
وسيطة كلمة مفتاحية اختيارية، وهي قائمة من الوسائط يتم تمريرها إلى دالة BOF المستهدفة
وسيطة كلمة مفتاحية اختيارية، وهي اسم دالة الهدف منسق كنص ليتم تنفيذه من ملف BOF المقدم، وتكون القيمة الافتراضية لها go
وسيطة كلمة مفتاحية اختيارية عبارة عن نص، تعرّف أداة تعبئة وسائط BOF بأنواع الوسائط أثناء تعبئتها في المخزن المؤقت. هذا مشابه لوسيطة التنسيق من struct.pack. خيارات التنسيق الصالحة الوحيدة هي كما يلي:
i للعدد الصحيح (integer)
s للعدد القصير (short)
z للنص (string)
b للبيانات الثنائية (binary)
Z للنص العريض (wide)
يجب توفير نوع تنسيق واحد على الأقل لكل وسيطة في قائمة الوسائط. لا يمكن استخدام وسيطة الكلمة المفتاحية هذه مع raw
وسيطة كلمة مفتاحية اختيارية وهي قيمة منطقية (boolean) تمرر الوسائط كنص مفصول بمسافات دون تعبئتها، بدلاً من محاولة تعبئة الوسائط المنسقة لدالة 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 قيمةً، أقوم بإصدار تحذير لتنبيه المستخدم إلى حقيقة عدم إرجاع أي شيء. أفترض أن هذا على الأرجح ليس النتيجة المقصودة من التنفيذ، لكنني لم أرغب في إلقاء أخطاء قاسية. If you run a BOF function and receive the no output warning, keep in mind that your args formatting may need defined or may be defined incorrectly وهو ما يمكن أن يسبب هذه المشكلة (خاصة عند استخدام string بدلاً من wide)