segunda-feira, 23 de abril de 2012

Games: verdadeiros macetes com DirectX


Jogos online para PC são conhecidos por serem cheios de macetes sujos. Eles podem ser implementados por meio de vários métodos, desde os simples até os impressionantemente complexos. Macros, edição mágica, inspeção e alteração de memória, injeção de DLL, manipulação da rede, modificação de pacotes, e Deus sabe quantos mais. Esses vários métodos são, então, utilizados para implementar macetes, tais como rapid fire, no clip aimbots, wallhacks etc.

Hoje quero discutir uma forma específica de hacking e como ela é feita. Eu hesitei em fazer isso, mas seu uso já está generalizado entre criadores e usuários de hack. O dano já está causado. Ao compartilhar o conhecimento sobre seu funcionamento interno, espero que os danos possam ser minimizados.

Interceptação DirectX 
Interceptação DirectX é uma raça particularmente desobediente de hacking. Ela funciona interceptando todas as chamadas a partir de um jogo para DirectX [1]. O processo intermediário pode então fazer o que quiser com essa informação. Na maioria das vezes, a chamada será passada diretamente para o DirectX real, sem modificação.

No entanto, em casos especiais, você pode fazer algo inteligente. Se a render call for para um jogador inimigo, então você pode determinar a sua posição na tela. Em muitos casos, esse jogador pode estar por trás da geometria do mundo, e ou irá falhar na verificação z-buffer ou será coberto por chamadas subsequentes de empate. Tarde demais, o local da tela do inimigo é conhecido. No final do frame, você pode criar uma nova chamada de empate para DirectX para desenhar uma caixa em torno daquele local da tela. Boom, isso é um wallhack.

Esse tipo de wallhack é extremo. Mesmo para o mais popular dos jogos. Aqui está como ele é para Battlefield 3.

Isso existe para todos os jogos populares de tiros para PC que você possa imaginar. Todos Battlefields, Call of Duties, todos os jogos com engine Source, todos os games com engine Unreal etc.

O próximo passo é simular a entrada do mouse por meio do envio de mensagens de entrada para o app. Com uma localização de mira conhecida e uma localização do espaço de tela do inimigo conhecidos, isso é fácil. Pronto, isso é um aimbot.

Aimbots flagrantes podem imediatamente ajustar de inimigo em inimigo. Para evitar a detecção trivial, a entrada simulada pode ser suavizada ao longo do tempo. Até aimbots mais realistas atiram (e erram) em excesso contra o alvo intencionalmente antes de limitá-lo. Outras variações não mudam a mira, mas fazem disparos automáticos quando estão sobre um alvo inimigo.

A inteligência artificial mais legal de todas 
Wallhacks e aimbots são muito perversos, mas isso é apenas o começo. O que aconteceria se alguém os aumentasse para 11? Matthew Fisher, um estudante de graduação em Stanford, fez exatamente isso, e é a coisa mais legal do mundo.

Usando os métodos básicos descritos acima, ele escreveu uma inteligência artificial que pode jogar Starcraft 2. A câmera pula tão rápido, que é impossível de acompanhar. Por favor, assista a alguns segundos do vídeo apenas para ter uma ideia do que está acontecendo.


Vamos acabar com isso.

Interceptação DirectX chama para determinar exatamente quais unidades são visíveis e onde elas estão.
Com total conhecimento de unidades da tela, escolha uma ação de IA para executar.
Envie comandos de entrada para o jogo para selecionar as unidades.
Envie comandos de entrada para o jogo para emitir ordens para as unidades selecionadas.
Mova a câmera.
Vá para 1.
O jogador automatizado é impulsionado pela entrada simulada do mouse, o que requer um único frame para processar. Isso evita que ele seja executado em uma warp speed ridícula, mas, como o vídeo o demonstra, pode executar todo o ciclo várias vezes por segundo. Jogadores profissionais de Starcraft jogam cerca de 300 ações por minuto (APM). O jogador automatizado poderia, teoricamente, atingir cerca de 3.600 APM.

