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

Half-Life 2 и структуры. Реверс инжиниринг. (ahtung! много слов)


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

Всех приветствую!

И так. Это больше будет смахивать на тему-рассуждение с некоторыми вопросами (если найдется тот, кто готов поддержать со мной разговор :D) , чтобы я смог конкретно разобраться во всех вопросах.

Я начал реверсить игру Half-Life 2. Ну, если так вообще можно назвать мои действия. И тем не менее. Я никогда раньше не находил структуры. Мой максимум - отдельные значения, да многоуровневые оффсеты к ним. Так, чтобы вы понимали мой уровень :D

Я нашел инструкцию, которая изменяет количество жизней у игрока/NPC и прочих тварей. Кстати, вот она:

LhG4HRH.png

Как не сложно догадаться, E0 - оффсет на нашу переменную с жизнями. То есть сразу становится понятно, что это и есть та самая структура, а начало ее лежит в регистре ESI. Что ж, начало положено.

Открыв в анализаторе CE эту структуру я сразу нашел всякие разные поля: примерно в начале лежали координаты XYZ, а потом мое количество жизней. Хорошо, а что делать дальше? В моих планах было найти всех живых существ на карте, и, допустим, выводить их в консоль ( с выводом я уж справлюсь)) ). Я так понимаю, надо найти размер структуры, потому что предположительно за структурой моего игрока будет идти вражеская структура. Но и не факт. Она может так же располагаться и позади. То есть я не знаю где начинаются структуры, сколько их, какого они размера. Отлично)

Есть конечно одна безумная идея - кинуть хук на инструкцию и записывать все адреса структур, но я думаю никто это не оценит xD

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

15 минуту назад, uhx сказал:

Хорошо, а что делать дальше?

Если эта инструкция работает не только с адресом твоего героя, но и других тварей, то ПКМ по этой инструкции и выбери в контекстном меню "Найти адреса, к которым обращается эта инструкция." В окне появятся адреса жизни твоего Героя и других. Сперва нажми в окне наверху на Адрес, чтобы адреса расположились по возрастанию, а потом построй структуру, выбрав несколько адресов подряд и вот там уже будет понятно через какие офсеты будет идти следующий НПС или через какие поинтеры.

 

ЗЫ: И ещё, если ты найдёшь откуда инструкция получает значение для ESI (т.е. по сути найдёшь следующий поинтер), то это тоже поможет понять, как найти всех тварей. 

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

И ещё посмотри моё видео (недавно выполнял заказ , но из-за поехавших ссылок, спойлеров и кода там сечас чёрт ногу сломит) , может тоже поможет разобраться. А ссылку на видео выложу: 

Скрытый текст

 

 

 

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

Ну такое, конечно...

x4pZAnJ.png

Где 0x1C1 - это по моему комбайны, 0x2E57AD38 - мой персонаж, другие на 2E я так понимаю дружественные NPC. Еще другие адреса тоже за другие объекты отвечают))

Ладно, допустим, мне не надо выводить все объекты, так как я понимаю что размер структуры разный у них, дабы упростить задачу, хочется хотя бы иметь полный список вражеских комбайнов.

Хотя если глянуть, то 0x1C1F3890 - 0x1C1F2488 = 1402, а если брать другие адреса, то 0x1C1F2488 - 0x1C1F1080 = 1408. То есть одна 1408, а другая 1402 байта) Видимо они все таки не друг за другжкой идут. Кстати, эти адреса постоянно находятся в обороте. То есть сейчас видно, что там полная абракадабра и память забита чем-то другим (обычно у них хп < 26), но если заспавнится новый комбайн, то он будет занимать свободную память, которая использовалась "бывшим" комбайном.

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

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

В общем я реверсил дальше от этой функции, и нихрена не нареверсил) Нашел момент, откуда берется адрес, но он туда помещается вообще на время. Что-то типа указателя на последнего "активатора" обработчиков... не знаю, в общем. Я так понимаю, что я хватанул че-то через край, взяв халфу. Структура тут абсолютна непонятная, еще и располагаются все объекты в памяти рандомно. Но даже на других примерах я не понимаю, как найти список всех объектов. Я хотел сделать не банальный трейнер, поставив какой-нибудь фильтр на инструкцию, а что-то типа ESP, да или хотя бы просто весь список найти, откуда информацию тащить.

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

