Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Macrome — 레드팀과 분석가를 위한 엑셀 매크로 문서 리더/라이터 | Kitploit
도구/GitHubGitHub/michaelweber/macrome
Payload GenerationExploitationPhishingMalware AnalysisPenetration TestingSocial EngineeringBinary AnalysisRed Teaming
GitHubmichaelweber/macrome

Macrome

레드팀과 분석가를 위한 엑셀 매크로 문서 리더/라이터

저장소 보기
522784년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Macrome

레드팀과 분석가를 위한 Excel 매크로 문서 읽기/쓰기 도구입니다. 이 도구의 실제 기능에 대한 블로그 게시물은 여기와 여기에서 확인할 수 있습니다.

기본 템플릿을 사용하여 생성된 예제 문서.

설치 / 빌드

이 저장소를 클론하거나 다운로드한 후, dotnet을 사용하여 도구를 실행할 수 있습니다 - 예시:

root@kitploit:~
dotnet run -- build --decoy-document Docs\decoy_document.xls --payload Docs\popcalc.bin 

또는

root@kitploit:~
dotnet build
cd bin/Debug/netcoreapp2.0
dotnet Macrome.dll deobfuscate --path obfuscated_document.xls

참고: 구성된 대로 작동하려면 5.0+ 버전의 dotnet 빌드가 필요합니다. https://dotnet.microsoft.com/download/dotnet/5.0 에서 다운로드할 수 있습니다.

dotnet이 필요 없고 실행 가능한 바이너리를 포함하는 도구의 바이너리 릴리스는 Windows, OSX 및 Linux용 Release 섹션에서 찾을 수 있습니다.

사용법

Macrome은 솔루션 디렉터리에서 dotnet run을 사용하거나 빌드된 Macrome 바이너리에서 dotnet을 사용하여 실행합니다. Macrome에는 세 가지 작동 모드가 있습니다: 빌드 모드, 덤프 모드, 난독화 해제 모드.

빌드 모드

제공된 미끼 문서와 매크로 페이로드를 사용하여 난독화된 매크로 시트가 포함된 Excel 문서를 생성하려면 build 명령으로 Macrome을 실행합니다. dotnet Macrome.dll build -h를 실행하면 전체 사용 지침이 표시됩니다.

예를 들어, 미끼 문서 path/to/decoy_document.xls와 바이너리 x86 셸코드 path/to/shellcode.bin을 사용하여 문서를 빌드하려면 dotnet Macrome.dll build --decoy-document path/to/decoy_document.xls --payload /path/to/shellcode.bin을 실행합니다. 그러면 XLS 2003 문서가 생성되며, 문서를 열고 "콘텐츠 사용" 버튼을 누르면 shellcode.bin의 셸코드가 실행됩니다.

어떻게 실행해야 하나요?

나머지 문서에서는 각 플래그/기능을 자세히 설명하지만, 현재 Macrome이 제공하는 "최신 & 최고"는 다음 명령으로 얻을 수 있습니다:

root@kitploit:~
Macrome build --decoy-document decoy_document.xls --payload beacon.bin --payload64-bit beacon64.bin --payload-method Base64 --method ArgumentSubroutines --password VelvetSweatshop --preamble preamble.txt --output-file-name ReadyToPhish.xls

바이너리 페이로드 사용법

먼저 사용자가 볼 콘텐츠가 포함된 기본 "미끼" Excel 문서를 생성합니다. 이는 사용자가 Excel에 표시된 "매크로 사용" 버튼을 클릭하도록 유도하는 일종의 미끼여야 합니다. 최신 미끼 생성 예제는 https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets- 에서 확인할 수 있습니다. 이 시트를 생성한 후, 최신 Excel 통합 문서(*.xlsx) 형식이 아닌 Excel 97-2003 통합 문서(*.xls) 형식으로 문서를 저장합니다. 예제 미끼 문서는 /Docs/decoy_document.xls에 포함되어 있습니다. 참고: XOR 난독화를 사용하여 문서를 보호하는 경우 현재 미끼에 이미지를 추가할 수 없습니다.

다음으로, 도구에 제공할 셸코드 페이로드를 생성합니다. 예제 바이너리 페이로드(calc 실행)는 msfvenom을 사용하여 다음 매개변수로 생성되었습니다:

