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

[Call of Duty Modern Warfare 2] - изменение скорости персонажа


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

Всем привет, играл я в замечательную игру и решил поломать её немного. Есть адрес с координатами игрока, есть адрес смещения, которое прибавляется к координатам (каждое по отдельности X, Y, Z). Можно ли найти каким-либо образом способ увеличить смещение, так как оно меняется при изменении направления (когда мышью двигаешь и игрок поворачивается, то есть если, например, координата X у игрока в момент движения уменьшается, - значит смещение имеет знак 'минус'), в адреса смещения пишут сразу несколько инструкций все fstp не вижу ни где fmul, который как-то может относится к статичным множителям, на который в теории может умножаться смещение. Важна работа именно со смещениями, а то если сделать на горячие клавиши изменение координат, то будет выглядеть как телепорт, а надо чтобы перемещение было быстрым.

Есть также в игре режимы ufo и noclip, в режиме ufo перемещение по координатам быстрое даже если менять угол направления (по моему мнению там используется какой-то множитель), Вот тоже самое хочется реализовать, кто может помочь?

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

  • Ответов 53
  • Создана
  • Последний ответ

Топ авторов темы

Популярные дни

16 минут назад, Sergey99 сказал:

координата X у игрока в момент движения уменьшается, - значит смещение имеет знак 'минус')

Это не коэффициент, а угол (обычно в игре это косинус угла от -1 до +1).
Коэффициент меняться не будет - смотри в структуре - обычно равно 1.

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

1 час назад, Sergey99 сказал:

а надо чтобы перемещение было быстрым.

Желательно иметь более точную формулировку. А то не понятно, тебе нужно быстрое перемещение или быстрая скорость передвижения?

Если особо не разбираешься во всяких трассировках, работе со стеком вызовов, то будет проще найти скорость передвижения.
Если шаришь, то бери координаты, ставь бряк на пишущую инструкцию и смотри откуда и как рассчитывается новое значение, по ходу реверса найдешь и множители и формулы, которые рассчитывают новое значение(используя скорость передвижения) 

 

 

1 час назад, Sergey99 сказал:

ufo

Делается за счет отключения записи координат и горячими клавишами создается перемещение по новым значениям с использованием оригинальных.

 

1 час назад, Sergey99 сказал:

noclip

Отключай коллизию. Берешь координаты, ставишь бряк на доступ и при столкновении с объектом смотришь какие новые инструкции появились.

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

Нужна именно быстрая скорость перемещения.

Можно будет сделать режим полёта только без прохождения сквозь стены + большая скорость.

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

2 минуты назад, Sergey99 сказал:

Если всё дело в скорости то по каким критериям искать, нужно бегать и отсеивать или есть константа?

Искать не получиться - константа.

Либо реверс, либо методом "научного тыка" в структуре.

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

Ну я уже натыкался :)

Тогда получается реверс, чтобы найти математическую функцию, которая отвечает за перемещение. Интересно будет ли там константа хранится как значение в адресе или же как часть инструкции ассемблера?

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

2 минуты назад, Sergey99 сказал:

Интересно будет ли там константа хранится как значение в адресе или же как часть инструкции ассемблера?

Инструкция должна получить каким то образом значение константы, поэтому обязательно будет обращение к адресу этой константы. 
Твоя задача как раз найти это обращение (инструкцию) реверсом.
Либо найдя адрес "научным тыком" в структуре, непосредственно получить это обращения, ставя бряк.

ЗЫ: глянь ТЫК

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

Проблема в том, в адрес координат пишут много (5 инструкций fstp и в адрес смещения тоже 5 инструкций). Придётся изучать их все как я понял?

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

И когда я говорил про константу, я имел ввиду такой вид записи, например, fmul [ebx+7C], 2. Эта двойка должна браться из какого-то адреса как я понял?

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

10 минут назад, Sergey99 сказал:

Придётся изучать их все как я понял?

 

Нет, только те которые чаще всех срабатывают. Логично же, что не может инструкция рассчитывающая скорость движения срабатывать 1 раз в секунду.

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

2 минуты назад, Sergey99 сказал:

 fmul [ebx+7C], 2.

Такого никогда не будет.:)

Но будет например такое  fmul [ebx+7C].
И вот в [ebx+7C] будет лежать искомая константа.

 

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

