Перейти к содержанию

Записываем свои значения в память процесса


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

2 суток сижу над следующей проблемой, не получается организовать запись своего значения в память.

Имеется (пример):


Textbox.text="50000"; //значение денег который я получил из игры

//Я хочу ввести свое значение, допустим 250000

Textbox.text="250000"; //ввели значение через форму

Как теперь это значение перевести в hex и записать в массив byte[], для последующей записи в память через WriteProcessMemory?

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

2 суток сижу над следующей проблемой, не получается организовать запись своего значения в память.

Имеется (пример):


Textbox.text="50000"; //значение денег который я получил из игры

//Я хочу ввести свое значение, допустим 250000

Textbox.text="250000"; //ввели значение через форму

Как теперь это значение перевести в hex и записать в массив byte[], для последующей записи в память через WriteProcessMemory?

из своих кодов взял, думаю разберешься


if (comboBox1.Text == "4 Байт")
{
Int32 int32Z = Int32.Parse(writeString);
byte[] write = BitConverter.GetBytes(int32Z);
writeMetod(write);
}
if (comboBox1.Text == "1 Байт")
{
Int16 intZ = Int16.Parse(writeString);
byte[] write = BitConverter.GetBytes(intZ);
writeMetod(write);
}
if (comboBox1.Text == "2 Байт")
{
short intZ = short.Parse(writeString);
byte[] write = BitConverter.GetBytes(intZ);
writeMetod(write);
}
if (comboBox1.Text == "8 Байт")
{
Int64 intZ = Int64.Parse(writeString);
byte[] write = BitConverter.GetBytes(intZ);
writeMetod(write);
}
if (comboBox1.Text == "Float")
{
float intZ = float.Parse(writeString);
byte[] write = BitConverter.GetBytes(intZ);
writeMetod(write);
}
if (comboBox1.Text == "Double")
{
double intZ = double.Parse(writeString);
byte[] write = BitConverter.GetBytes(intZ);
writeMetod(write);
}

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

Laziz

Спасибо, большая часть интерфейса на трейнере настроил и работает.

Возник вопрос по поводу метода чтения значений:


public int ReadBytes(int baseAddress, int[] offsets, int size)
{
if (pID != 0 && baseAddress !=0 && offsets.Length !=0)
{
byte[] buffer = new byte[4];
int bytesread;
IntPtr handle;
handle = OpenProcess(0x001F0FFF, false, pID);
//int error = Marshal.GetLastWin32Error();
if (handle != IntPtr.Zero)
{
ReadProcessMemory(handle, (IntPtr)baseAddress, buffer, size, out bytesread);
for (var i = 0; i < offsets.Length; i++)
{
baseAddress = BitConverter.ToInt32(buffer, 0);
baseAddress += offsets[i];
ReadProcessMemory(handle, (IntPtr)baseAddress, buffer, size, out bytesread);
}
result = BitConverter.ToInt32(buffer, 0);
CloseHandle(handle);
return BitConverter.ToInt32(buffer, 0);
}
}
return 0;
}

Как я понял, значения size отвечает за тип значения который мы читаем.


//exp - 4 byte
address = 0x00800150;
offsets = new int[] { 0x38, 0x4, 0x0, 0x3a4 };
size = 4;
ReadBytes(address, offsets, size);
exp.Text = Convert.ToString(result);

//race - 1 byte
address = 0x00800150;
offsets = new int[] { 0x38, 0x4, 0x0, 0x11 };
size = 1;
ReadBytes(address, offsets, size);

exp - читает правильно

race - выдает отрицательные значения, Как исправить?

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

Как я понял, значения size отвечает за тип значения который мы читаем.

size отвечает за количество байтов который надо читать. К примеру: если на CheatEngine`е посмотреть в память, "4 байт" и "float" обе четыре байта занимает в памяти.


//exp - 4 byte
address = 0x00800150;
offsets = new int[] { 0x38, 0x4, 0x0, 0x3a4 };
size = 4;
ReadBytes(address, offsets, size);
exp.Text = Convert.ToString(result);

//race - 1 byte
address = 0x00800150;
offsets = new int[] { 0x38, 0x4, 0x0, 0x11 };
size = 1;
ReadBytes(address, offsets, size);

exp - читает правильно

race - выдает отрицательные значения, Как исправить?

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

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

Так во что нужно конвертировать?

Значение race в памяти от 0 до 4

так внятно объясни. Что искал?, через СЕ искал?, какой тип был когда искал?, что за от 0 до 4?

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

Все значения заранее искал через CE.

искал значения за какую расу играю.

Получил тип: byte

А значения расы меняется от 0 до 4 (в игре 5 рас)

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

Все значения заранее искал через CE.

искал значения за какую расу играю.

Получил тип: byte

А значения расы меняется от 0 до 4 (в игре 5 рас)

если тип 1-байт то конвертировать не надо. Скорее всего не тот адрес читаешь

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

Спасибо, схитрил.

В метод ReadByty добавил условия if:


else if (Tip_read=="race")
{
BaseAddres_race = baseAddress;
result = buffer[0];
}

Тему можно закрывать. ^_^

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

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...

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

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