capemon을 독립형 VM에서 실행하기 위한 Python GUI입니다. CAPE(Configuration And Payload Extraction) 처리 및 결과의 일부를 제공합니다.

인터페이스
- 상단의 탭: Start, 그리고 결과 뷰당 하나씩 (Info, Behavior, Signatures, Payloads,
Yara, Configs, Strings, Debugger, JS Log, Network).
- Start 탭은 대상 선택, 패키지 옵션, 모니터 및 로깅 플래그를 카드로 묶습니다.
작업(Launch, Kill, reports, Zip Results)은 창 하단에 고정되어 있어
스크롤해도 사라지지 않습니다.
- 다크 및 라이트 테마는 오른쪽 아래 상태 표시줄이나 Settings에서 전환합니다.
선택 사항은
cfg.ini에 기록되며 다음 실행 시 복원됩니다.
- Signatures보다 Payloads와 Configs를 먼저 처리하십시오. 시그니처는 실행 시점에
결과에 있는 내용만 보며, 여러 시그니처가 payload, config 및 yara 데이터를 읽습니다.
해당 패스를 먼저 실행하면 실패하는 대신 조용히 과소 보고하게 됩니다. Signatures 버튼은
해당 탭들이 실행될 때까지 비활성화 상태로 유지되며, 툴팁에 어떤 항목이 남았는지 표시됩니다.

UI 작업
-
tools/uidev/는 실제 패널을 화면 없이 빌드하여 PNG로 저장하므로, 분석을 실행하지 않고도
레이아웃 변경을 스모크 테스트하고 스크린샷을 찍을 수 있습니다. tools/uidev/README.md를
참조하십시오.
-
동일한 스크립트가 모든 풀 리퀘스트에서 Windows 러너의 CI로 실행되며, 렌더링 결과를
아티팩트로 업로드합니다.
-
멀웨어 실행에 적합한 Windows 10 VM을 생성하십시오.
-
VM에 Python을 설치하십시오. 64비트 Python 버전 3.11, 3.12, 3.12에서 테스트되었습니다. Python을 PATH에 추가하십시오.
-
Microsoft Visual C++ 재배포 가능 패키지를 모두 다운로드하여 설치하십시오:
-
CAPEsolo를 설치하십시오.
-
VM을 스냅샷하십시오.
빠른 시작
- 관리자 명령 창을 여십시오.
- capesolo 을 입력하여 실행하십시오.
또는 CAPEsolo.exe에 대한 바로 가기를 생성할 수 있으며,
이는 python.exe 파일과 같은 위치의 Scripts 하위 디렉터리에 있습니다.
- 고급에서 '관리자 권한으로 실행'을 선택하십시오.
- 아이콘 파일은 site-packages 아래의 CAPEsolo 설치 폴더에서 사용할 수 있습니다.
분석 결과는 C:\Users\Public\CAPEsolo\analysis에서 확인할 수 있습니다.
- C:\Users\Public\CAPEsolo\cfg.ini에서 구성할 수 있습니다.
- 이곳의 설정은 python-path\site-packages\CAPEsolo\cfg.ini의 패키지 기본값을 재정의하며,
패키지 복사본을 덮어쓰는
pip install --upgrade CAPEsolo 후에도 유지됩니다.
- 변경하려는 키만 포함하십시오. 나머지는 패키지 기본값으로 대체됩니다.
커뮤니티 시그니처
- CAPEsolo는 자체 시그니처만 제공합니다. CAPEv2 / CAPESandbox 커뮤니티 시그니처는
C:\Users\Public\CAPEsolo\signatures(cfg.ini 옆)에 수정 없이 넣으십시오. 아래의 Update는
https://github.com/CAPESandbox/community에서
community 하위 폴더를 채울 수 있으며, 직접
파일을 복사할 수도 있습니다.
- 하위 폴더가 스캔되며,
deprecated와 linux는 건너뜁니다. 추가되거나 편집된 파일은 재시작
없이 다음 시그니처 패스에서 반영됩니다.
- 해당 위치의 시그니처는 같은 이름의 기본 제공 시그니처를 대체합니다.
community 외부에 있는
사용자 자신의 시그니처도 그 안의 같은 이름 시그니처보다 우선합니다.
- CAPEsolo에 없는 CAPEv2 모듈을 필요로 하는 시그니처는 건너뛰며, 분석 로그에 누락된 모듈이
표시됩니다. CAPEsolo가 생성하지 않는 결과 섹션(예: Suricata)을 읽는 시그니처는 로드되지만
절대 일치하지 않습니다.
- 해당 시그니처가 CAPEv2 루트 아래에서 찾는 선택적 데이터 파일(
extra/msft-public-ips.csv,
data/dga.bloom)은 C:\Users\Public\CAPEsolo에서 읽습니다.
YARA 규칙
- CAPEsolo는 자체 CAPE 규칙을 함께 제공합니다. 사용자 자신의 규칙은 C:\Users\Public\CAPEsolo\yara에, 커뮤니티 규칙은 그 안의
community 하위 폴더에 넣습니다. 둘 다 CAPE 규칙과 함께 스캔됩니다. 두 파일의 이름이 같을 경우 우선순위는 Desktop\custom, 그다음 사용자 폴더, 그다음 community, 그다음 패키지된 규칙 순입니다.
pip install --upgrade CAPEsolo를 실행하면 패키지된 규칙이 복원됩니다.
업데이트 (Start 탭)
- 무엇을 다운로드할지 묻습니다:
- YARA rules - CAPEsolo(기본적으로 체크됨)와 CAPEv2는 체크된 항목으로부터 패키지된 규칙(게스트에서 capemon이 사용하는 CAPE 규칙과 모니터 규칙)을 재빌드합니다. 둘 다 파일이 있는 경우 CAPEsolo의 것이 사용됩니다.
- YARA rules - Community는
yara\community를 CAPESandbox/community의 data/yara/CAPE로 교체합니다.
- Signatures - Community는
signatures\community를 CAPESandbox/community의 modules/signatures/windows와 all로 교체합니다.
- 사용자 자신의 파일과 Debugger 탭에서 저장한 규칙은 절대 건드리지 않습니다. 교체 전에 모든 것이 먼저 다운로드되므로, 업데이트가 실패해도 기존 내용이 유지됩니다.
- 동일한 선택 사항은
capesolo --update_yara capesolo,capev2,community(값이 없으면 capesolo), capesolo --update_signatures, 그리고 MCP 도구 capesolo_update_yara로도 사용할 수 있습니다.
보고서 (Start 탭)
- Reports는 분석에 대한 한 번의 패스로 JSON 및/또는 HTML 보고서(둘 다 기본적으로 체크됨)를 생성합니다. 각각은 Desktop과 분석 디렉터리에 기록됩니다.
각 분석 후 VM을 되돌리십시오.
JSON 보고서 보기 (독립 실행형)
tools/report_viewer.py는 CAPEsolo report.json을 위한 자체 포함형 트리아지 뷰어로, Python만 있으면 어떤 호스트에서든 실행됩니다 - CAPEsolo 설치도, pip 의존성도 필요 없습니다(표준 라이브러리 tkinter).
python tools/report_viewer.py [path\to\report.json | path\to\bundle.zip]
- Zip Results의 결과 번들은 그대로 열립니다: 보고서가 zip에서 제자리에서 읽히므로, 전체 번들의 페이로드 바이트는 트리아지를 수행하는 머신에 절대 기록되지 않습니다.
- 인수가 없으면
%USERPROFILE%\Desktop\report.json(CAPEsolo가 기록하는 위치)을 엽니다. 다른 보고서나 번들을 선택하려면 File > Open을 사용하십시오.
- 트리아지 탭: Overview(판정 카드 - 파일 해시, 탐지, 상위 시그니처, 구성, 개수, 그리고 캡처 중 손실된 항목이 있는지 여부), Capture(실행이 저장한 것과 저장하지 않은 것), Signatures(심각도순 정렬, 색상 표시, 프로세스별 증거 포함), Processes(프로세스별 메타데이터가 있는 프로세스 트리), Network(DNS/HTTP/Hosts/Domains/Flows), Payloads(yara 적중 및 문자열 포함), Yara(스캔된 모든 파일에 걸친 모든 규칙 적중, 메타데이터, 일치한 문자열 및 오프셋 포함), 그리고 IOCs(집계됨, Copy / Export CSV / Export text 포함).
- Search 상자(상단 바)는 시그니처, 네트워크, 페이로드, 구성, IOC 및 문자열 전반에서 값을 찾아 해당 탭으로 이동합니다.
- Raw JSON 탭은 트리아지 탭이 표시하지 않는 모든 항목에 대해 전체 트리를 유지합니다.
- 대용량 보고서를 처리합니다: 파일은 진행 표시줄과 함께 읽히고, 원시 트리는 지연 로드되며(확장 시 자식 로드), 세부 정보 창은 크기가 제한되어 수백 MB/GB 보고서에서도 응답성을 유지합니다. (GB 단위 보고서는 파싱에 여전히 수 GB의 RAM이 필요합니다 - Python의 JSON에 내재된 사항입니다.)
- CAPEsolo GUI의 팔레트와 일치하는 다크 및 라이트 테마. 기본적으로 Windows의 "앱 모드" 설정을 따르며(그 외에는 다크), 오른쪽 상단의 버튼으로 세션 동안 전환할 수 있고
--theme dark|light로 강제 지정할 수 있습니다. 메뉴 바와 네이티브 Open/오류 대화 상자는 Windows가 그리므로 라이트로 유지됩니다 - tkinter는 이를 테마화할 수 없습니다.
- tkinter가 필요합니다 - 표준 Windows/macOS Python에 포함되어 있으며, Linux에서는
python3-tk를 설치하십시오.
AI 분석 (선택 사항)
- 뷰어는 로드된 보고서에 대해 Claude를 실행할 수 있습니다: 증거 탭마다 전문가, 개요에 대한 수석 분석가의 판정, 그리고 대화형 질문 루프를 제공합니다. 이는 선택적이며 옵트인 방식입니다 - 뷰어는 여전히 필수 의존성이 없으며, 위의 모든 탭은 이 기능 없이도 작동합니다.
- 하나의 패키지와 키로 활성화할 수 있습니다:
pip install anthropic
set ANTHROPIC_API_KEY=sk-ant-... (또는 --api-key로 전달하거나 AI > Settings에서 입력)
- 패키지나 키가 없으면 AI 창에 그 사실이 표시되며 다른 것은 변경되지 않습니다.
- 사용 방법은 세 가지입니다:
- GUI - AI 탭에는 증거 탭마다 전문가(Signatures, Processes, Behavior, Network, JS Log, Payloads, Configs, Yara, Static, IOCs, Capture)와 Ask 창이 있습니다. "Analyze all"은 모든 전문가를 실행한 후 개요에 판정 카드를 작성합니다. 상단 바의 "Analyze tab"은 현재 보고 있는 탭의 전문가를 실행합니다.
- 원샷 -
python report_viewer.py bundle.zip --ask "is this a loader or the final stage?"
- 대화형 -
python report_viewer.py bundle.zip --chat, 또는 헤드리스로 결과를 출력하려면 --analyze all / --analyze Network
- 옵션:
--model (기본값 $ANTHROPIC_MODEL 또는 claude-opus-5), --effort (low..max), 데이터 외부 전송 확인을 건너뛰려면 --yes. 디스크에는 아무것도 기록되지 않습니다 - 키와 모델은 환경 또는 해당 세션에만 존재합니다.
- 전송되는 항목: 파일 이름과 해시, 시그니처 텍스트, 프로세스/레지스트리 활동, 네트워크 엔드포인트, 설정 필드 및 페이로드 문자열 - 상한이 적용된 선택 항목이며, 생략된 항목은 모델에 고지되고 창에 표시됩니다. 샘플과 페이로드 바이트는 절대 전송되지 않습니다 (보고서 번들에는 애초에 포함되어 있지 않습니다). 세션당 한 번 확인을 요청합니다.
- 비용: 전체 실행은 약 11회 호출입니다. 사례 다이제스트는 한 번 전송되어 캐시되므로, 이후 전문가들은 입력 가격의 약 10분의 1로 이를 다시 읽습니다. "Analyze all"은 시작 전에 토큰 및 달러 예상치를 표시하며, 상태 줄은 완료 후 실제 지출을 보고합니다.
- 답변은 보고서에 근거하며, 증거가 결론을 뒷받침하지 못할 때는 그 사실을 밝힙니다. 악성코드 콘텐츠가 간혹 모델의 안전 분류기를 작동시킬 수 있습니다. 요청에는 서버 측 폴백이 포함되며, 거부는 빈 창이 아닌 거부로 표시됩니다.
결과를 다른 머신으로 가져가기
- 시작 패널의 Zip Results는 어떤 아카이브를 작성할지 묻습니다:
- 보고서 번들 (
Desktop\capesolo_report_<timestamp>.zip) - report.json, capture.json, analysis.log 및 files.json. 샘플도 페이로드 바이트도 없으므로 워크스테이션으로 복사해도 안전합니다. tools/report_viewer.py로 직접 열 수 있으며(아래 참조), 뷰어는 아무것도 추출하지 않고 zip에서 보고서를 읽습니다.
- 전체 번들 (
Desktop\capesolo_analysis_<timestamp>.zip) - 전체 분석 디렉터리로, 깨끗한 VM에 복원하기 위한 것입니다. 라이브 악성코드가 포함되어 있으므로 그에 맞게 취급하십시오.
- 아직
report.json이 없으면 Zip Results가 먼저 생성을 제안합니다 - 이제 보고서와 HTML 보고서는 Desktop뿐 아니라 분석 디렉터리에도 작성되며, 이것이 두 번들 모두를 자체 완결적으로 만듭니다.
무엇이 캡처되었는지 파악하기
- 모든 분석은 결과 옆에
capture.json을 작성합니다: ResultServer로부터의 전송 횟수, files.json의 아티팩트 중 디스크에서 누락된 것, 일부만 도착했거나 upload_max_size에서 잘린 것, 분석기가 업로드하지 않은 파일(너무 크거나 비어 있음), 그리고 적용되었던 상한을 기록합니다.
- 손실된 모든 것은 로그에 기록되고 실행 종료 시 상태 바에 표시되며,
report.json의 capture 아래에 포함되고, tools/report_viewer.py의 Capture 탭에 렌더링됩니다. 일부만 저장된 페이로드는 온전한 것처럼 표시되지 않고 Payloads 목록에 플래그가 지정됩니다.