Garantir que os dados salvos não foram editados em um jogo com componentes offline e online

8

Estou na fase de pré-planejamento da criação de um design de jogo e fiquei imaginando se havia uma maneira sensata de impedir as pessoas de editar salvamentos em um jogo com componentes offline e online.

O componente offline permitiria que o jogador jogasse o jogo e o componente online permitiria que eles jogassem contra outros jogadores, então eu precisaria garantir que as pessoas não editassem o código fonte / salvassem arquivos enquanto estavam offline para obter uma vantagem enquanto estiver online.

Jogo que provavelmente será desenvolvido em .Net ou Java, que infelizmente são fáceis de descompilar.

Omar Kooheji
fonte

Respostas:

10

Ser capaz de descompilar / fazer engenharia reversa do código do cliente facilmente é realmente apenas um pequeno obstáculo. Os hackers empreendedores têm dobrado os executáveis ​​à sua vontade (maliciosamente e não) por anos antes que linguagens de alto nível, triviais para descompilar, como o C # entrassem em cena. A segurança apenas através da obscuridade não é segurança nenhuma.

Quaisquer dados na máquina do usuário (código ou dados regulares de ativos) já estão essencialmente comprometidos. Você não pode realmente se proteger contra isso - se não quiser que as pessoas editem dados, não os coloque na máquina deles, salve-os em seus servidores. Da mesma forma, se você não quiser que eles modifiquem o código no cliente, verifique se o cliente não tem controle sobre nada de útil.

Se essa não for uma opção (por exemplo, o seu multiplayer é totalmente ponto a ponto), você pode fazer coisas como calcular hashes dos ativos relevantes e permitir que as pessoas brinquem apenas se os hashes corresponderem. Sim, alguém poderia criar com cuidado uma edição no executável, de modo que ele retornasse um hash diferente, mas tudo o que deveria significar é que o jogador infrator será dessincronizado e desconectado do jogo de maneira relativamente rápida, porque seus ativos não correspondem ao restante de os jogadores'.

Você também pode empregar um tipo de teste de "regras da maioria" que permite desconectar jogadores cuja simulação ficou fora de sincronia com outros jogadores, dando ao jogador "host" (quem iniciou o jogo) o voto de desempate.


fonte
3

Se todos os dados são gerados no lado do cliente, não há nada que você possa fazer sobre isso. Você não pode dizer a diferença entre uma edição feita pelo seu software e uma edição feita por alguém ou outra coisa que finge ser o seu software.

Um impedimento que você pode tentar é criptografar o arquivo salvo, usando uma chave no software. Infelizmente, se o usuário é bom o suficiente para editar um arquivo salvo, ele é bom o suficiente para encontrar a chave no seu software também.

Você pode impedir que as pessoas editem os salvamentos não os armazenando na máquina do cliente, por exemplo. enviando-os para o servidor - mas isso não os impede de fazer o upload de um salvamento hackeado em primeiro lugar! Os jogos online resolvem esse problema mantendo o estado autoritário do jogo em seu servidor o tempo todo, mas isso não funciona no modo offline.

Realmente, a resposta é não - tudo o que seu jogo pode fazer para editar, ocultar ou criptografar os dados também pode ser feito por um hacker.

Kylotan
fonte
Sei que isso é praticamente o que Josh já disse, mas eu tive uma interrupção na Internet e não pude postar isso há 30m atrás quando eu o digitei pela primeira vez!
Kylotan
1

Quando estávamos começando o desenvolvimento do nosso jogo atual, também queríamos ter o modo de jogo offline. A idéia era permitir que os jogadores jogassem nos níveis do jogo enquanto estavam offline e, de alguma forma, sincronizassem seu progresso quando ficarem online. Então, pensamos muito sobre como podemos evitar trapaças. A conclusão foi: não podemos. Não há realmente nenhuma maneira de deixar os jogadores jogar offline e ter 100% de certeza de que não trapacearam.

deixa pra lá
fonte
1

Uma solução simples usada com o download de arquivos é o hash. Hash o arquivo salvo e armazene essa "impressão digital" em algum lugar. Ao carregá-lo, faça o hash do arquivo e verifique a impressão digital. Se não corresponderem, o arquivo foi modificado.

Obviamente, se alguém decompilar seu código, não há nada que você possa fazer. Para esta resposta, isso significa que eles também podem armazenar o hash do arquivo salvo modificado.

Outra opção seria enviar a impressão digital para um servidor em algum lugar, onde o usuário final não poderá modificá-la manualmente se tiver modificado o arquivo salvo. É semelhante ao que o iTunes faz ao restaurar imagens do iPhone.

ashes999
fonte