weixin_49808768 2024-11-10 10:14 采纳率: 0%
浏览 2

Python关于writeprocessmemory函数不成功的问题。

使用python,调用writeprocessmemory函数,用管理员权限运行后,并没有实现内存写入的功能,错误代码998,请问一下,是哪里的问题?感谢!(地址address至少是可读的,可以读出内容)

import ctypes
from ctypes import wintypes

# 定义函数所需的参数类型和返回类型
OpenProcess = ctypes.windll.kernel32.OpenProcess
OpenProcess.argtypes = [wintypes.DWORD, wintypes.BOOL, wintypes.DWORD]
OpenProcess.restype = wintypes.HANDLE

CloseHandle = ctypes.windll.kernel32.CloseHandle
CloseHandle.argtypes = [wintypes.HANDLE]
CloseHandle.restype = wintypes.BOOL

WriteProcessMemory = ctypes.windll.kernel32.WriteProcessMemory
WriteProcessMemory.argtypes = [wintypes.HANDLE, wintypes.LPVOID, wintypes.LPCVOID, ctypes.c_size_t, ctypes.POINTER(ctypes.c_size_t)]
WriteProcessMemory.restype = wintypes.BOOL

# 调用OpenProcess函数
current_pid =1184 # 获取当前进程的PID(进程标识符)
PROCESS_ALL_ACCESS = 0x1F0FFF  # 所有访问权限
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, current_pid)

# 调用WriteProcessMemory函数
data_to_write = ctypes.c_int(1)  # 要写入的数据
target_address = 0x0D008889  # 目标地址
bytes_written = ctypes.c_size_t() # 创建一个缓冲区来接收写入的字节数
success = WriteProcessMemory(hProcess, target_address, ctypes.addressof(data_to_write), ctypes.sizeof(data_to_write), ctypes.byref(bytes_written))

#获取上一步的失败代码
error_code = ctypes.GetLastError()
print(error_code)

# 调用CloseHandle函数 
CloseHandle(hProcess)

#最后输出结果
if success:
    print("Successfully")
else:
    print("Failed")
  • 写回答

1条回答 默认 最新

  • 无疆76 2024-11-10 10:15
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从您的代码来看,我注意到以下几个可能的问题和解决方法:

    1. 错误代码检查: 您已经获取了错误代码(error_code),这是非常有用的信息。错误代码998通常表示调用进程没有足够的权限来执行请求的操作。确保您是以管理员权限运行Python脚本,并确保目标进程也是以管理员权限运行的。此外,检查您的用户账户控制(UAC)设置,确保它们不会阻止您的脚本获取必要的权限。
    2. 地址校验: 您使用的地址(target_address)必须是进程内的有效地址。请确保这个地址确实是目标进程中的有效地址,并且指向可以写入的内存位置。尝试使用工具(如Cheat Engine或OllyDbg)来确认地址的有效性。
    3. 数据类型和大小: 确保您要写入的数据类型(在这里是ctypes.c_int(1))与目标地址处的数据类型匹配。如果类型不匹配,可能会导致写入失败。另外,检查写入的大小(ctypes.sizeof(data_to_write))是否正确。
    4. 权限和访问级别: 您已经使用了PROCESS_ALL_ACCESS作为访问权限,这通常足够进行内存写入操作。然而,某些情况下可能需要更具体的权限设置。尝试使用更精细的权限控制(例如只读写内存)。
    5. 目标进程的状态: 确保目标进程在您的脚本尝试写入时处于运行状态。如果目标进程已经关闭或崩溃,写入操作会失败。
    6. 反病毒/安全软件的干扰: 有些安全软件可能会阻止对内存的直接写入操作。尝试暂时禁用安全软件以测试是否是这个问题。

    如果以上建议都不能解决问题,您可能需要更深入地调试您的代码和操作系统环境。考虑使用调试工具来检查内存地址、进程状态和权限设置等。此外,查看Python和Windows API的文档,确保您正确使用了函数和参数。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月10日

悬赏问题

  • ¥15 zigbee终端设备入网失败
  • ¥15 金融监管系统怎么对7+4机构进行监管的
  • ¥15 硬件IIC从模式的数据发送,中断数据的接收,不能用HAL库(按照时序图)
  • ¥20 QAxWidget上显示一个word文档后,如何直接在该QAxWidget上修改和保存word文档
  • ¥15 Simulink仿真报错,请问如何解决
  • ¥20 宝塔面板无法添加Node项目,一直处于正在添加脚本页面
  • ¥50 Dkeil5 CT107D单片机的程序编写
  • ¥30 Ubuntu20.04中PVN3D复现过程交叉编译问题
  • ¥60 不懂得怎么运行下载来的代码
  • ¥15 CST导出3D模型图为什么和软件显示不一样?