Trial4eg Опубликовано 29 апреля, 2014 Поделиться Опубликовано 29 апреля, 2014 2 суток сижу над следующей проблемой, не получается организовать запись своего значения в память.Имеется (пример):Textbox.text="50000"; //значение денег который я получил из игры//Я хочу ввести свое значение, допустим 250000Textbox.text="250000"; //ввели значение через формуКак теперь это значение перевести в hex и записать в массив byte[], для последующей записи в память через WriteProcessMemory? Ссылка на комментарий Поделиться на другие сайты Поделиться
DenkA003 Опубликовано 30 апреля, 2014 Поделиться Опубликовано 30 апреля, 2014 м я так понял язык С# ? сорь если бы писал на Delphi помог , а так извеняй )) Ссылка на комментарий Поделиться на другие сайты Поделиться
Laziz Опубликовано 30 апреля, 2014 Поделиться Опубликовано 30 апреля, 2014 2 суток сижу над следующей проблемой, не получается организовать запись своего значения в память.Имеется (пример):Textbox.text="50000"; //значение денег который я получил из игры//Я хочу ввести свое значение, допустим 250000Textbox.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); } Ссылка на комментарий Поделиться на другие сайты Поделиться
Trial4eg Опубликовано 3 мая, 2014 Автор Поделиться Опубликовано 3 мая, 2014 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 - выдает отрицательные значения, Как исправить? Ссылка на комментарий Поделиться на другие сайты Поделиться
Laziz Опубликовано 4 мая, 2014 Поделиться Опубликовано 4 мая, 2014 Как я понял, значения 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 - выдает отрицательные значения, Как исправить?а тут не совсем понял вопрос. подозреваю, тебе надо переконвертировать на нужный тип и все. Ссылка на комментарий Поделиться на другие сайты Поделиться
Trial4eg Опубликовано 4 мая, 2014 Автор Поделиться Опубликовано 4 мая, 2014 (изменено) Так во что нужно конвертировать?Значение race в памяти от 0 до 4 Изменено 4 мая, 2014 пользователем Trial4eg Ссылка на комментарий Поделиться на другие сайты Поделиться
Laziz Опубликовано 4 мая, 2014 Поделиться Опубликовано 4 мая, 2014 Так во что нужно конвертировать?Значение race в памяти от 0 до 4так внятно объясни. Что искал?, через СЕ искал?, какой тип был когда искал?, что за от 0 до 4? Ссылка на комментарий Поделиться на другие сайты Поделиться
Trial4eg Опубликовано 4 мая, 2014 Автор Поделиться Опубликовано 4 мая, 2014 Все значения заранее искал через CE.искал значения за какую расу играю.Получил тип: byte А значения расы меняется от 0 до 4 (в игре 5 рас) Ссылка на комментарий Поделиться на другие сайты Поделиться
Laziz Опубликовано 5 мая, 2014 Поделиться Опубликовано 5 мая, 2014 Все значения заранее искал через CE.искал значения за какую расу играю.Получил тип: byte А значения расы меняется от 0 до 4 (в игре 5 рас)если тип 1-байт то конвертировать не надо. Скорее всего не тот адрес читаешь Ссылка на комментарий Поделиться на другие сайты Поделиться
Trial4eg Опубликовано 5 мая, 2014 Автор Поделиться Опубликовано 5 мая, 2014 Спасибо, схитрил.В метод ReadByty добавил условия if:else if (Tip_read=="race") { BaseAddres_race = baseAddress; result = buffer[0]; }Тему можно закрывать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения