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

Оффсеты

Запланировано Прикреплена Закрыта Перенесена Взлом игр (начинающим)
5 Сообщения 3 Posters 479 Просмотры
Загружаем больше сообщений
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • F
    FoxEdit
    отредактировано 20 февр. 2024 г., 20:10

    Достаточно часто я вижу, что люди на разных форумах под словом оффсет подразумевают одиночное смещение.
    Пример:

    namespace offset
    {
        constexpr auto uWorld = 0x8924E28;
        constexpr auto gNames = 0x8717A00;
        constexpr auto gObjects = 0x87B7100;
     
        namespace World
        {
            constexpr auto persistentLevel = 0x30;
            constexpr auto owningGamingInstance = 0x1B8;
            constexpr auto gameState = 0x158;
        }
     
        namespace PersistentLevel
        {
            constexpr auto ActorArray = 0x098;
            constexpr auto ActorCount = 0x0A0;
        }
     
        namespace Actor
        {
             constexpr auto GetPawn = 0x180;
             constexpr auto GetRootComponent = 0x198;
        }
     
        namespace GetRootComponent
        {
            constexpr auto RelativeLocation = 0x128;
            constexpr auto RelativeRotation = 0x140;
        }
     
        namespace OwningGamingInstance
        {
            constexpr auto localPlayers = 0x038;
        }
     
        namespace LocalPlayer
        {
            constexpr auto PlayerController = 0x30;
        }
     
        namespace PlayerController
        {
            constexpr auto PlayerState = 0x298;
            constexpr auto AcknowledgedPawn = 0x338;
            constexpr auto PlayerCameraManager = 0x348;
        }
     
        namespace PlayerState
        {
            constexpr auto PlayerId = 0x294;
            constexpr auto PlayerName = 0x338;
        }
    }
    

    Тут явно видно, что, например, по смещению 338 находится начало данных, в которых содержится имя игрока, это ясно.
    Но когда я, например, сам ищу некоторые данные, (допустим ХП) в cheat engine, то я получаю что то вроде "GameTitle.exe" + 0x08923568 со смещениями (в абсолютном большинстве случаев - несколькими) по типу
    2E8 --> 30 --> C8 --> 410
    Как это выглядит в CE
    Но это явно больше, чем 1 смещение относительно базового .exe адреса.
    В коде для получения доступа к переменной я использую вектор с оффсетами:
    std::vector<DWORD> offsets { 0x2E8, 0x30, 0xC8, 0x410 };
    Но меня всё же интересует, как получить то самое одиночное смещение относительно .exe, чтобы не прыгать по этим смещениям.

    S 1 ответ Последний ответ 22 февр. 2024 г., 04:59 Ответить Цитировать 0
    • S
      StoneWeaver administrators @FoxEdit
      отредактировано 22 февр. 2024 г., 04:59

      @FoxEdit а с чего ты взял, что коде, использующем вышеуказанный пример, они не "прыгают" по этим оффсетам?

      F 1 ответ Последний ответ 22 февр. 2024 г., 18:55 Ответить Цитировать 0
      • F
        FoxEdit @StoneWeaver
        отредактировано 22 февр. 2024 г., 18:55

        @StoneWeaver В течении этих пары дней я всё таки обнаружил в нескольких гайдах и примерах, что люди также используют вектора с оффсетами, это привнесло некоторую ясность того, что я не один так делаю, это допустимый (и, возможно, правильный) вариант достучаться до нужных мне данных, но всё же остаются вопросы.

        Давай возьмём в пример тот же самый репозиторий hazedumper. Тут снова оффсеты в единичных количествах, то есть от базового адреса до условных "хп" всего лишь 1 прыжок. Неужели это просто исключение из правил и в ныне несуществующей cs:go от базового адреса до ХП было всего 1 смещение?

        У меня не так много опыта и во всех моих случаях, я имел от 2 до 4 оффсетов до нужного мне поля с данными, поэтому я и задал этот вопрос.

        Если говорить о твоём вопросе, то у меня нет точного ответа, так как это код какой то первой страницы по запросу "x_game offset dumps"

        _ 1 ответ Последний ответ 23 февр. 2024 г., 09:00 Ответить Цитировать 0
        • _
          __fastcall @FoxEdit
          отредактировано __fastcall 23 февр. 2024 г., 09:00

          @FoxEdit, Возможно ты чего-то не понял, навряд ли значение хп можно получить через client.dll/engine.dll с 1 офсетом, если полазить в дампе офсетов, то можно найти:

          constexpr ::std::ptrdiff_t dwLocalPlayer = 0xDEB99C;
          

          Значит принцип таков, что тебе надо сначала получить адрес локального игрока через client.dll + dwLocalPlayer, а затем уже через dwLocalPlayer получить хп локального игрока: player addr + hp offset.
          А, если брать твой вопрос про кол-во офсетов до хп, то вот видео, которое поможет разобраться: https://youtu.be/tnroE77Nhlk?si=w8oBxp-x51U13rAf.

          F 1 ответ Последний ответ 23 февр. 2024 г., 18:16 Ответить Цитировать 0
          • F
            FoxEdit @__fastcall
            отредактировано FoxEdit 23 февр. 2024 г., 18:16

            @__fastcall Спасибо! Твой ответ полностью ответил на мой вопрос. Я понял, что дело в том, что я неверно воспринимал эти списки оффсетов, которые люди выкладывают на форумах. Я думал, что эти списки будут содержать в себе подробную информацию, например, сразу до хп или патронов (Что-то вроде 2B8 -> 30 -> ...). Но как ты и показал в примере (который, к слову, также объясняет и тот самый код, который я привёл в самом верху темы) hazedumper, мне дают по отдельности адреса к началам сущностей, например, игрока и отдельно оффсеты, которые я могу применять К этим сущностям. То есть в списке у меня может быть 2 разных оффсета, которые я просто должен скомбинировать, чтобы "прыгнуть" к начале структуры, допустим, игрока и потом "прыгнуть" к его хп.

            За видео спасибо, я его уже смотрел, но повторение мать учения как говорится.

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