Processando o frame
Vamos voltar um momento e explicar sobre um pouco da mágica. Como exatamente você determina quais chamadas de empate DirectX são para uma unidade inimiga? Por meio de um exame cuidadoso do que está sendo processado, claro!

Se você já usou PIX, ou algo similar, então já viu uma visão da tela enquanto ela está sendo renderizada uma chamada após a outra. Ao examinar a contagem de vértices, texturas, shaders etc., você pode descobrir muito.

Matt mostra uma análise de como ele faz isso para Starcraft 2, então vamos dar uma olhada aqui. Desça um pouco e confira a etapa 18. Após a inspeção visual, é óbvio que uma unidade Void Ray é renderizada. Você pode gravar os dados que foram utilizados nessa chamada e usá-los para determinar a localização de tela de todos os Void Rays no futuro. Voila!

Mudando chamadas
Tenho discutido a interceptação de chamadas para determinar a localização da unidade. Você também pode adicionar chamadas para renderizar wallhacks. Finalmente, você pode modificá-las. Isso poderia ser feito para alterar texturas ou modelos.

Por exemplo, uma vantagem pode ser obtida substituindo texturas do jogador com vermelho brilhante fazendo os inimigos se sobressaírem. Em um jogo de tiro, você poderia muito bem usar um wallhack completo, por isso é mais útil em outros gêneros.


Prevenção contra macetes
Então como os desenvolvedores podem impedir este tipo de macete? Infelizmente, não é fácil e não há soluções milagrosas. Esses macetes continuam a existir para jogos como Battlefield, Call of Duty e Team Fortress 2, e deveriam indicar a complexidade da situação. No entanto, existe uma variedade de estratégias que pode ajudar.

Dados do jogo podem ser modificados para quebrar as ferramentas de macete. Se a ferramenta se baseia na contagem de vértice, então, modificar os dados poderá quebrar a ferramenta. Hackers são excepcionalmente rápidos em atualizar suas ferramentas, e podem fazê-lo mais rápido do que os devs. Modificação dinâmica de tempo de execução pode ajudar, mas modelos de jogadores poly superiores sempre se destacam. Quebrando telas em pedaços menores usando uma variação aleatória poderia ajudar a escondê-los, mas há questões de logística e desempenho que deve se considerar.

É possível recuperar o buffer do frame final e analisá-lo para acréscimos ilegítimos. Isso não é confiável e é provável que seja lento. Tenho ouvido sobre jogos que fazem isso apenas para que as ferramentas de macete detectem a verificação e desligam-se de um frame.

Antivírus como detecção de processo é outra opção. Punkbuster tenta isso, mas não parece funcionar bem. Software proprietário da Blizzard Warden executa uma funcionalidade semelhante e parece ser eficaz.

A análise de dados do jogador é sempre útil. A IA do Starcraft 2 é extremamente legal, mas nunca sobreviveria no mundo real. Não é difícil de detectar e banir um jogador de 3600 apm. Identificar os hackers em um jogo de tiro é mais desafiador, mas é extremamente viável. Você deveria, definitivamente, coletar e analisar muitos pontos de dados.

Algumas empresas têm tentado utilizar o sistema legal para acabar com os criadores de macetes. Isso pode funcionar dentro dos Estados Unidos, mas muitas vêm da Europa Oriental ou da Rússia. Não há nenhuma chance de ações judiciais acharem um meio de suspender as suas operações.

Endereços de IP mudam e Mac addresses podem ser clonados, mas ainda podem ser úteis. Se você tem um criador de macete conhecido e aqueles endereços correspondem a uma segunda conta, então pode valer a pena investigar. Não é bem macete, mas League of Legends utiliza-os para ajudar a detectar contas smurf. Se houver uma conta de nível máximo seguida de uma conta de nível 1 jogando muito bem, então você pode aumentar rapidamente a classificação da habilidade matchmaking para a conta do nível 1 para proteger os newbs reais.

