

🛠️ 一个强大的工具,用于将PE文件(EXE/DLL)转换为与位置无关的shellcode。
pip install pefile lznt1
python clematis.py -f <PE文件> -o <输出文件> [-g <true/false>] [-c <true/false>] [-p <参数>]
# 显示帮助信息
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程序转换为shellcode
- 🎯 在当前进程中直接执行
- ♻️ 执行完毕后自动释放内存
- 🚀 完全避免golang相关的内存问题
- 🔄 回收golang创建的所有线程
2024-12-27
2024-12-28
修复了潜在的 DOT NET 程序崩溃问题(可能不会发生)
添加了 IMAGE_DIRECTORY_ENTRY_EXCEPTION 的处理(x64)
更新API使用NTAPI

Clematis通过以下步骤将PE文件转换为shellcode:
flowchart TD
A[开始] --> B[读取PE文件]
B --> C[解析PE结构]
C --> D{是否有命令行参数?}
D -- 是 --> E[处理命令行参数]
D -- 否 --> F{是否启用压缩?}
E --> F
F -- 是 --> G[LZNT1压缩]
F -- 否 --> H{是否启用混淆?}
G --> H
H -- 是 --> I[执行混淆处理]
H -- 否 --> J[生成shellcode]
I --> J
J --> K[输出结果]
K --> L[结束]
欢迎提交Issues和Pull Requests!
| 描述 | 默认值 | 是否必需 |
|---|
| -f | --file | 需要转换的PE文件路径 | 是 | |
| -o | --output | 输出文件名 | 是 | |
| -g | --garble | 启用混淆 | true | 否 |
| -c | --compress | 启用压缩 | true | 否 |
| -p | --parameter | 传递给PE文件的执行参数 | 否 |
| 原API | 新API |
|---|
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