Como os jogos para PC / Mac detectam pirataria?

27

Recentemente, eu estava lendo um artigo sobre maneiras inteligentes como os programadores protegiam seus jogos de piratas, como os criadores do Game Dev Tycoon . Isso me deixou curioso: como eles detectam que a cópia do jogo em execução é de fato uma versão pirata em nível técnico? A resposta mais próxima que consegui encontrar em algumas pesquisas foi como os cartuchos SNES podem detectar se são piratas , mas essa tática obviamente não se aplica aos PCs.

caseif
fonte
11
Eu acho que essa pergunta é muito ampla. Existem várias maneiras pelas quais os jogos detectam pirataria, e muitas delas são específicas para cada jogo.
Michaelhouse
10
@ Byte56 Concordo que a questão é bastante ampla, mas acho que ainda é uma boa pergunta. Uma resposta ideal pode fornecer um método comum de detecção de pirataria e, talvez, links para fontes que explicam outras soluções conhecidas.
Kevintodisco #
2
Provavelmente, a melhor maneira possível de evitar a pirataria é fazer o que a Blizzard fez no Diablo III: o cliente faz a renderização e tal, mas a maioria das regras e lógica do jogo são armazenadas apenas no servidor da Blizzard (por exemplo: quanto ouro você recebe quando você abre um baú na sala X com o jogador no nível Y). Não é possível derrotar isso, a menos que você tenha roubado os binários / fontes da Blizzard para a parte do servidor (o que é muito improvável). Algumas pessoas criaram emuladores, mas, como não são as mesmas regras (são aproximações), ela não oferece a mesma experiência de jogo.
usar o seguinte

Respostas:

53

Primeira coisa: primeiro, não há como um computador saber se um arquivo está pirateado ou não. Pirataria é um termo legal / moral e, portanto, não tem significado em um arquivo, composto apenas de uns e zeros.

