Гость NeoProgrammer Опубликовано 29 мая, 2016 Поделиться Опубликовано 29 мая, 2016 Здравствуйте! Я нашёл указатель, он оказался таким: Скрытый текст Мне надо написать трейнер на c#, по указателю найти адрес и с ним работать. Но этот указатель слишком большой и не вмещается в int, а необходим именно этот тип, потому что IntPtr, не работает с Int64 или long. Вот код, который использую: Скрытый текст private void button1_Click(object sender, EventArgs e) { GetProcess("game"); int address1337 = 0x7FF71E258080; //Указатель, здесь ошибка, адрес не вмещается в int. var offset = new Int32[] {0x488, 0x8, 0x58, 0x20, 0x30 }; // Смещение //Получение адреса, по указателю var addGlavn = Convert.ToString(ReadPointer(address1337, offset),16); // Читаем указатель, производим смещения, конвертируем в HEX } public void GetProcess(string name) // Получаем процесс { var pList = Process.GetProcesses(); if (pList.Length != 0) { foreach (var process in pList) { if (process.ProcessName.Equals(name)) { pID = process.Id; MessageBox.Show("Есть процесс"); return; } } } return; } public int ReadPointer(int addr, Int32[] of) { for (var i = 0; i < of.Length; i++) { addr = BitConverter.ToInt32(ReadMemory((IntPtr)addr, 4),0)+of[i]; } return addr; } public byte[] ReadMemory(IntPtr address, int size) { byte[] byffer = new byte[size]; IntPtr bytesRead = IntPtr.Zero; IntPtr handle = OpenProcess(ProcessAccessFlags.All, false, pID); ReadProcessMemory(handle, address, byffer, size, out bytesRead); CloseHandle(handle); return byffer; } Помогите пожалуйста, обрыскал интернет, ничего дельного не нашёл! Трейнер пишется основываясь на этих двух уроках: Скрытый текст Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 29 мая, 2016 Поделиться Опубликовано 29 мая, 2016 (изменено) Указатели да и любые адреса используют WORD(2 байта) ,DWORD(4 байта), либо QWORD/DWORD64(8 байт),. Можешь про типы почитать на msdn Изменено 29 мая, 2016 пользователем partoftheworlD 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость NeoProgrammer Опубликовано 29 мая, 2016 Поделиться Опубликовано 29 мая, 2016 (изменено) 1 час назад, partoftheworlD сказал: Указатели да и любые адреса используют WORD(2 байта) ,DWORD(4 байта), либо QWORD/DWORD64(8 байт),. Можешь про типы почитать на msdn А какую функцию использовать, чтобы прочитать адрес указатель такого вида? 7FF71E258080 Я пытался все преобразовать в Int64, но выдаёт такую ошибку Скрытый текст Изменено 29 мая, 2016 пользователем NeoProgrammer Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 30 мая, 2016 Поделиться Опубликовано 30 мая, 2016 16 час назад, NeoProgrammer сказал: Я пытался все преобразовать в Int64, но выдаёт такую ошибку а DWORD_PTR ? Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 30 мая, 2016 Поделиться Опубликовано 30 мая, 2016 (изменено) Зачем вообще преобразовывать? QWORD/DWORD64 это и есть 0х7FF71E258080 и var offset = new DWORD[] {0x488, 0x8, 0x58, 0x20, 0x30 }; На C++ с x64 приложениями ReadProcessMemory не хотел работать, пришлось использовать NtWow64QueryInformationProcess64, NtWow64ReadVirtualMemory64, чтобы получить процесс использовал IsWow64Process. Изменено 30 мая, 2016 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
Laziz Опубликовано 9 июня, 2016 Поделиться Опубликовано 9 июня, 2016 На C# есть еще "uint" может он поможет. Ссылка на комментарий Поделиться на другие сайты Поделиться
Prince Опубликовано 29 марта, 2017 Поделиться Опубликовано 29 марта, 2017 скопируй его, в CE открой "Редактор Памяти"(кнопка над списком твоих адресов), кликни правой кнопкой мыши по байтам зелёного цвета(нижняя часть экрана), перейти по адресу, вставляешь свой, жмёшь подтвердить в списке адресов твой будет самый верхний, копируешь его, добавляешь 0x и всё Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения