
PE to shellcode

🛠️ PE 파일(EXE/DLL)을 위치 독립적(position-independent) 셸코드로 변환하는 강력한 도구입니다.
pip install pefile lznt1
python clematis.py -f <PE_file> -o <output_file> [-g <true/false>] [-c <true/false>] [-p <parameters>]
# 도움말 정보 표시
python clematis.py -h
# 기본 사용법
python clematis.py -f target.exe -o output.bin
# 난독화 및 압축 비활성화
python clematis.py -f target.exe -o output.bin -g false -c false
# 대상 프로그램에 인자 전달
python clematis.py -f target.exe -o output.bin -p arg1 arg2
python clematis.py -f target.exe -o output.bin -p "arg1 arg2"
- 🛡️ 프로세스 인젝션 불가 (AV/EDR/XDR 차단)
- 🔄 현재 프로세스에서 golang 프로그램을 실행하면 블로킹이 발생할 수 있음
- 💾 golang 프로그램 실행 후 메모리 누수가 발생할 수 있음
- ⚠️ golang이 생성한 스레드는 해제할 수 없음!
- ✨ golang 프로그램을 셸코드로 변환
- 🎯 현재 프로세스에서 직접 실행
- ♻️ 실행 후 메모리 자동 해제
- 🚀 golang 관련 메모리 문제 완전 회피
- 🔄 golang이 생성한 모든 스레드 회수
2024-12-27
2024-12-28
잠재적인 DOT NET 프로그램 충돌 수정 (발생하지 않을 수 있음)
IMAGE_DIRECTORY_ENTRY_EXCEPTION 처리 추가 ( x64 )
API를 NTAPI로 업데이트

Clematis는 다음 단계를 통해 PE 파일을 셸코드로 변환합니다:
flowchart TD
A[START] --> B[Read PE file]
B --> C[Parse PE structure]
C --> D{Is there a command line argument?}
D -- TRUE --> E[Process command line arguments]
D -- FALSE --> F{Enable compression?}
E --> F
F -- TRUE --> G[LZNT1 compression]
F -- FALSE --> H{Enable obfuscation?}
G --> H
H -- TRUE --> I[Execute obfuscation processing]
H -- FALSE --> J[Generate shellcode]
I --> J
J --> K[Output result]
K --> L[END]
이슈와 Pull Request를 환영합니다!
| desc | default | required |
|---|
| -f | --file | 변환할 PE 파일 경로 | true | |
| -o | --output | 출력 파일명 | true | |
| -g | --garble | 난독화 활성화 | true | false |
| -c | --compress | 압축 활성화 | true | false |
| -p | --parameter | PE 파일에 전달할 실행 파라미터 | false |
| before | now |
|---|
VirtualAlloc | NtAllocateVirtualMemory |
VirtualProtect | NtProtectVirtualMemory |
VirtualFree | NtFreeVirtualMemory |
LoadLibrary | LdrLoadDll |
GetProcAddress | LdrGetProcedureAddress |
WaitForMultipleObjects | NtWaitForMultipleObjects |
CreateEvent | NtCreateEvent |
CloseHandle | NtClose |
SignalObjectAndWait | NtSignalAndWaitForSingleObject |
TerminateThread | NtTerminateThread |
SuspendThread | NtSuspendThread |
OpenThread | NtOpenThread |
ResumeThread | NtResumeThread |
GetContextThread | NtGetContextThread |
SetContextThread | NtSetContextThread |
| ... |
2025-1-1