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

    Оффсеты

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

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

      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, чтобы не прыгать по этим смещениям.

      StoneWeaverS 1 ответ Последний ответ Ответить Цитировать 0
      • StoneWeaverS
        StoneWeaver administrators @FoxEdit
        отредактировано

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

        FoxEditF 1 ответ Последний ответ Ответить Цитировать 0
        • FoxEditF
          FoxEdit @StoneWeaver
          отредактировано

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

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

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

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

          __fastcall_ 1 ответ Последний ответ Ответить Цитировать 0
          • __fastcall_
            __fastcall @FoxEdit
            отредактировано __fastcall

            @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.

            FoxEditF 1 ответ Последний ответ Ответить Цитировать 0
            • FoxEditF
              FoxEdit @__fastcall
              отредактировано FoxEdit

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

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

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