PanCacke Опубликовано 6 сентября, 2020 Поделиться Опубликовано 6 сентября, 2020 (изменено) Здравствуйте! Сегодня столкнулся с проблемой, прочитал память процесса, значение на экран выводится, а вот изменятся не хочет, перелазил все по этой теме, но мне ничего из этого не помогло. Я буду рад любой помощи! Вот мой код: Спойлер from ctypes import * import win32process import win32gui import ctypes def ReadProcessMemory(self, hProcess, lpBaseAddress): try: lpBaseAddress = lpBaseAddress ReadBuffer = ctypes.c_float() lpBuffer = ctypes.byref(ReadBuffer) nSize = ctypes.sizeof(ReadBuffer) lpNumberOfBytesRead = ctypes.c_ulong(0) ctypes.windll.kernel32.ReadProcessMemory( hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead) return ReadBuffer.value except (BufferError, ValueError, TypeError): self.CloseHandle(hProcess) e = 'Handle Closed, Error', hProcess, self.GetLastError() return e #Объявление переменных WriteProcessMemory = windll.kernel32.WriteProcessMemory #Запись OpenProcess = windll.kernel32.OpenProcess #Открыть процесс ReadProcessMemory1 = windll.kernel32.ReadProcessMemory #Чтение процесса PROCESS_ALL_ACCESS = 0x1F0FFF AdressPlayer = 0x050278D4 buffer = c_float(353.9980164) bufferSize = (1000) bytesread = c_char() HWND = win32gui.FindWindow(None, "Unreal Software's CS2D") #Найти процесс с указанным именем окна GameIdProcess = win32process.GetWindowThreadProcessId(HWND) #PID процесса игры HandleProcess = OpenProcess(PROCESS_ALL_ACCESS, False, GameIdProcess[1]) #Открыть хендл процесса = WriteProcessMemory(HandleProcess, AdressPlayer, buffer, bufferSize, 0) #Записать значение ProcessRead = ReadProcessMemory(HandleProcess, HandleProcess, AdressPlayer) #Чтение памяти процесса print('Player address: ', proseccadress) if Result == 1: print('Status: ''Process write!') else: print('Status: ''Falied') print('Number error:', GetLastError()) Вывод: Player address: 947.6382446289062 Status: Falied Number error: 299 Изменено 6 сентября, 2020 пользователем imaginary Длинный код не под спойлером Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 6 сентября, 2020 Поделиться Опубликовано 6 сентября, 2020 Я конечно отвечу, хотя и тема не там, попробуй bufferSize установить адекватный, например float обычно 4 байта. И нужно передавать указатели.Тема передвинута в правильный раздел Ссылка на комментарий Поделиться на другие сайты Поделиться
youneuoy Опубликовано 6 сентября, 2020 Поделиться Опубликовано 6 сентября, 2020 (изменено) 1 час назад, PanCacke сказал: Здравствуйте! Сегодня столкнулся с проблемой, прочитал память процесса, значение на экран выводится, а вот изменятся не хочет, перелазил все по этой теме, но мне ничего из этого не помогло. Я буду рад любой помощи! попробуй передать во WriteProcessMemory все 5 аргументов(кажется на некоторых версиях винды из-за этого проблемы бывают). Также ты неправильный размер данных передаёшь, попробуй делать какой-нибудь sizeof(). А можно и я вопрос задам?? Почему такой язык программирования выбран? 26 минут назад, imaginary сказал: И нужно передавать указатели в подобных языках нужно только с 5 аргументом изворачиваться, но это не точно. Изменено 6 сентября, 2020 пользователем youneuoy 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 6 сентября, 2020 Поделиться Опубликовано 6 сентября, 2020 9 минут назад, youneuoy сказал: все 5 аргументов А там по твоему не 5 аргументов ? ? Ссылка на комментарий Поделиться на другие сайты Поделиться
youneuoy Опубликовано 6 сентября, 2020 Поделиться Опубликовано 6 сентября, 2020 Только что, imaginary сказал: А там по твоему не 5 аргументов ? ? пятый - ноль, при попытке разыменования ошибка может быть? Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 6 сентября, 2020 Поделиться Опубликовано 6 сентября, 2020 Что? Разыменования чего? 0 это тоже самое что NULL в C++, ошибка 299 partial copy error означает что часть памяти не получилось прочитать, или записать, такое может быть при нарушении прав доступа, а вот тут - указания размера буфера огромного, оно пытается записать в память у которой нету прав на запись, или в не выделенную. Ссылка на комментарий Поделиться на другие сайты Поделиться
youneuoy Опубликовано 6 сентября, 2020 Поделиться Опубликовано 6 сентября, 2020 (изменено) 3 минуты назад, imaginary сказал: Что? Разыменования чего? 0 это тоже самое что NULL в C++, ошибка 299 partial copy error означает что часть памяти не получилось прочитать, или записать угу, я погуглил что это такое и написал про ноль на всякий случай. У меня были ошибки с этой(или другой подобной, не помню) функцией на win xp, там нуля быть не должно. 4 минуты назад, imaginary сказал: а вот тут - указания размера буфера огромного, оно пытается записать в память у которой нету прав на запись, или в не выделенную. ага Изменено 6 сентября, 2020 пользователем youneuoy Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения