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

    Вызов игровой функции, принимающей в качестве аргумента массив или указатель на него

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

      Здравствуйте, пытаюсь вызвать функцию в одной игре с помощью C++, раньше эта игра не была зашифрована(можно было спокойно изменять Assembly-CSharp.dll), но сейчас игра уже IL2CPP, поэтому у меня есть Assembly-CSharp.dll старой версии этой игры. Вот как на C# задается функция(SendMessage), которую я хочу вызвать(повторюсь, она из незашифрованной версии игры). Cразу говорю, вызывать ее на C# для меня не вариант.

      			this._connectionManager.SendMessage(new NetworkMessage
      			{
      				MessageType = MessageType.InputBuildRequest,
      				Content = new InputBuildRequest
      				{
      					Angle = angle,
      					BuildType = (uint)this._buildingDef.EntityType,
      					Id = 0,
      					TestPass = false,
      					X = vector.x,
      					Y = vector.y
      				}
      

      А вот как выглядит InputBuildRequest:

      public InputBuildRequest(InputBuildRequest other) : this()
      {
      	this.id_ = other.id_;
      	this.buildType_ = other.buildType_;
      	this.x_ = other.x_;
      	this.y_ = other.y_;
      	this.angle_ = other.angle_;
      	this.testPass_ = other.testPass_;
      	this._unknownFields = UnknownFieldSet.Clone(other._unknownFields);
      }
      

      В дампе эта функция выглядит следующим образом:

          {
            "Address": 3252048,
            "Name": "Game.Managers.ConnectionManager.ConnectionManager$$SendMessage",
            "Signature": "void Game_Managers_ConnectionManager_ConnectionManager__SendMessage (Game_Managers_ConnectionManager_ConnectionManager_o* __this, ServerDefinitions_NetworkMessage_o* message, const MethodInfo* method);",
            "TypeSignature": "viii"
          }
      

      Передать в нее указатель на класс я могу(т.е. первый аргумент и третий тоже), но второй это и есть тип постройки, который я не понимаю как передать. Также я прикрепил скрины того, как она выглядит в ассемблере.
      Вот так выглядит на C# вызов, который я хочу осуществить , но уже на C++:

      			this._connectionManager.SendMessage(new NetworkMessage
      			{
      				MessageType = MessageType.InputBuildRequest,
      				Content = new InputBuildRequest
      				{
      					Angle = 0.3926991f,
      					BuildType = 23U,
      					Id = 0,
      					TestPass = false,
      					X = 1f,
      					Y = 20f
      				}
      			});
      

      Может мне кто-то помочь сделать это, потому что функция выглядит очень непонятно, как с этим что-то делать у меня 0 идей.8f31e9f8-ebbe-401a-af66-451c9a7de0b8-image.png

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