Перейти к содержанию
Авторизация  
PanCacke

[CS2D] Запись в переменную стороннего процесса.

Рекомендуемые сообщения

Здравствуйте! Сегодня столкнулся с проблемой, прочитал память процесса, значение на экран выводится, а вот изменятся не хочет, перелазил все по этой теме, но мне ничего из этого не помогло. Я буду рад любой помощи!

 

Вот мой код:

Спойлер

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

 

Изменено пользователем imaginary
Длинный код не под спойлером

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я конечно отвечу, хотя и тема не там, попробуй bufferSize установить адекватный, например float обычно 4 байта. И нужно передавать указатели.
2046754110_.png.c758e700133d7108d9d5d3db8a5f8c54.png

Тема передвинута в правильный раздел

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, PanCacke сказал:

Здравствуйте! Сегодня столкнулся с проблемой, прочитал память процесса, значение на экран выводится, а вот изменятся не хочет, перелазил все по этой теме, но мне ничего из этого не помогло. Я буду рад любой помощи!

 

попробуй передать во WriteProcessMemory все 5 аргументов(кажется на некоторых версиях винды из-за этого проблемы бывают). Также ты неправильный размер данных передаёшь, попробуй делать какой-нибудь sizeof().
А можно и я вопрос задам😀? Почему такой язык программирования выбран?

 

26 минут назад, imaginary сказал:

И нужно передавать указатели

в подобных языках нужно только с 5 аргументом изворачиваться, но это не точно.

Изменено пользователем youneuoy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
9 минут назад, youneuoy сказал:

все 5 аргументов

А там по твоему не 5 аргументов ? 🤭

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, imaginary сказал:

А там по твоему не 5 аргументов ? 🤭

пятый - ноль, при попытке разыменования ошибка может быть🤫

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что? Разыменования чего? 0 это тоже самое что NULL в C++, ошибка 299 partial copy error  означает что часть памяти не получилось прочитать, или записать, такое может быть при нарушении прав доступа, а вот тут - указания размера буфера огромного, оно пытается записать в память у которой нету прав на запись, или в не выделенную.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, imaginary сказал:

Что? Разыменования чего? 0 это тоже самое что NULL в C++, ошибка 299 partial copy error  означает что часть памяти не получилось прочитать, или записать

угу, я погуглил что это такое и написал про ноль на всякий случай. У меня были ошибки с этой(или другой подобной, не помню) функцией на win xp, там нуля быть не должно.

  

4 минуты назад, imaginary сказал:

а вот тут - указания размера буфера огромного, оно пытается записать в память у которой нету прав на запись, или в не выделенную.

ага

Изменено пользователем youneuoy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр
Авторизация  

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.