6 минут назад, partoftheworlD сказал:

 

Нет, только те которые чаще всех срабатывают. Логично же, что не может инструкция рассчитывающая скорость движения срабатывать 1 раз в секунду.

Ровно 5 срабатывают одинаковое количество раз при движении :)

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

ЗЫ: хотя может быть и так (инструкция из топика на который давал ссылку):

"Borderlands2.exe"+FBAC28: D9 81 10 03 00 00              -  fld dword ptr [ecx+00000310] // вот здесь константа
// ---------- DONE INJECTING  ----------
"Borderlands2.exe"+FBAC2E: D8 4D FC                       -  fmul dword ptr [ebp-04]      // а это скорость
Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, Garik66 сказал:

ЗЫ: хотя может быть и так (инструкция из топика на который давал ссылку):


"Borderlands2.exe"+FBAC28: D9 81 10 03 00 00              -  fld dword ptr [ecx+00000310] // вот здесь константа
// ---------- DONE INJECTING  ----------
"Borderlands2.exe"+FBAC2E: D8 4D FC                       -  fmul dword ptr [ebp-04]      // а это скорость

Ууу инъекция :) А я всё время пытался просто менять значения в адресах, не прибегая к инъекциям, так как это палевно в некоторых новых играх с системой защиты. Вот и в моём случае цель найти константу и поменять её в адресе, не прибегая к инъекциям.

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

1 минуту назад, Sergey99 сказал:

не прибегая к инъекциям.

Так при чем здесь инъекция - ты же найдешь нужный указатель и смещение и меняй пжлста.

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

Только что, Garik66 сказал:

Так при чем здесь инъекция - ты же найдешь нужный указатель и смещение и меняй пжлста.

Это да, просто кое-кто давно мне предлагал через инъекции менять константу, а мне ведь это не нужно было, но способ он действенный предложил, только вот думаю в новых играх это будет палевно :)

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

Если хочешь быструю скорость передвижения
Ищи int или float
По типу - Ходьба = 1
Зажал шифт, ищешь увеличившиеся значения и так по кругу
Потом уже пишешь скрипт

А с полетом можно делать изменения координат на c++ с биндом на определенные клавиши

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

3 минуты назад, roma91212 сказал:

Если хочешь быструю скорость передвижения
Ищи int или float
По типу - Ходьба = 1
Зажал шифт, ищешь увеличившиеся значения и так по кругу
Потом уже пишешь скрипт

А с полетом можно делать изменения координат на c++ с биндом на определенные клавиши

Зачем C++, есть же C# с импортом dll для работ с памятью :)

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

1 час назад, Garik66 сказал:

ЗЫ: хотя может быть и так (инструкция из топика на который давал ссылку):


"Borderlands2.exe"+FBAC28: D9 81 10 03 00 00              -  fld dword ptr [ecx+00000310] // вот здесь константа
// ---------- DONE INJECTING  ----------
"Borderlands2.exe"+FBAC2E: D8 4D FC                       -  fmul dword ptr [ebp-04]      // а это скорость

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

Это кусок кода, который работает именно с координатой X (не смещение, не углы, не коэффициенты):

fld dword ptr [esp+48]
fsub dword ptr [ebx]
fmulp st(1),st(0)
fadd dword ptr [ebx]
fstp dword ptr [ebx]

Вопросы у меня вызывает fmulp st(1), st(0), для чего же она здесь если не умножение на константу?

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

1 минуту назад, Sergey99 сказал:

нет, выше fst, судя по всему это начало работы с координатой

Тогда ещё выше.
Ладно понятно, Это смотреть лучше самому чем вопросы задавать. Но мне некогда

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

Только что, Garik66 сказал:

Тогда ещё выше.
Ладно понятно, Это смотреть лучше самому чем вопросы задавать. Но мне некогда

Если уж совсем выше то есть вот это: fld dword ptr [esp+70]. Через брейк узнал адрес, который был esp+70, но там опять быстро меняющееся значение, то ноль, то больше нуля 6-ти значное или даже больше.

Я так же нашёл статейку про взлом скорости, где игра Metro использовалась, проблема в том, что там ещё искали текстовые метки, но в CoD MW2, вряд ли они будут, к тому же консоль в игре отключена (злобные разработчики)

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


×
×
  • Создать...

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

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