Dito isto, a prevenção e as contramedidas da pirataria geralmente se concentram em descobrir se um usuário tem ou não algo (geralmente um objeto) que só pode ser obtido se uma cópia do jogo foi comprada e dificulta a duplicação. Existem várias maneiras de fazer isso, cada uma com vantagens e falhas. Vou mencionar alguns:

  • Os primeiros jogos pediam que os usuários inserissem uma palavra no manual do jogo, que você só deve obter se tiver comprado uma caixa de jogo. Uma fotocopiadora ou um scanner derrota facilmente essa técnica.

  • Mais recentemente, as verificações de mídia são mais comuns. A idéia é que você precisa que o CD do jogo esteja na unidade para que o jogo seja executado. Para implementar isso, você pode, por exemplo, acessar arquivos de dados críticos do CD sem os quais o jogo não pode ser executado, ou simplesmente verificar a existência de um arquivo no CD. Isso funcionou muito bem quando os CDs eram difíceis de duplicar, mas copiadores de CD e, mais recentemente, emuladores de unidades podem ser usados ​​para derrotar facilmente essa técnica.

  • No entanto, as cópias de CD não são perfeitas; muitas outras técnicas se concentram em detectar se o CD é o CD original pressionado ou uma cópia. Para implementar isso, um jogo pode verificar se há elementos fora do padrão inseridos no disco do jogo durante o tempo de impressão, mas não pode ser replicado de maneira fácil e confiável por um gravador de CD, em um CD-R. Algumas maneiras comuns de fazer isso são:

    • Criando arquivos fictícios "fantasmas" no CD durante a masterização, que não são acessíveis a partir do sistema de arquivos do CD, mas existem, e podem ser lidos se você souber onde encontrá-los. Esses dados estão ausentes nas cópias de arquivo por arquivo. A cópia de toda a imagem do disco copiará esses arquivos.

    • Outra maneira é inserir intencionalmente erros no disco. Os CDs contêm códigos de correção de erros. Ao inserir erros nos dados, que podem ser corrigidos de forma transparente por um leitor de disco, o disco funcionará normalmente, mas os erros não serão copiados para o CD-R. Ao procurar por esses erros intencionais, um jogo pode considerar um CD como uma cópia original impressa. As cópias de imagem de disco RAW acabam com isso.

    • A inserção de setores duplos, com o mesmo endereço, mas com dados diferentes, produzirá resultados diferentes ao buscar dados para frente e para trás. É possível verificar a existência disso e duplicar um CD com esses dois setores é muito difícil.

    • Medindo a posição real das cavidades no CD. Mais uma vez, duplicar um CD com as cavidades nas mesmas posições é muito difícil.

    No entanto, muitos emuladores de CD, como o Daemon Tools ou o Alcohol 120%, podem realmente emular esses recursos. Por esse motivo, muitos editores optam por incluir uma etapa de detecção do emulador de CD e impedir que o jogo seja executado se um emulador for detectado. A implementação de um detector emulador está fora do escopo desta resposta.

  • Em vez de, ou além de procurar um CD físico, um jogo pode solicitar que o usuário insira alguns dados, como uma chave de produto . Algumas maneiras de usar chaves de produto são:

    • Verificando recursos matemáticos na chave. No entanto, isso não impede a duplicação de chaves e, se o algoritmo de verificação for descoberto ou com engenharia reversa, um pirata poderá criar novas chaves à vontade, que parecerão legítimas para o jogo. O software que cria chaves à vontade é chamado de " keygens ".

    • Ao gerar um hash com base no hardware do usuário, envie esse hash e a chave do produto (geralmente uma combinação, chamada de "chave de instalação") para um servidor pertencente à empresa do jogo e, com base no hash e na série, crie uma chave de ativação . Usando métodos numéricos unidirecionais (como aritmética modular ou alguns métodos com curvas elípticas), um jogo pode ver se a chave de ativação corresponde ao código hash e serial e só é executado se eles corresponderem. Essa técnica é chamada "ativação".

    Com a ativação, um servidor pode se recusar a fornecer chaves de ativação para vários hashes de hardware com o mesmo código serial. Por esse motivo, mesmo se o código serial e a chave de ativação forem copiados, a chave de ativação não corresponderá e o jogo não será executado em outros computadores.

Todas essas medidas têm como objetivo descobrir se o usuário possui ou não uma cópia comprada do jogo. No entanto, implementá-los requer um código de programa que verifique isso. É possível que um pirata modifique o código do jogo para desativar ou ignorar as verificações em vez de atacar os mecanismos de proteção contra cópia. O ato de modificar os binários do jogo para remover as verificações antipirataria é chamado de "cracking".

Cracking can simply consist of disassembling the game executable, finding the place where the relevant checks are made, modifying it to disable the checks, or ignore the results, and reassembling it. Some ways to counter cracking are:

  • Verificando o binário com algum hash. No entanto, deve haver um programa que verifique o hash, que também pode ser quebrado.

  • Criptografar o programa ou simplesmente a rotina de verificação e descriptografá-lo em tempo de execução. Isso dificulta a desmontagem, pois envolve uma ou mais etapas adicionais de descriptografia. Se a chave de descriptografia estiver incluída no programa (como deve ser, porque sem ela o jogo não pode ser descriptografado), o pirata poderá fazer engenharia reversa da descriptografia, encontrar a rotina e quebrar a proteção contra cópia.

    Por esse motivo, como editor de jogos, você deseja tornar a chave o mais difícil de encontrar possível e, opcionalmente, tornar o algoritmo de descriptografia difícil de entender. Algumas maneiras de dificultar a localização da chave são:

    • Obscure criando-o de maneiras estranhas. Isso simplesmente atrasa o processo de craqueamento.

    • Crie chaves mestras por máquina semelhantes à proteção serial mencionada acima.

    No entanto, independentemente do método usado para criar suas chaves, as próprias chaves estarão na memória enquanto a descriptografia estiver em andamento. Inspetores de memória, depuradores e emuladores podem ajudar um pirata a encontrar e copiar a chave enquanto estiver na memória. Espreitar a memória pode ser atacado de várias maneiras:

    • Ter um serviço privilegiado que detecta acessos à memória na região especificada e redireciona o endereçamento para outro lugar. Como isso requer acesso ao anel 0 e os programas que fazem isso são mais comumente usados ​​para fins não tão legítimos , o software antivírus geralmente os bloqueia. (é por isso que muitos jogos e outros softwares solicitam desativar a proteção contra vírus durante a execução). Escrever um software que faça isso corretamente é extremamente difícil e pode comprometer facilmente a estabilidade e a segurança do sistema operacional host. O escândalo do XCP é um bom exemplo de implementação incorreta desse método.

    • Os sistemas operacionais e hardware modernos fornecem algumas ferramentas, como cortinas de memória , caminhos de mídia seguros e módulos TP , para facilitar a criação de um programa que descriptografa dados, enquanto é resistente à inspeção de memória.