root@kitploit:~
 msfvenom -a x86 -b '\x00' --platform windows -p windows/exec cmd=calc.exe -e x86/alpha_mixed -f raw EXITFUNC=thread > popcalc.bin

64비트 페이로드도 지원됩니다. 예제 64비트 페이로드 popcalc64.bin은 다음 명령으로 생성되었습니다:

root@kitploit:~
msfvenom -a x64 -b '\x00' --platform windows -p windows/x64/exec cmd=calc.exe -e x64/xor -f raw EXITFUNC=thread > popcalc64.bin

그런 다음 이 페이로드는 다음 명령을 실행하여 포함될 수 있습니다:

root@kitploit:~
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload popcalc.bin --payload64-bit popcalc64.bin

현재 64비트 페이로드는 x86 페이로드도 함께 제공해야 합니다. 문제가 되지 않는다면 x86 페이로드 플래그에 쓰레기 값을 지정하면 됩니다.

.NET 어셈블리를 문서에 직접 포함하는 기능은 향후 지원될 예정이지만, 지금 당장 그렇게 하려면 EXCELntDonut을 사용하는 것이 좋습니다.

Macrome 0.5.0 이상부터는 모든 페이로드가 base64로 인코딩되므로 페이로드는 어떤 바이트 시퀀스(널 바이트 포함)도 포함할 수 있습니다.

실행 파일 포함

Macrome을 사용하여 .NET 실행 파일을 포함하려면 Donut을 donut.exe -a 3 -b 1 -z 1 executableToEmbed.exe 명령과 함께 사용한 다음, 결과 페이로드를 32비트 및 64비트 페이로드로 모두 포함하는 것이 좋습니다.

또 다른 좋은 대안은 Amber로, 상당히 큰 Go 바이너리를 포함하는 데 효과적이었습니다.

레거시 페이로드 인코딩

어떤 이유로 Macrome 0.5.0 이전의 레거시 페이로드 인코딩 모드를 사용하려면 --payload-method 플래그를 SheetPackingMethod로 사용합니다. 레거시 모드에서는 대부분 알파-숫자 페이로드를 사용하면 =CHAR(123)&CHAR(124)&CHAR(125)... 등과 같이 CHAR 함수 호출을 반복적으로 추가하는 것보다 매크로 형태로 문자와 숫자를 표현하는 것이 더 쉽기 때문에 생성되는 매크로 파일의 크기가 줄어듭니다. 하지만 도구는 완전히 인쇄할 수 없는 바이너리 페이로드도 처리할 수 있습니다.

매크로 페이로드 사용법

바이너리 페이로드 사용법과 유사하게, 먼저 미끼 문서를 생성해야 합니다. 다음으로, 실행할 매크로가 포함된 텍스트 파일을 생성합니다. 매크로의 열은 ; 문자로 구분하고 행은 줄바꿈으로 구분해야 합니다. 현재 지정된 매크로 내용은 A1부터 작성되어 실행됩니다. 향후 시작 위치를 지정할 수 있는 지원이 추가될 예정입니다. 예제 매크로는 /Docs/macro_example.txt 및 /Docs/multi_column_macro_example.txt에서 찾을 수 있습니다.

마지막으로 다음 명령을 실행합니다:

root@kitploit:~
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload macro-example.txt --payload-type Macro

payload-type 플래그를 Macro로 설정한 점에 유의하세요.

매크로를 직접 생성하거나, 훌륭한 EXCELntDonut 도구를 사용하여 매크로를 만들 수 있습니다.

인코딩 방법 선택

