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

[Subnautica] Вопросы по бессмертию.


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

Всем доброго времени суток! В очередной раз прошу совета. Говорю сразу: я все еще не ушел от новичка в гейм-хакинге, поэтому за возможные глупые и абсурдные ошибки прошу прощения. 

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

Спойлер

label(code)
label(return)
label(gmp)

newmem:
  movss xmm5,[gmp]
  jmp code
code:
  movss [r15+58],xmm5
  jmp return
gmp:
  dd (float)100
GM_Player:
  jmp newmem
  nop

 

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

Изначально хотел задать вопрос по отделению своих от чужих. Пытался делать фильтр свой/чужой как в видео на канале. Но эта идея не увенчалась успехом.

Потом посмотрел способ Staple Intersection. Но найдя экранное значение, которое кстати оказался типа integer, сделал несколько попыток инъекции кода, но скрипт не запускался.

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

Спойлер

tVpQobm9nPE.jpgzRnKv7pr_0c.jpg

На скринах, где инструкции у которых count 2 это я первый раз получил урон, где count 1 второй раз. Возможно, что я активировал тот скрипт, о котором писал выше (если честно моя дурья башка забыла был он включен или нет) и поэтому срабатывали другие инструкции, с другими регистрами?

В общем, вопросы:

1. Объясните, пожалуйста, как такое может быть, что я показал на скринах? Почему при уроне во второй раз на адрес здоровья обращались другие, но вроде как идентичные инструкции?

2. Может ли быть такое, что истинное значение здоровья и экранное имеют разный тип (float и  int)?

3. Возможно ли, что я нашел не истинное значение здоровья, т.к. breakpoint на запись на него не срабатывал? (Хотя при изменении этого значения менялось и экранное и в самой игре собственно здоровье реагировало).

Ну и просто посоветуйте, если это конечно возможно в моем тугом случае, как поступить в данной ситуации, какие я ошибки допустил, как можно отделить "своего" от "чужого" ну и все в это духе. Заранее спасибо!

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

2 часа назад, Andymit сказал:

1. Объясните, пожалуйста, как такое может быть, что я показал на скринах? Почему при уроне во второй раз на адрес здоровья обращались другие, но вроде как идентичные инструкции?

Бряк на доступ же стоит, т.е одинаковые инструкции могут проскакивать например для перевода реального значения в визуальное.

 

2 часа назад, Andymit сказал:

2. Может ли быть такое, что истинное значение здоровья и экранное имеют разный тип (float и  int)?

Да

 

2 часа назад, Andymit сказал:

3. Возможно ли, что я нашел не истинное значение здоровья, т.к. breakpoint на запись на него не срабатывал? (Хотя при изменении этого значения менялось и экранное и в самой игре собственно здоровье реагировало).

Возможно. Если игра на юнити, то может помочь модуль Mono, включив его получишь подписанные функции.

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

9 часов назад, Andymit сказал:

1. Почему при уроне во второй раз на адрес здоровья обращались другие, но вроде как идентичные инструкции?

Возможно, что разные виды урона обрабатываются разными инструкциями. (правда такое было на старых играх).

 

9 часов назад, Andymit сказал:

2. Может ли быть такое, что истинное значение здоровья и экранное имеют разный тип (float и  int)?

Конечно (чаще всего такое и бывает, т.к. для max. значения такая точность как float не нужна.)

 

10 часов назад, Andymit сказал:

3. т.к. breakpoint на запись на него не срабатывал?

А вот здесь нужно уточнение.
Вот эта инструкция

movss [r15+58],xmm5

не срабатывает? Но при этом адрес правильный.

Мне кажется ты где-то ошибаешься.

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

 

В 06.10.2018 в 00:04, partoftheworlD сказал:

Возможно. Если игра на юнити, то может помочь модуль Mono, включив его получишь подписанные функции.

Спасибо за ответ! За совет о модуле отдельное спасибо.

В 06.10.2018 в 07:08, Garik66 сказал:

Возможно, что разные виды урона обрабатываются разными инструкциями. (правда такое было на старых играх).

Не, в моем случае урон был один)

В 06.10.2018 в 07:08, Garik66 сказал:

А вот здесь нужно уточнение.
Вот эта инструкция


movss [r15+58],xmm5

не срабатывает? Но при этом адрес правильный.

Мне кажется ты где-то ошибаешься.

Я находил адрес здоровья, ставил бряк на запись, но при нанесении мне урона ни одна инструкция к адресу моего здоровья не выскакивала. Возможно я дурак, а возможно так и было. Хотя чуть позже я попробовал сделать это еще раз и появлялись инструкции. Скорее всего я действительно просто что-то не то делал. Ну да, ладно. Спасибо за ответ!

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

Игра на движке Unity. Можно через Cheat Engine Mono найти функции и с ними работать. Можно встроить или  модифицировать код, как здесь в примере через dnSPY

Спойлер

 

 

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

В 09.10.2018 в 00:07, MasterGH сказал:

Игра на движке Unity. Можно через Cheat Engine Mono найти функции и с ними работать. Можно встроить или  модифицировать код, как здесь в примере через dnSPY

Спасибо за ответ!

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

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

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

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