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

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

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

    Здравствуйте, пытаюсь вызвать функцию в одной игре с помощью 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
    1 из 1
    • Первое сообщение
      1/1
      Последнее сообщение