Поиск анимационной функции игрока в игре


1

В настоящее время я работаю над небольшим многопользовательским изменением для старой игры с 2001 года. Сейчас я могу удаленно перемещать плеер по его координатам X, Y и Z. I найденный путем обращения вспять. Но я не знаю, как добраться до анимационной функции игрока. Как начать с этого момента? При разборке следует искать что-то вроде состояния, которое установлено (PlayerRun, PlayerTurnLeft и т. Д.), Или я должен попытаться отследить, где установлены координаты?

Я немного застрял и не знаю, как начать с этого момента. Я работаю с CheatEngine и OllyDBG.

EDIT: Наконец-то я нашел значение состояния анимации в памяти с помощью Cheat Engine. Изменение его на «прыжок» -анимация отлично работает, но не для «движущейся» -анимации. Вероятно, игра проверяет, чтобы пользователь нажал клавишу, которая перемещает игрока вперед. Во всяком случае, я взглянул на разборку, которая записывает состояние анимации. Я играл с некоторыми прыжками и сравнениями, и в некоторых случаях анимация не будет отображаться, что означает, что я в основном в правильной функции. На данный момент я немного застрял, потому что не знаю, как узнать правильную функцию (есть несколько) и ее аргументы.

3

Вы ищете функцию для изменения локально на клиенте или пытаетесь идентифицировать функцию, которая будет обрабатывать исходящие данные координат, чтобы удаленно перемещать плеер? Я возьму на себя первый вариант для этого ответа. Я также буду придерживаться 100% Cheat Engine. Это не является всеобъемлющим каким-либо образом, но оно должно заставить вас двигаться в правильном направлении с точки зрения динамического анализа.

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

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

После просмотра этой инструкции в дизассемблере вы будете в какой-то рутине, которая предположительно связана с данными координат. Это непосредственно функция, которую вы интересуете? Здесь вам придется потратить некоторое время, чтобы разобраться, чтобы узнать.

Несколько вещей, которые могли бы помочь вам на этом пути являются:

  1. Перечислите DLLs: В окне просмотра памяти, нажмите View -> Перечислите библиотеки DLL и символы. Любая информация, которую CE может почерпнуть по именам функций, будет заполнена там, чтобы вы могли искать имена, которые могут вас заинтересовать. Видео, демонстрирующее это, можно просмотреть here.

  2. Рассеките Код: В окне просмотра памяти, нажмите Tools -> Рассеките Код. Это даст вам много дополнительной информации, где это применимо, как вы обратные, как, какие звонки вызова подпрограммы вы можете найти себя в и т.д.

Вы можете также использовать CE разберет/трассировку, чтобы найти аргументы, которые прошли к функциям.Мне нравится начинать с беглого представления о вызываемых функциях/методах, которые привели к тому, на котором я нахожусь. Для этого в окне «Разрыв и трассировка» установите флажок «Шаг вместо одного шага». Мне также нравится проверять «Сохранить снимки стека», чтобы я мог потенциально выделить некоторые вещи.

Наконец, вы можете захотеть использовать Ultimap или Ultimap 2, найденные в окне «Просмотр памяти» в разделе «Инструменты». Они позволяют вам регистрировать вызовы функций и отфильтровывать все те из них, которые вы знаете, а не те функции, которые вам интересны. Два видеообмена Ultimap можно посмотреть here и here. Если ваша цель 32-бит, то вы можете использовать удивительный маленький инструмент под названием CDA: Code Dynamic Analysis (видео-учебник here), чтобы сделать то же самое, как Ultimap, но в другом порядке (по временной шкале) и без добавления головной боли Ultimap, требующий DBVM для работы (Ultimap 2 не требует DBVM, но требует правильного процессора, поскольку он использует Intel Processor Trace).

+1

Удивительный, спасибо за подробный ответ! Это именно то, что я искал! На ваш вопрос; Игра, в которую я хочу добавить мультиплеер, имеет только одиночный проигрыватель, поэтому мне нужно полностью найти функцию анимации. Я уже взломал все форматы файлов игры, такие как модели, текстуры и файлы анимации. Из анимации я знаю, что есть анимация ключевых кадров. 28 дек. 172017-12-28 16:40:23