Detecção de macetes
O fato é que wallhacks e aimbots sempre irão existir no PC. Você não pode pará-los. O jogo de gato e rato entre desenvolvedores e hackers vai sempre existir, mas não é o fim do jogo.

Impedir jogadores de usar macetes é importante. Detectar quando os jogadores os utilizam é possivelmente ainda mais importante. Uma estratégia comum é, uma vez que os que usam macetes são detectados, deixá-los jogando por algumas semanas. Então você realiza do banimento de vários jogadores ao mesmo tempo. Daquele ponto em diante, os jogadores vão hesitar antes de usar macetes, porque eles nunca saberão se o dev sabe ou não.

Há empresas que não se preocupam com prevenção de macetes, se eles são raramente utilizados. O que interessa é detectar as fraudes raramente usadas e imediatamente banir os usuários. É uma mentalidade diferente e não-óbvia, que muda a forma de você atacar o problema.

Por exemplo, a Blizzard não valida todos os movimentos do jogador dentro de World of Warcraft. Existem muitos jogadores, e isso requer muito trabalho para verificar cada atualização de posição para cada jogador. Mexendo alguns bits é possível voar, correr super rápido, no clip, e até mesmo teletransportar.

A própria atualização de posição não é verificada, mas a atividade suspeita ainda pode ser detectada. Alguns exemplos são: entrar em regiões inacessíveis, visitar várias zonas de forma incrivelmente rápida, posições dentro de geometria, relatórios de jogadores etc. Uma vez que a atividade suspeita é detectada, a conta pode ser auto-sinalizada e as checagens de validação mais caras podem ser executadas para apenas alguns jogadores.

Aqui está um vídeo divertido em que um jogador de WoW teleporta hacks por meros dois minutos antes de ser banido. Nos comentários, ele afirma que a proibição não era devido ao teletransporte, mas a partir da mineração com um valor z-axis ruim. O teletransporte em si não foi impedido, mas outro comportamento mais sutil levou a um banimento muito rápido.



Outra abordagem
Você sabe qual é uma das melhores medidas anti-macetes da Microsoft no Xbox? Conquistas. Jogadores estão investindo incrivelmente em seus perfis e escores de realização. Leva anos para alcançar isso, e a maioria dos jogadores não se atreve a arriscar perder tudo por causa de macetes.

Quantos jogadores estão dispostos a arriscar personagens de níveis altos, coleções e toda a pontuação apenas para usar alguns macetes? Não muitos. Pelo menos não depois da primeira onda de banimento.

Bruxaria para o bem
É importante notar que a interceptação DirectX não é apenas para maldades. Se você já jogou qualquer game no Steam, então provavelmente está familiarizado com a sua sobreposição no jogo acessada através do Shift-Tab. Essa sobreposição funciona exatamente como o wallhack! O Steam detecta a tecla Shift-Tab, conecta em chamadas do DirectX, e renderiza a sobreposição em cima do jogo real "automagicamente". Isso é muito astuto, se você pensar sobre isso.

Conclusão
Este foi um breve resumo sobre macetes por meio de interceptação DirectX. Ela pode ser usado em todos os tipos de formas desagradáveis e, se você tiver um jogo multiplayer popular, ela provavelmente estará sendo utilizada. É difícil de impedir e pode ser difícil de detectar, mas é importante conhecer e compreender. Continue lutando a boa luta, meus amigos.

Notas de rodapé
[1] Este método funciona perfeitamente com o OpenGL. Eu não pretendo chamar DirectX especificamente, mas farei isso para maior clareza de leitura. Desculpe, Microsoft!

[2] Em alguns jogos, incluindo o exemplo do Counter-Strike, isso pode ser feito mais facilmente com uma simples substituição de dados de arquivo.




Nenhum comentário:

Postar um comentário

Por favor não seja sem educação e escreva bobagens no comentário! Obrigada diretoria do brblogames