이에 대한 자세한 내용은 곧 게시될 블로그 게시물에서 설명하겠지만, Macrome은 이제 매크로 페이로드를 세 가지 방식으로 인코딩할 수 있습니다. 대부분은 여전히 모든 AV에서 탐지되지 않지만, 페이로드에 따라 실험해보고 가장 잘 작동하는 방식을 선택하세요.

  1. CharSubroutine - 반복적인 CHAR() 함수 사용을 대체하기 위해 임의의 셀에 서브루틴을 생성한 후 IF 및 SET.NAME 함수의 긴 체인을 사용하여 호출합니다. 이는 아직 주요 maldoc 작성자들이 남용하지 않은 방식이므로 현재로서는 AV에 탐지될 가능성이 낮습니다.
  2. ObfuscatedCharFunc - 원래 Macrome 인코딩 함수입니다. CHAR()를 호출하지만 임의의 빈 셀에 추가하고 값을 ROUND 함수로 래핑합니다.
  3. ObfuscatedCharFuncAlt - 원래 인코딩의 약간의 변형으로, PtgFunc 대신 PtgFuncVar를 사용하여 CHAR를 호출합니다. 이는 CHAR 호출 횟수를 계산하는 대부분의 시그니처를 무력화합니다.
  4. AntiAnalysisCharSubroutine - CharSubroutine과 동일하지만 서브루틴에 전달되는 변수가 여기에 설명된 대로 유니코드 속임수를 사용하여 난독화됩니다. 이 모드는 미끼 변수 이름이 추가되므로 CharSubroutine 모드보다 더 큰 문서를 생성합니다.
  5. ArgumentSubroutines - CHAR() 및 FORMULA()에 대한 사용자 정의 서브루틴을 생성하고, 이를 사용자 정의 함수로 호출하며, 에뮬레이터에서 덜 지원되는 ARGUMENT() 매크로를 사용하여 인수를 구문 분석합니다.

빌드 시 method 플래그를 사용하여 인코딩을 지정합니다. 예를 들어 CharSubroutine 인코더를 사용하려면:

root@kitploit:~
dotnet Macrome.dll b --decoy-document decoy_document.xls --method CharSubroutine --payload popcalc.bin --output-file-name CharSubroutine-Macro.xls

프리앰블 매크로

때로는 페이로드 코드가 실행되기 전에 특정 매크로를 실행해야 할 수도 있습니다. 이는 샌드박스 회피를 위한 매크로를 추가하거나 페이로드가 올바른 호스트에서 실행되고 있는지 확인하는 경우에 유용합니다.

프리앰블 파일의 형식은 payload-type을 Macro로 사용할 때와 완전히 동일하지만, 단일 열만 지원합니다. 예를 들어, 다음과 같은 프리앰블을 사용할 수 있습니다:

root@kitploit:~
=IF(GET.WORKSPACE(13)<770, CLOSE(FALSE),)
=IF(GET.WORKSPACE(14)<390, CLOSE(FALSE),)
=IF(GET.WORKSPACE(19),,CLOSE(FALSE))
=IF(GET.WORKSPACE(42),,CLOSE(FALSE))

이렇게 하면 화면 해상도 값, 마우스 존재 여부, 사운드 재생 가능 여부를 확인합니다. 이러한 조건 중 하나라도 실패하면 기본 페이로드 콘텐츠가 실행되기 전에 앱이 종료됩니다.

또한, 프리앰블 매크로가 나머지 매크로의 압축을 푼 후가 아니라 즉시 평가되도록 하려면 명령 앞에 %%%%%를 붙일 수 있습니다. 예를 들어:

root@kitploit:~
%%%%%=IF(GET.WORKSPACE(13)<770, HALT(),)
%%%%%=IF(GET.WORKSPACE(14)<390, HALT(),)
%%%%%=IF(GET.WORKSPACE(19),,HALT())
%%%%%=IF(GET.WORKSPACE(42),,HALT())

이는 문서를 종료하기 전에 실행되는 XLM 명령 수를 최소화하는 데 유용하며, 샌드박스 지표에 대한 더 즉각적인 반응에 도움이 될 수 있습니다.

XOR 난독화 비밀번호 보호

Macrome 0.3.0 이상에서는 훨씬 오래된 Office 버전의 레거시 암호화 모드인 XOR 난독화를 사용한 문서 비밀번호 보호를 지원합니다. 이 암호화 모드는 IR 도구에서 지원되지 않는 경우가 많으며 검열로부터 문서 콘텐츠를 보호하는 데 도움이 될 수 있습니다.

Excel에는 VelvetSweatshop이라는 "기본" 비밀번호가 있으며, 문서가 열릴 때 자동으로 해독되도록 하면서 문서 콘텐츠를 암호화할 수 있습니다. 이는 공격적 맥락에서 XOR 난독화를 사용하는 "이상적인" 방법입니다. Macrome은 문서를 난독화 해제하거나 덤프할 때 이 비밀번호를 자동으로 사용하려고 시도합니다.

이 기능을 사용하려면 빌드 명령에 --password <암호화할비밀번호>를 추가하기만 하면 됩니다.