Existem muitas outras técnicas para atacar a pirataria, desde as triviais às esotéricas. Infelizmente, é possível que todas essas técnicas deixem de reconhecer uma cópia genuína, e geralmente são as técnicas mais agressivas que apresentam taxas de falso positivo mais altas.

Como editor de jogos, geralmente você deseja escolher um conjunto de técnicas cujo custo de implementação, tempo de quebra esperado e taxa de falsos positivos estão alinhados com suas expectativas.

É um equívoco comum que a proteção contra pirataria seja completamente inquebrável. A maioria das vendas de jogos ocorre nos primeiros meses após o lançamento, portanto, um esquema de proteção contra pirataria é geralmente considerado eficaz se quebrá-lo consumir tempo suficiente para que o editor do jogo colete uma grande quantidade de lucros antes de ser quebrado.

Em relação à Game Dev Tycoon, eles não usaram nenhuma tecnologia antipirataria. Eles simplesmente criaram uma compilação "quebrada" e a distribuíram pelo BitTorrent, conforme declarado no começo do artigo que você mencionou.

Panda Pajama
fonte
11
Mesmo tendo uma resposta competitiva, preciso me concentrar na sua resposta, melhor apresentação e, obviamente, mais tempo nela. Melhor cobertura técnica também, e devo dizer que nunca ouvi falar de "cortinas de memória, caminhos seguros de mídia e módulos TP". O que é isso ??
v.oddou
@ v.oddou: Estes são elementos que podem ser usados ​​para DRM suportado por hardware. Um módulo TP é um chip de processador criptográfico. Muitos computadores modernos (2007 e posteriores) incluem um TPM. Uma cortina de memória permite criar seções de memória somente de gravação que não são legíveis até para o sistema operacional, especificamente para armazenar chaves para o TPM usar. Um caminho de mídia seguro é um sistema no qual o conteúdo viaja criptografado de ponta a ponta (até o display). Usando essas tecnologias corretamente está longe de ser trivial embora ...
Panda Pajama
Como um pequeno complemento, há um ótimo artigo sobre a proteção contra cópia do Spyro que discute muitas dessas coisas aplicadas a um jogo, junto com algumas justificativas e uma história interessante: gamasutra.com/view/feature/3030/keeping_the_pirates_at_bay .php
leander
Esta resposta é completamente errada. youtube.com/watch?v=FVVx5WYmO2s Sinalização para intervenção do moderador.
Krythic
@Krythic, que tal você mesmo escrever e depois?
Panda Pyjama
3

É muito fácil, você só precisa executar um MD5 ou SHA256 em seu próprio executável; quando detectar que a assinatura mudou do que você codificou no binário após criar a versão final, é claro que alguém cortou o seu executável. Então a maioria das empresas não mostra mais apenas um pop-up (era o caso antes) que diz "PE quebrado" ou "vírus detectado" e sai do jogo, porque isso será contra-rachado muito rapidamente, por hackers. Como o jogo está pausado no loop de mensagens da caixa de diálogo, é imediato ver por qual ramificação a caixa de diálogo foi exibida e ignorar a ramificação alterando o código na verificação de condição.

