Tristam123
-
Постов
14 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные Tristam123
-
-
19 часов назад, Сашкоу сказал:
быть на 8 байт меньше
Это я поправил давно уже
19 часов назад, Сашкоу сказал:Вторая ошибка - надо "<=", так как индексация начинается с нуля
И это тоже поправил
после этого ошибка так и осталась
спасибо, что ответи
Думаю дальше
-
13 часов назад, Xipho сказал:
Вот как раз в пошаговой отладке и поймешь ))
Во время отладки понял
что если q = 22
i = 124376 то все работает
но если i > этого значение(что я привел выше), вылетает эта ошибка(которую я в теме указал)
Только вот я не понимаю, откуда там цифры такие берутся... -
6 минут назад, Xipho сказал:
Вот как раз в пошаговой отладке и поймешь ))
Спасибо
буду делать
-
1 минуту назад, Xipho сказал:
Или больше буфера. Тебе осталось выяснить в пошаговой отладке, почему так происходит.
Понял, спасибо
а как объяснить то, что бывает перезапустишь компьютер, игру или сам «чит» и все работает как надо?
-
1 час назад, Xipho сказал:
Ценник нужно выставлять не минимальный, а здравый.
Можно будет в ходе выполнения обговаривать цену и менять ее ?
-
Только что, Xipho сказал:
Супер! И какие твои предположения, почему это может происходить?
Может i + q > сигнатуры?
-
2 часа назад, Xipho сказал:
Отлично, а теперь подскажи, пожалуйста, в какой строчке возникает указанное тобой исключение?
if (buffer[i + q ] == signature[q] && signature[q] != -1)
1 час назад, JustHack сказал:Это максимальный адрес юзерспейса, а твой адрес никак не будет находиться вне диапазона
Я и не сказал, что он будет лежать вне этого диапазона
-
Название игры: Anomaly Zone
Версия игры: 1.4.4
Тип издания: CyberTime System
Тип запроса: Трейнер
Цена работы: 1000
Срок выполнения: 30.05.2021
Требуемые опции:
- esp чит
Дополнительная информация:
Прошу помочь в написании трейнера к игре, а именно esp.
Желательно на C# если есть такая возможность -
5 часов назад, Xipho сказал:
процитируй свой же код, но только расставь комментарии возле каждой строки с пояснениями
Спойлерpublic static int FindSignature() { int[] signature = { 0xCD, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF4, 0x3F, 0x01, 0x00, 0x00, 0x00, 0xA0, 0xB7, 0x1F, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x40 }; // наша сигнатура которую мы ищем(и ищем адрес это сигнатуры) long MaxAddress = 0x7fffffff; // максимальный адрес где может лежать сигнатура long address = 0; MEMORY_BASIC_INFORMATION m; var handle = OpenProcess(0x001F0FFF, false, GetProcessID()); // открываем хэндл m.BaseAddress = IntPtr.Zero; m.RegionSize = IntPtr.Zero; byte[] buffer; // объявление массива while (address <= MaxAddress) // начинаем цикл { VirtualQueryEx(handle, (IntPtr)address, out m, (uint)Marshal.SizeOf(typeof(MEMORY_BASIC_INFORMATION))); // скан региона памяти buffer = new byte[(uint)m.RegionSize]; int dammy = 0; ReadProcessMemory(handle, m.BaseAddress, buffer, (int)m.RegionSize, out dammy); // чтение памяти if (address == (long)m.BaseAddress + (long)m.RegionSize) break; int count = 0; address = (long)m.BaseAddress + (long)m.RegionSize; if (buffer.Length > signature.Length) // проверяем условие длина буфера больше длины сигнатуры { for (int i = 0; i < buffer.Length; i++) // для i++ пока < длины буфера { if (buffer[i] == signature[0]) // буфер равен сигнатуре { for (int q = 0; q < signature.Length; q++ ) // для q++ пока < длины сигнатуры { if (buffer[i + q ] == signature[q] && signature[q] != -1) // если буфер i + q равен сигнатуре[q] и сиганутра не равно -1 { count++; if (count == signature.Length) // если условие выполняется { Func func = new Func(); var result = i + (int)m.BaseAddress; // выводим адрес сигнатуры func.vamaddr += result; Func.addr = result; string some = result.ToString(); MessageBox.Show(result.ToString()); return i + (int)m.BaseAddress; } } else // не нашли сигнатуру { count = 0; // выводим 0 } } } } } } CloseHandle(handle); // закрываем хэндл return -1; // в инном случае возвращаем -1 }
-
10 часов назад, Xipho сказал:
Так и понимать. Если у тебя в массиве 3 элемента, а ты попробуешь взять из него 4-й, ты получишь как раз эту самую ошибку.
Теперь понял, спасибо.
просто как-то странно получается, бывает работает, а бывает не работает. С чем этом связано, ума не приложу
15 часов назад, JustHack сказал:Ты хочешь чему-то научиться или тебе просто нужно решение? Если первый вариант, то прокомментируй каждую строчку, что ты делаешь в своём коде.
Я понимаю как работает код и что он делает. Просто не могу побороть эту ошибку уже больше полугода. Вот и обратился за помощью
-
1 час назад, KRYPTOPUNK сказал:
Эта ошибка означает, что ты выходишь за границы массива где-то, как бы логично это не звучало.
Пройдись с отладчиком по этой функции и узнаешь, где проблема.а как это понимать? за границы массива ?
как тогда объяснить то, что если я перезагружу ПК, то все будет ок
-
Всем привет
При создании тренера столкнулся с такой проблемой как: "Индекс находился вне границ массива."
Данная ошибка появляется при поиске адреса при помощи структуры.
Помогите пожалуйста
Код приведу ниже
Кто сталкивался с такой проблемой, подскажите как решить ее.
Бывает срабатывает и адрес находит, и все работает как надо
А бывает так, что когда игра только запускается и я нажимаю "активировать" то ошибка не вылетает
Но если нажать "активировать" в главном меню(когда игра запустилась полностью), то вылетает ошибка которую я указал вышеактивировать - запускает FindSignature()
Спойлерpublic static int FindSignature() { int[] signature = { 0xCD, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF4, 0x3F, 0x01, 0x00, 0x00, 0x00, 0xA0, 0xB7, 0x1F, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x40 }; long MaxAddress = 0x7fffffff; long address = 0; MEMORY_BASIC_INFORMATION m; var handle = OpenProcess(0x001F0FFF, false, GetProcessID()); m.BaseAddress = IntPtr.Zero; m.RegionSize = IntPtr.Zero; byte[] buffer; while (address <= MaxAddress) { VirtualQueryEx(handle, (IntPtr)address, out m, (uint)Marshal.SizeOf(typeof(MEMORY_BASIC_INFORMATION))); buffer = new byte[(uint)m.RegionSize]; int dammy = 0; ReadProcessMemory(handle, m.BaseAddress, buffer, (int)m.RegionSize, out dammy); if (address == (long)m.BaseAddress + (long)m.RegionSize) break; int count = 0; address = (long)m.BaseAddress + (long)m.RegionSize; if (buffer.Length > signature.Length) { for (int i = 0; i < buffer.Length; i++) { if (buffer[i] == signature[0]) { for (int q = 0; q < signature.Length; q++ ) { if (buffer[i + q ] == signature[q] && signature[q] != -1) //&& signature[q] != 0 добавить в скобку выше если что-то не так { count++; if (count == signature.Length) { Func func = new Func(); var result = i + (int)m.BaseAddress; func.vamaddr += result; Func.addr = result; string some = result.ToString(); MessageBox.Show(result.ToString()); return i + (int)m.BaseAddress; } } else { count = 0; } } } } } } CloseHandle(handle); return -1; }
C# ошибка "Индекс находился вне границы массива"
in Высокоуровневое программирование
Опубликовано
Все проблему решил
Всем спасибо за помощь
Решение было таково: "последний проверяемый элемент должен быть равен длине буфера за вычетом размера сигнатуры"
Как и сказал Xipho.
Спасибо еще раз.