덤프 모드

dump 명령으로 Macrome을 실행하여 임의의 문서에 대해 가장 관련성 높은 BIFF8 레코드를 출력합니다. 이 기능은 olevba의 매크로 덤프 기능과 유사하지만, 일부 에지 케이스 Ptg 항목을 더 완벽하게 처리하여 형식이 Excel의 실제 FORMULA 항목과 최대한 가깝도록 합니다. 이는 이 도구를 만들면서 생성된 이상한 에지 케이스 문서를 디버깅하는 데 사용한 방식이므로 비교적 견고합니다. 하지만 현재 지원되지 않는 에지 케이스가 많을 것이므로, 콘텐츠를 제대로 덤프하지 못하는 문서를 발견하면 이슈를 열고 문서를 zip 파일로 공유해 주세요.

덤프 명령은 대상 파일을 가리키는 path 인수만 필요합니다. 예제 호출은 다음과 같습니다:

root@kitploit:~
dotnet Macrome.dll dump --path docToDump.xls

dump 명령의 대부분의 플래그는 디버깅용이지만, dump-hex-bytes는 관련 레코드의 개별 바이트 페이로드를 확인하려는 사용자에게 유용할 수 있습니다. 이는 BiffView와 유사한 기능이지만, 기본적으로 maldoc 관련 항목만 표시됩니다.

난독화 해제 모드

deobfuscate 명령으로 Macrome을 실행하여 난독화된 XLS 바이너리 문서를 받아 여러 분석 방지 동작을 역으로 시도합니다. dotnet Macrome.dll deobfuscate -h를 실행하면 전체 사용 지침이 표시됩니다. 현재, 기본적으로 이 모드는 다음을 수행합니다:

  • 숨겨진 상태에 관계없이 모든 시트를 숨김 해제합니다.
  • Excel에서 이름이 해당 문자열과 일치하지 않더라도 Auto_Open 항목으로 해석할 모든 Lbl 항목에 대해 수동으로 지정된 레이블을 정규화합니다.

예를 들어, path/to/obfuscated_file.xls에 있는 악성 XLS 2003 매크로 파일의 난독화를 해제하려면 dotnet Macrome.dll deobfuscate --path path/to/obfuscated_file.xls를 실행합니다. 그러면 수동으로 또는 도구를 사용하여 분석하기 더 쉬운 난독화된 파일의 복사본이 생성됩니다.

참고: 현재는 이 기능이 많지 않으며, 주로 수정된 b2xtranslator 라이브러리를 사용하여 난독화 해제를 자동화하는 방법을 보여주기 위한 것입니다. 더 유용한 기능이 곧 추가될 예정입니다.

감사의 말

이 도구를 작성하기 위해 제가 의지할 수 있었던 모든 분들께 큰 감사를 드립니다.

  • https://outflank.nl/blog/2018/10/06/old-school-evil-excel-4-0-macros-xlm/ - Outflank 팀이 이 공격을 만들었고, 저는 지루한 부분 중 일부를 자동화하고 있을 뿐입니다.
  • 현재 악성코드 작성자가 탐지를 회피하기 위해 무엇을 하고 있는지에 대한 훌륭한 글을 써 주신 InQuest 팀.
    • https://inquest.net/blog/2019/01/29/Carving-Sneaky-XLM-Files
    • https://inquest.net/blog/2020/03/18/Getting-Sneakier-Hidden-Sheets-Data-Connections-and-XLM-Macros
    • https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets-
  • 테스트에 유용하고 방어/분석 측면에서 정말 훌륭한 기술인 XLMMacroDeobfuscator 도구를 제공한 @DissectMalware 님.
  • 멀티 아키텍처 Excel 매크로를 훔쳐서 Macrome에 x64 아키텍처 지원을 추가하기 위해 적용한 훌륭한 EXCELntDonut 도구를 제공한 @JoeLeonJr 님.
  • b2xtranslator 라이브러리의 원저자와 이를 업데이트하고 dotnet으로 포팅한 EvolutionJobs 팀. 여기서 사용된 코드는 https://github.com/EvolutionJobs/b2xtranslator 에서 가져왔습니다.
  • https://gunshowcomic.com/648 의 KC Green 만화에서 가져온 이미지.
도구 다운로드