Hoje, as empresas usam mudanças muito sutis na jogabilidade, como multiplicar a vida dos monstros para tornar o jogo impossível de jogar, ou incrivelmente inteligente neste jogo de gerenciamento, onde você administra uma empresa de jogos e acaba perdendo porque muitos jogadores estavam pirateando seu jogo. Nice mise en abyme neste caso. Às vezes, apenas recebe uma bandeira vermelha carregada nos servidores da empresa e, quando você deseja chamá-los para obter suporte, recebe um discurso ou fica preso em revelar sua identidade.

mas isso é tudo tópico, a técnica é hash. e essas verificações podem ser executadas em muitos lugares no binário, de modo que, se os hackers encontrarem uma e a limparem, não será suficiente.

EDIT: Se você apenas copiar o jogo como está, ele poderá funcionar se o jogo não tiver nenhuma medida antipirataria. Ele estava trabalhando com jogos muito antigos, antes da era dos gravadores de CD. É por isso que, na maioria das vezes, o jogo precisa ser instalado para rodar, não apenas a pasta de instalação copiada. Isso envolve arquivos ocultos colocados um pouco em todo lugar no sistema e chaves de registro. O jogo verifica a presença dessas coisas, que só podem ser criadas pelo instalador. E o instalador só pode ser executado a partir do CD, que não é copiável por causa de bits irregulares que não respeitam o sistema de códigos de correção de erros nos primeiros bytes do disco, o que mata a maioria dos drivers de CD player. Alguns softwares de cópia, como o nero de álcool, propõem que você ignore os erros, mas o que eles queimam é uma cópia corrigida, o instalador detecta isso e pronto.

EDIT2:

P: como fazer o hash de um arquivo e depois inseri-lo no arquivo que altera o hash?

@ Byte56: Porra, estamos recebendo comentários inteligentes aqui :) Sim, é um paradoxo e não pode ser resolvido. Portanto, o hash deve ser feito por parte do binário que não contém o hash. E o código de verificação precisa saber disso, para excluir essa zona ao fazer o hash da verificação automática. Vi pessoas usando tags, como ~~ #### [colocar hash aqui] #### ~~ para incluir seu hash e fazer a exclusão. Mas ele tem a falha de ser fácil de detectar para hackers; portanto, o hash precisa ser embaralhado e espalhado em vários locais. Mesmo criptografada, por que não, e a mesma operação de camuflagem vai para armazenar a chave privada.

v.oddou
fonte
E se os arquivos do jogo forem copiados como estão? O hash não será validado neste caso?
Panda Pyjama
@PandaPajama: excelente observação. estou fazendo uma edição.
v.oddou
Como eles lidam com o hash de um executável e depois com a codificação embutida no hash do executável, alterando o hash?
MichaelHouse
@ Byte56: editado novamente :)
v.oddou
@MickLH: Devo dizer que gostei da sua resposta, porque concordo com a experiência deve levar as pessoas a naturalmente dar dinheiro por pura reverência. Pena que ele realmente não respondeu à pergunta e você foi derrotado (naturalmente, pode-se dizer). Você está sendo muito absoluto na chave privada. Essa chave privada não vale nada além de criptografia de hash; ela não tem um grande valor, como o banco de dados de cartões de crédito, por exemplo. Mas se você insistir, a soma de verificação poderá ser enviada na rede para verificação no servidor. Mas a segurança é tão forte quanto seu ponto mais fraco, e isso tem uma falha grave, um hacker
v.oddou
-5

não posso simplesmente colocar uma partição ext em um jogo mac

macs não pode ler ext

Alguém
fonte
Se houvesse um arquivo na partição necessário, o jogo não poderia ser executado. Se apenas a existência da partição era "prova" de que era uma cópia legítima, seria incrivelmente fácil de replicar.
Jesse Williams