16 час назад, uhx сказал:

В общем я реверсил дальше от этой функции, и нихрена не нареверсил)

Но кроме тебя самого никто копать не будет, я тебе дал направление поисков и как искать, дальше сам. Видео посмотрел? Не помогло?

Но, если влом самому копать, то выложи в теме запросы, может кто-нибудь и возьмётся и найдёт для тебя все структуры.

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

В общем, я подумал и сделал так: нашел одноуровневый указатель на свою структуру и на структуру рандомного врага) Получилось так, что я как раз нашел тот самый массив указателей. Конечно, он был не таким как я его представлял, но тоже неп[CENSORED]о... Покопавшись чуть, я заметил, что через каждые 0x10 байт (начиная с моей структуры) идет указатель на другую потенциальную структуру игрока. По быстрому нашел общее значение, чтобы фильтровать невалидные структуры и вывел все в консоль...

Хо-хо, похоже я нашел то, что так долго искал :)

76FBt2m.png

По моему вышло неп[CENSORED]о. Правда некоторые объекты в этом списке режут глаз (типа тех, что с 1 хп), но вроде бы у всех валидные координаты) Правда я понятия не имею как их отличать по классу, надеюсь в структуре где то лежит названьице.

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

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

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

Но кроме тебя самого никто копать не будет, я тебе дал направление поисков и как искать, дальше сам. Видео посмотрел? Не помогло?

Но, если влом самому копать, то выложи в теме запросы, может кто-нибудь и возьмётся и найдёт для тебя все структуры.

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

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

5 минут назад, uhx сказал:

В общем, я подумал и сделал так: нашел одноуровневый указатель на свою структуру и на структуру рандомного врага)

Я как раз об этом и писал:

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

И ещё, если ты найдёшь откуда инструкция получает значение для ESI (т.е. по сути найдёшь следующий поинтер),

 

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

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

Я как раз об этом и писал:

 

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

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

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

через сканер поинтеров

Это тоже самое, что и

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

по сути найдёшь следующий поинтер

Либо через сканер, либо вручную - вспомни ШАГ 8 Туториала СЕ или ты его не проходил.

Короче я писал про тоже самое про что ты пишешь. Видео моё смотрел? 

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

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

Это тоже самое, что и

Либо через сканер, либо вручную - вспомни ШАГ 8 Туториала СЕ или ты его не проходил.

Короче я писал про тоже самое про что ты пишешь. Видео моё смотрел? 

Угу, смотрел) Неп[CENSORED]ое видео, правда мне показалось, что ты там больше с реверсом структуры работаешь. А по началу ты на них выходил из инструкции, я собственно так и делал) Но мне нужен был список вообще всех объектов на карте, даже те которые вообще не двигаются)

А шаг я не проходил, видимо надо бы) Всё какими-то случайными методами узнаю... там кусочек увидел, тут додумал, где-то вспомнил и применил ;)

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

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

там кусочек увидел, тут додумал, где-то вспомнил и применил ;)

Ну мы все примерно так и делаем, Но Туториал советую пройти, заодно проверишь свой уровень. Он не долгий и много даёт понимания, т.е. очень продуман Дарк Байтом.

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

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

Но мне нужен был список вообще всех объектов на карте, даже те которые вообще не двигаются)

Какая разница, главное принцип понять, а потом будешь лазить в структурах и выходить на них когда захочешь и как хочешь. :)

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

А вообще структура - суть файловая система ещё с DOS.

Т.е. в большом книжном шкафу (Жёсткий диск - Dos, Windows или сама Игра в нашем случае) находятся полки (Директории - Dos или Структуры - игра) и на этих полках лежат книги (Другие директории -Dos или поинтеры на другие структуры). Открывая книги  мы читаем странички (Файлы - Dos или данные Игры, например все характеристики героя).

Т.е. не относитесь к Структурам как к чему то особенному - всё это мы уже знаем, просто нужен подход к этим данным и всё. 

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

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

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

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