uhx Опубликовано 10 февраля, 2016 Поделиться Опубликовано 10 февраля, 2016 Всех приветствую! И так. Это больше будет смахивать на тему-рассуждение с некоторыми вопросами (если найдется тот, кто готов поддержать со мной разговор ) , чтобы я смог конкретно разобраться во всех вопросах. Я начал реверсить игру Half-Life 2. Ну, если так вообще можно назвать мои действия. И тем не менее. Я никогда раньше не находил структуры. Мой максимум - отдельные значения, да многоуровневые оффсеты к ним. Так, чтобы вы понимали мой уровень Я нашел инструкцию, которая изменяет количество жизней у игрока/NPC и прочих тварей. Кстати, вот она: Как не сложно догадаться, E0 - оффсет на нашу переменную с жизнями. То есть сразу становится понятно, что это и есть та самая структура, а начало ее лежит в регистре ESI. Что ж, начало положено. Открыв в анализаторе CE эту структуру я сразу нашел всякие разные поля: примерно в начале лежали координаты XYZ, а потом мое количество жизней. Хорошо, а что делать дальше? В моих планах было найти всех живых существ на карте, и, допустим, выводить их в консоль ( с выводом я уж справлюсь)) ). Я так понимаю, надо найти размер структуры, потому что предположительно за структурой моего игрока будет идти вражеская структура. Но и не факт. Она может так же располагаться и позади. То есть я не знаю где начинаются структуры, сколько их, какого они размера. Отлично) Есть конечно одна безумная идея - кинуть хук на инструкцию и записывать все адреса структур, но я думаю никто это не оценит xD Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 февраля, 2016 Поделиться Опубликовано 10 февраля, 2016 (изменено) 15 минуту назад, uhx сказал: Хорошо, а что делать дальше? Если эта инструкция работает не только с адресом твоего героя, но и других тварей, то ПКМ по этой инструкции и выбери в контекстном меню "Найти адреса, к которым обращается эта инструкция." В окне появятся адреса жизни твоего Героя и других. Сперва нажми в окне наверху на Адрес, чтобы адреса расположились по возрастанию, а потом построй структуру, выбрав несколько адресов подряд и вот там уже будет понятно через какие офсеты будет идти следующий НПС или через какие поинтеры. ЗЫ: И ещё, если ты найдёшь откуда инструкция получает значение для ESI (т.е. по сути найдёшь следующий поинтер), то это тоже поможет понять, как найти всех тварей. Изменено 10 февраля, 2016 пользователем Garik66 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 февраля, 2016 Поделиться Опубликовано 10 февраля, 2016 И ещё посмотри моё видео (недавно выполнял заказ Stronghold 2 , но из-за поехавших ссылок, спойлеров и кода там сечас чёрт ногу сломит) , может тоже поможет разобраться. А ссылку на видео выложу: Скрытый текст 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 10 февраля, 2016 Автор Поделиться Опубликовано 10 февраля, 2016 (изменено) Ну такое, конечно... Где 0x1C1 - это по моему комбайны, 0x2E57AD38 - мой персонаж, другие на 2E я так понимаю дружественные NPC. Еще другие адреса тоже за другие объекты отвечают)) Ладно, допустим, мне не надо выводить все объекты, так как я понимаю что размер структуры разный у них, дабы упростить задачу, хочется хотя бы иметь полный список вражеских комбайнов. Хотя если глянуть, то 0x1C1F3890 - 0x1C1F2488 = 1402, а если брать другие адреса, то 0x1C1F2488 - 0x1C1F1080 = 1408. То есть одна 1408, а другая 1402 байта) Видимо они все таки не друг за другжкой идут. Кстати, эти адреса постоянно находятся в обороте. То есть сейчас видно, что там полная абракадабра и память забита чем-то другим (обычно у них хп < 26), но если заспавнится новый комбайн, то он будет занимать свободную память, которая использовалась "бывшим" комбайном. Значит надо как-то иначе искать структуры... я что-то слышал про массив указателей, но я понятия не имею как его найти. Думаю, в нем и находится весь список живых существ, а так как в Half-Life вполне приятная (как по мне) иерархия классов, то у всех базовый класс один, то есть базовые вещи (тавтология, ага) типа координат и количества жизней, которые должны быть с одинаковыми оффсетами. Изменено 10 февраля, 2016 пользователем uhx Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 11 февраля, 2016 Автор Поделиться Опубликовано 11 февраля, 2016 В общем я реверсил дальше от этой функции, и нихрена не нареверсил) Нашел момент, откуда берется адрес, но он туда помещается вообще на время. Что-то типа указателя на последнего "активатора" обработчиков... не знаю, в общем. Я так понимаю, что я хватанул че-то через край, взяв халфу. Структура тут абсолютна непонятная, еще и располагаются все объекты в памяти рандомно. Но даже на других примерах я не понимаю, как найти список всех объектов. Я хотел сделать не банальный трейнер, поставив какой-нибудь фильтр на инструкцию, а что-то типа ESP, да или хотя бы просто весь список найти, откуда информацию тащить. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 февраля, 2016 Поделиться Опубликовано 11 февраля, 2016 16 час назад, uhx сказал: В общем я реверсил дальше от этой функции, и нихрена не нареверсил) Но кроме тебя самого никто копать не будет, я тебе дал направление поисков и как искать, дальше сам. Видео посмотрел? Не помогло? Но, если влом самому копать, то выложи в теме запросы, может кто-нибудь и возьмётся и найдёт для тебя все структуры. Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 11 февраля, 2016 Автор Поделиться Опубликовано 11 февраля, 2016 В общем, я подумал и сделал так: нашел одноуровневый указатель на свою структуру и на структуру рандомного врага) Получилось так, что я как раз нашел тот самый массив указателей. Конечно, он был не таким как я его представлял, но тоже неп[CENSORED]о... Покопавшись чуть, я заметил, что через каждые 0x10 байт (начиная с моей структуры) идет указатель на другую потенциальную структуру игрока. По быстрому нашел общее значение, чтобы фильтровать невалидные структуры и вывел все в консоль... Хо-хо, похоже я нашел то, что так долго искал По моему вышло неп[CENSORED]о. Правда некоторые объекты в этом списке режут глаз (типа тех, что с 1 хп), но вроде бы у всех валидные координаты) Правда я понятия не имею как их отличать по классу, надеюсь в структуре где то лежит названьице. Кстати, теперь вопрос... я в общем опирался на обычный оффсет при выводе всей этой байды, а как можно ли это на сигнатуры перевести? Я имею в виду поиск этого массива. Или не стоит такой "динамический" участок памяти искать через паттерн? 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 11 февраля, 2016 Автор Поделиться Опубликовано 11 февраля, 2016 (изменено) 5 минут назад, Garik66 сказал: Но кроме тебя самого никто копать не будет, я тебе дал направление поисков и как искать, дальше сам. Видео посмотрел? Не помогло? Но, если влом самому копать, то выложи в теме запросы, может кто-нибудь и возьмётся и найдёт для тебя все структуры. Да я и не прошу ничего за меня искать) Я же говорю: пытаюсь разобраться, как своими руками до всего добраться, в теме жду лишь советы да ответы на мои вопросы. Хитрости там всякие. Как правильно, не правильно, куда копать надо) Изменено 11 февраля, 2016 пользователем uhx Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 февраля, 2016 Поделиться Опубликовано 11 февраля, 2016 5 минут назад, uhx сказал: В общем, я подумал и сделал так: нашел одноуровневый указатель на свою структуру и на структуру рандомного врага) Я как раз об этом и писал: 22 часа назад, Garik66 сказал: И ещё, если ты найдёшь откуда инструкция получает значение для ESI (т.е. по сути найдёшь следующий поинтер), Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 11 февраля, 2016 Автор Поделиться Опубликовано 11 февраля, 2016 1 минуту назад, Garik66 сказал: Я как раз об этом и писал: Да, но я через инструкцию так ничего и не откопал Там все очень запутано, в итоге вышел на какой-то интересный участок, но все таки не понял что с ним делать и забил. Сейчас в голову пришла идея, вон я уже выше писал, попробовать найти через сканер поинтеров и кое-что получилось, по моему то что нужно) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 февраля, 2016 Поделиться Опубликовано 11 февраля, 2016 3 минуты назад, uhx сказал: через сканер поинтеров Это тоже самое, что и 7 минут назад, Garik66 сказал: по сути найдёшь следующий поинтер Либо через сканер, либо вручную - вспомни ШАГ 8 Туториала СЕ или ты его не проходил. Короче я писал про тоже самое про что ты пишешь. Видео моё смотрел? 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 11 февраля, 2016 Автор Поделиться Опубликовано 11 февраля, 2016 7 минут назад, Garik66 сказал: Это тоже самое, что и Либо через сканер, либо вручную - вспомни ШАГ 8 Туториала СЕ или ты его не проходил. Короче я писал про тоже самое про что ты пишешь. Видео моё смотрел? Угу, смотрел) Неп[CENSORED]ое видео, правда мне показалось, что ты там больше с реверсом структуры работаешь. А по началу ты на них выходил из инструкции, я собственно так и делал) Но мне нужен был список вообще всех объектов на карте, даже те которые вообще не двигаются) А шаг я не проходил, видимо надо бы) Всё какими-то случайными методами узнаю... там кусочек увидел, тут додумал, где-то вспомнил и применил Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 февраля, 2016 Поделиться Опубликовано 11 февраля, 2016 1 минуту назад, uhx сказал: там кусочек увидел, тут додумал, где-то вспомнил и применил Ну мы все примерно так и делаем, Но Туториал советую пройти, заодно проверишь свой уровень. Он не долгий и много даёт понимания, т.е. очень продуман Дарк Байтом. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 февраля, 2016 Поделиться Опубликовано 11 февраля, 2016 3 минуты назад, uhx сказал: Но мне нужен был список вообще всех объектов на карте, даже те которые вообще не двигаются) Какая разница, главное принцип понять, а потом будешь лазить в структурах и выходить на них когда захочешь и как хочешь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 февраля, 2016 Поделиться Опубликовано 11 февраля, 2016 А вообще структура - суть файловая система ещё с DOS. Т.е. в большом книжном шкафу (Жёсткий диск - Dos, Windows или сама Игра в нашем случае) находятся полки (Директории - Dos или Структуры - игра) и на этих полках лежат книги (Другие директории -Dos или поинтеры на другие структуры). Открывая книги мы читаем странички (Файлы - Dos или данные Игры, например все характеристики героя). Т.е. не относитесь к Структурам как к чему то особенному - всё это мы уже знаем, просто нужен подход к этим данным и всё. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения