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

Лидеры

  1. roma912

    roma912

    Пользователи+


    • Баллы

      2

    • Постов

      223


  2. partoftheworlD

    partoftheworlD

    Пользователи+


    • Баллы

      1

    • Постов

      2 687


Популярный контент

Показан контент с высокой репутацией 19.06.2019 во всех областях

  1. Сегодня рассмотрим старую, но все еще актуальную ммо под названием Perfect World Берем конечно же не актуальную версию официального клиента, а пиратский сервер с его старенькой версией 1.5.3 (Summer PW) Официальная версия 1.6+ На данном пвп сервере изменены некоторые полеты для персонажа, введены некоторые, так называемые "рисованные" вещи которые довольно плохо влияют на баланс сервера Да к тому же сервер заточен еще и под донат, т.к статы вещей могут быть рандомными (Классно...) Как раз 4 стата и считаются рандомными, выпадают с некоторым шансом из общего пула. Ну и начнем собственно, посмотрим что можно сделать в этой игре интересного Начнем копать от локального игрока Ищем его указатель. Это довольно просто, не возникает никаких трудностей Указатель имеет всего одно смещение по типу *(LocalPlayer*) + 0x4 И собственно так мы вышли на структуру персонажа Далее нашли оффсеты до координат и прочего. Самое интересное оказалось то, что можно изменить скорость персонажа прямо с клиента, а сервер будет воспринимать это как действительную скорость персонажа Обычная скорость игроков на сервере порядка 5-6 м/с в зависимости от класса персонажа, довольно обычная расстановка в ммо играх Изменив скорость персонажа с клиента у сервера не возникло вопросов, а легально ли это и просто съело это. Путем проб и ошибок я подобрал значение скорости [м/с] которое допустимо записью в адрес. Это 15 м/с Скорость 15 м/с считается максимальной скоростью передвижения персонажа на сервере (Когда мы передвигаемся пешочком) Но скорости в 15 м/с ведь мало , без каких либо бафов на ускорение и пр. Поэтому пробуем увеличить до 20 м/с простой записью и персонажа начинает откидывать назад при перемещении Тут у меня есть предположение исходя из пошаговой отладки, что переходе через порог допустимого значения, сервер начинает сбрасывать скорость персонажа до 5-6 м/с опять же в зависимости от класса Но на сервере есть всякие плюшки на ускорение персонажа, этим мы и воспользуемся Установлено что максимальная скорость без бафов 5-6 м/с. С бафами 15-20 м/с Опять же путем проб и ошибок было выяснено что можно преодолеть эти 15 м/с А преодолеть их можно путем наложения бафа ускорения на персонажа, которое работает примерно по такому принципу curSpeed = (15.0*2) Значит мы можем это легко использовать и нас не будет откидывать. Звучит неплохо Делаем бинд на запись значения в адрес скорости. Пусть это будет 30 м/с, включаем баф на ускорение и радуемся скорости в 30 м/с без каких-либо откидываний назад Правда такое будет работать только пока на нас весит баф на ускорение, т.е ровно 15 сек А после окончания действия бафа нам придется довольствоваться скоростью в 15 м/с, но все равно это скорость останется постоянной и уже превышает скорость обычных игроков примерно в 2-3 раза Вопрос остается в том, как же обойти или сделать так, чтобы значение подстраивалось в нужное когда на нас висит нужный баф Делается довольно просто, путем чтения ID бафа на ускорение и его проверки на существование Необходимо найти какой-то список бафов и после читать его каждые допустим 20 мс А при нужном ID бафа просто менять значение скорости персонажа. Все довольно примитивно Выйти на массив бафов нам поможет счетчик кол-ва бафов персонажа, который должен быть где-то в памяти игры *Стандартные процедуры в СЕ. 1-2-3-4 бафа, сканируем, потом находим указатель на этот счетчик* И в итоге оказывается что этот счетчик лежит прямо в структуре персонажа, хотя мб и логично В некоторых играх может быть и иначе Выше над счетчиком и лежит наш список бафов, смещение между бафами ровно в 0x12 Узнаем наш ID ускорения и запоминаем Остается теперь написать программу которая поможет нам делать все манипуляции с памятью Запускаем, проверяем
    2 балла
  2. movzx преобразует операнд без знака в эквивалентный ему операнд без знака большей размерности. Для этого содержимое операнда источника, начиная с его младших разрядов, записывается в операнд приемник. Старшие разряды операнда приемника заполняются нулем. Потому что стоит разобраться с настройками и уровнями сканирования Конечно, поэтому чтобы наверняка иметь правильный указатель, можно комбинировать ручной поиск и автоматический(найти пару уровней руками, а после сказать сканеру, чтобы он искал все указатели заканчивающиеся на эти 2 уровня)
    1 балл
×
×
  • Создать...

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

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