Hackeando jogos: alcançando 100% de taxa de vitória em Magic: The Gathering Arena
- Foi descoberto um método para fazer o oponente se render automaticamente em Magic: The Gathering Arena
- Com indicação de intenção de reportar o problema, foram oferecidos o código-fonte e uma proposta de solução
Introdução
- Opinião sobre ofuscação de código no lado do cliente: a ofuscação eleva a barreira contra quem investe pouco esforço, mas também atrapalha desenvolvedores apaixonados que querem reportar vulnerabilidades de segurança
- Em jogos de carta, o servidor gerencia totalmente o estado do jogo, e o cliente recebe apenas as informações necessárias
- Como o cliente possui apenas informações limitadas, hackear é difícil
Começando
- O hack do jogo começou com a análise da comunicação de rede
- O MTGA, escrito em C#, facilita a manipulação de objetos do jogo em tempo de execução
- Uso de reflection, que permite acessar campos e métodos privados
Procurando pistas
- A descompilação de C# usa tokens de metadados para ligar elementos a nomes legíveis por humanos
- Foi encontrada a função
JoinMatch, presumivelmente o ponto inicial de conexão com o servidor do jogo
A implementação do Sparky
- Sparky, o mascote do MTGA, é o tutorial e bot de prática para novos jogadores
- A lógica do bot roda localmente, e todo o processo de decisão acontece no computador do usuário
O diabo mora nos detalhes da implementação
- Ao iniciar uma partida contra bot, a lógica real do bot é processada pela classe
HeadlessClient - O bot se conecta ao servidor do jogo e joga sem precisar renderizar o tabuleiro
Assumindo a partida
- Usando reflection, é possível alterar o comportamento dos objetos do jogo
- Foi escrito um código para identificar o próprio assento e conectar um cliente ao outro assento, fazendo o oponente se render
Opinião do GN⁺
O ponto mais importante deste texto é a postura responsável do desenvolvedor ao compartilhar a descoberta de uma vulnerabilidade de segurança no jogo com o objetivo de melhorá-lo. É muito interessante que, mesmo em sistemas como jogos de carta, em que o servidor gerencia totalmente o estado do jogo, ainda possam existir vulnerabilidades capazes de manipular o resultado por meio de alterações no lado do cliente. Esse tipo de informação oferece uma lição importante para desenvolvedores de jogos fortalecerem a segurança e tornarem o jogo mais justo.
1 comentários
Opiniões do Hacker News
Experiência ao conhecer Linux pela primeira vez e investigar tráfego de rede
A impressionante eficiência da IA para o jogo Magic: The Gathering
A complexidade e a eficiência do desenvolvimento de IA para Magic: The Gathering
Interesse em projetos pessoais relacionados ao MTGA e em hacking de jogos
A diversão de jogar Magic 93/94 com o filho
A importância da lógica do jogo no lado do cliente e da validação no servidor
Bugs no jogo League of Legends e seus efeitos
Dúvidas sobre conexão de IA durante a partida e sobre como a desistência do oponente é tratada
Experiência reutilizando pacotes de conexão com o servidor no jogo Diablo 2
Interesse em desenvolver emuladores de servidor e em partidas LAN