GameHackLab[RU]
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

    Поиск неизвестного значения

    Запланировано Прикреплена Закрыта Перенесена Базовая информация
    поискunknown value
    1 Сообщения 1 Posters 1.9k Просмотры
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • PromisingP
      Promising
      отредактировано Promising

      В теме показано как искать неизвестное значение

      Рассмотрены некоторые особенности поиска неизвестных значений и координат


      Поиск неизвестного значения применяется, если вы не знаете точно, каким является значение, например, если оно отображено просто заполняющейся полоской, или в странном формате (например как формат времени).

      В этой статье показано как найти координаты персонажа на примере игры Terraria.
      Сначала откройте игру и подключитесь к процессу с помощью Cheat Engine, как показано в предыдущей статье:

      4975dd11-be82-4456-8276-b9e9d2f40c49-изображение.png

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

      d4f5f57d-dfa9-4816-a085-15ebed67ed4c-изображение.png

      Установите персонажа впритык к самому левому:

      6c771dee-0420-4141-a3c8-b15145105bfe-изображение.png

      Поставьте игру на паузу и перейдите в Cheat Engine, там выберете поиск неизвестного значения из списка:

      7745a1ec-1fcb-4ae3-a221-85bd2327a282-изображение.png

      Нажмите First Scan, не появится никаких значений слева, но должно показать общее их количество:

      488862fa-387e-492c-ad68-d64b84e5ef7b-изображение.png

      Теперь перейдите в игру и передвиньте персонажа вплотную к следующей отметке:

      e0d36d6f-085d-4b2f-8110-37c0ea2ef462-изображение.png

      Перейдите в Cheat Engine и выберите Scan Type как Increased value (увеличенное значение):

      c3a92b4e-2caa-436e-bccb-663109d4a91c-изображение.png

      После этого нажмите Next Scan, если вы всё сделали верно и поиск успешен то сверху появятся значения и их общее количество (около Found) уменьшится:

      f7f4f417-207d-4600-ae41-0f83553f2cca-изображение.png

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

      12bfadbc-0296-4a99-a428-18b0f6884556-изображение.png

      В Cheat Engine выберите тип поиска Decreased value (уменьшенное значение):

      2a6f9d2d-d88d-45e2-a21f-cae0ab9cc43a-изображение.png

      После этого нажмите Next Scan:

      7d4536b7-1a4b-434d-a823-72b43217754a-изображение.png

      Если вы всё сделали верно то количество значений должно уменьшиться. Продолжайте перемещать персонажа вправо и влево производя соответствующий отсев, выбирая "Увеличилось" если персонаж стоит правее чем при прошлом поиске, и "Уменьшилось" если левее. Если вы совершили ошибку, например перепутали стороны поиска и поняли это, не обязательно начинать новый поиск, вы можете вернуться к результатам предыдущего отсева нажав Undo Scan.

      1bc077cc-1a06-410d-bd0f-568fc4dfb5ca-изображение.png

      Когда значений останется меньше и вы заметите что их количество от поиска к поиску уменьшается слабо, стоит использовать отсев с указанием "Не изменилось", для этого сдвиньте персонажа в определённую сторону, выберите соответствующий поиск (уменьшилось/увеличилось) и проведите его, после этого вернитесь в игру и не перемещайте персонажа с позиции последнего поиска.
      Позвольте ему немного постоять на месте и перейдите назад в программу, выберите тип поиска Unchanged value, это значит что вы хотите что бы Cheat Engine убрал все значения из списка которые изменились с прошлого поиска и оставил лишь те которые не изменились, если персонаж не двигался с прошлого поиска то его значение должно попадать в диапазон:

      33d9c5a7-3814-4c93-a664-c59e5454cb91-изображение.png

      Произведите поиск:

      682c8e14-bc65-4224-8bf6-e4c8417cfb98-изображение.png

      Количество значений довольно заметно сократилось. Теперь, не перемещая персонажа продолжайте возвращаться в игру, а потом в Cheat Engine и нажимать Next Scan с выбранным Unchanged value, пока количество значений ещё сильнее не уменьшится:

      ad7dbba5-3461-4003-aa4c-2c3e0ac54c39-изображение.png

      Значений всё равно много, что бы их уменьшить стоит прибегнуть к сравнению с первым поиском, именно для этого персонажа устанавливали вплотную к ограничителю из блоков. Поставьте персонажа в точно такое же положение как при первом поиске:

      e985d9b4-00e3-4312-b08d-2b77f16407a5-изображение.png

      Перейдите в Cheat Engine и поставьте галочку на Compare to first scan, тогда при следующем нажатии Next Scan программа будет сравнивать значения не с результатом прошлого поиска, а с результатом самого первого:

      681e5958-7dd8-4706-98db-d2edf157989b-изображение.png

      Выберите тип Unchanged value, потому что персонаж стоит в той же позиции что и при первом поиске и произведите отсев:

      d80bc1b4-edf0-4ba1-a5f3-3c81c1085065-изображение.png

      Значений стало меньше, но всё равно ещё слишком много. Не забудьте снять галочку с Compare to first scan когда сдвините персонажа с позиции. Что бы ещё уменьшить их количество, попробуйте сделать что то необычное. Поиск производился для координаты X персонажа, то есть для горизонтального положения, поэтому попробуйте уменьшить другую координату, опустите, или поднимите его:

      74a758f8-439a-4cce-9303-f68e09192dca-изображение.png

      После этого произведите отсев с параметром "не изменившееся":

      a38f3efb-4604-49e6-b4ea-be4fd2b41b05-изображение.png

      Значений стало намного меньше, но всё равно ещё слишком много. Что бы ещё уменьшить их количество, попробуйте увести персонажа далеко вправо от позиции начального поиска:

      44919afa-f3c1-443f-81a5-9fe0c022c487-изображение.png

      И проведите отсев увеличившегося значения:

      ac1fae1e-3748-4773-91e9-a2b7e7e9c56c-изображение.png

      Значений стало ещё меньше, вернитесь в изначальную позицию и произведите отсев уменьшившегося значения:

      b2c4a246-2846-49d2-a556-9ad63f5c9cd2-изображение.png

      db8d5876-0280-4d6a-9ff2-7ce14bd28176-изображение.png

      Количество значений не изменяется, это значит что дальше отсеять уже нельзя. Все эти значения относятся к разным объектам на экране, позиция персонажа, позиция камеры, позиция шляпы персонажа и прочего, поэтому их так много. Такая ситуация возникает довольно часто и что бы найти нужное значение координаты X персонажа - нужно проверять их.

      Выберите все значения и добавьте их в таблицу, для этого нажмите на любое значение в окне поиска и нажмите Ctrl+A на клавиатуре что бы выделить все значения, после чего нажмите на красную стрелочку, все значения переместятся в таблицу:

      35c64520-60d8-440e-af0f-098590c74957-изображение.png

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

      6a60ac86-3605-4606-b00c-d1764111336e-изображение.png

      Для того что бы быстро заморозить, или разморозить значения, нажмите пробел находясь в активном окне Cheat Engine:

      661098b0-3ec9-4cfb-a3f8-1761c48c7d1f-изображение.png

      Перейдите в игру и попробуйте переместить персонажа вправо, или влево:

      77382ef4-d68c-4b18-ac6b-849fa86f6045-изображение.png

      Персонаж перемещается, но дёргается небо и облака, значит это не нужные значения. Удалите выделенные значения нажав клавишу Del на клавиатуре, если они вам не нужны, или просто снимите с них заморозку нажав пробел. Выделите следующую группу значений и повторите процедуру.
      Для удобства и быстроты поиска, самый эффективный способ это выделять и замораживать сразу половину от всех значений в таблице, проверять в игре, может ли персонаж перемещаться по X, если искомое значение будет среди них и он не сможет, вы сможете сразу удалить другую половину значений в таблице и повторить процедуру с половиной оставшихся значений:

      a2df2f37-1c98-4709-84ec-0cedb1700f3f-изображение.png

      После нескольких повторений осталось лишь несколько значений:

      01c69901-0d96-41cf-91b6-c8ef69a5090d-изображение.png

      Так как персонаж может перемещаться, значит верхние значения не нужные, удалите их:

      09ded069-939a-414e-9023-ba9b5e6563d0-изображение.png

      Теперь можно поочерёдно замораживая значения и проверяя игру, найти нужное:

      12e02fb5-7135-4b24-8709-5dde714618e9-изображение.png

      Остальные значения можно удалить:

      19220571-bc6c-4bae-9c02-f6d1e30b5264-изображение.png

      Сравним значение в позиции около первого ограничителя и около второго:

      74ae16ea-6bdd-48a5-8c5a-abecb439caa9-изображение.png

      4f34e159-6329-4d81-a50e-60ea7e213f06-изображение.png

      И у второго:

      2fdef773-6e1e-4636-8d8d-3c8aa1733518-изображение.png

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

      Теперь вы можете заметить, что значение координат выглядит странным слишком большим. Можно проверить свои подозрения, попробовав изменить его тип, как программа читает его из памяти, для этого два раза кликните на "4 Bytes" в строке Type, появится окно выбора типа:

      fb67b12e-94ef-451a-bfe1-afdd5cc5f6b5-изображение.png

      Выберите тип float и посмотрите как изменится внешний вид значения:

      bf97e21b-e3ac-41ec-89b4-d7ba9f7e8890-изображение.png

      Посмотрите как оно выглядит в первой и второй позициях:

      4b61e376-1f0b-4577-98f2-80b54c64ab28-изображение.png

      4a046b9d-c6bb-49be-b793-a8c560904d0d-изображение.png

      Теперь оно приняло читаемый вид и можно попробовать вычислить расстояние, которое занимает один блок в игре, посчитав блоки между столбиками и разделив разницу между вторым и первым значением на это количество, получится (51340 - 51280) / 4 (блоков 5, но персонаж занимает 2 блока, потому -1 блок будет 4) = 15
      Для проверки попробуем вычесть из значения около правого столба 30 и записать его, посмотрев, на сколько блоков переместится персонаж, производить арифметические операции можно прямо в строке изменения значения:

      f5eb92f8-2cc6-44f7-a672-696f492a0bf0-изображение.png

      b887140a-6c8a-47ba-887f-fde497a25ff7-изображение.png

      Персонаж переместился ровно на 2 блока влево, значит всё посчитано верно.
      Это было математическое отступление, а теперь нужно найти вторую координату, что бы перемещать персонажа не только вправо и влево, но и вверх и вниз.
      Можно начать новый поиск, но сначала попробуйте добавить значение по адресу расположенное прямо следующим за этим, так как координаты обычно располагаются рядом. Есть разные виды расположения координат, x y, x y z, x z y, и прочие, это двухмерная игра, поэтому стоит попробовать проверить первый тип, для этого продублируйте значение в таблице, выделив его, нажав Ctrl+C и затем Ctrl+V, после того как вы сделаете это, появится окно спрашивающее, как добавить значение:

      00722555-d979-4bbd-aff6-f1ee4b98166a-изображение.png

      В нём можно указать на сколько сместить адрес, чем заменить и прочее, сейчас просто нажмите кнопку Paste ничего не меняя, значение появится в таблице:

      3a0eb440-7acf-43ac-bbdc-24b31ae07009-изображение.png

      Для удобства назовите первое значение "X", для этого кликните дважды на No description и введите свой текст.

      d23655c7-f67e-480e-a16b-786635bc0eaa-изображение.png

      Что бы проверить, находится ли координата Y поблизости, нужно изменить адрес только что добавленной записи. Для этого нажмите на адрес в графе Address второго значения и добавьте к адресу 4, так как тип float занимает 4 байта, а получить нужно значение идущее следующим:

      6c6ef57e-0f90-4185-b715-318a49bbdbbe-изображение.png

      Как только вы введёте + 4, вам станет видно какое значение располагается по этому адресу, если оно выглядит адекватным, тогда можно нажать OK и адрес в таблице изменится. Если бы поиск начинался с Y, тогда для получения X нужно было бы вычитать 4, а не добавлять. Помните что адрес считается в байтах в шестнадцатеричной системе счисления.

      2316201e-df27-4484-8817-e2031411334c-изображение.png

      Для проверки попробуйте изменить значение, например добавив к нему 60 (4 блока):

      eac7cb4c-efb9-4a9c-8495-242b4d6f2011-изображение.png

      Персонаж переместился вниз, значит координата Y тем больше, чем ниже персонаж в этой игре (обычно наоборот).
      С этими значениями вы можете перемещать персонажа по всей карте в любое место. Как это делать удобнее можно узнать из следующих статей.

      1 ответ Последний ответ Ответить Цитировать 2
      • Первое сообщение
        Последнее сообщение