Is there any good and easy-to-use module built in Python for editing memory?
Asked Answered
D

1

7

Is there any good and easy-to-use module built in Python for editing memory? Or is there any module like this at all?

What I'm looking for is a way to attach to a process and read from/write to it. Much like how Cheat Engine works. Here's a example of how it works in C++.

Deem answered 18/8, 2012 at 15:56 Comment(3)
What do you mean by memory editing? Whose memory, what kind of memory, and in which ways?Tedie
You might be able to do it using the ctypes module. Specifically, with the ctypes.from_address() function.Molal
#8251125Alper
D
9

Took me a while to find a way of doing this but here's what I came up with!

from ctypes import *
from ctypes.wintypes import *

pid = 0 #the pid of the process, aquired earlier by hand

address = 0x0000 #where to read from while in the memory

OpenProcess = windll.kernel32.OpenProcess
ReadProcessMemory = windll.kernel32.ReadProcessMemory
CloseHandle = windll.kernel32.CloseHandle


PROCESS_ALL_ACCESS = 0x1F0FFF

datadummy = b'.'*200
buffer = c_char_p(datadummy)
bufferSize = len(buffer.value)
bytesRead = c_ulong(0)

processHandle = OpenProcess(PROCESS_ALL_ACCESS, False, int(PID))

ReadProcessMemory(processHandle, address, buffer, bufferSize, byref(bytesRead))

CloseHandle(processHandle)

And to write to the memory I would just add WriteProcessMemory = windll.kernel32.WriteProcessMemory and then call it

Deem answered 25/12, 2012 at 13:17 Comment(2)
when i run print(readprocessmemory(...)) it prints 0, i think i should change the datadummy = b'.'*200 buffer = c_char_p(datadummy) bufferSize = len(buffer.value) bytesRead = c_ulong(0) but i have no idea with what..Resupine
@Resupine ReadProcessMemory writes to the buffer 'buffer' and the returned value is the error code (0 = no error).Deem

© 2022 - 2024 — McMap. All rights reserved.