Digamos que eu criei um programa simples que utiliza um arquivo .dat
criptografado em formato binário , depois descriptografo-o em uma matriz de bytes e, em seguida, tudo é reescrito novamente no arquivo descriptografado.
Por exemplo:
Eu criei um algoritmo de criptografia binária. => 0100100001100101001000000110100001100101011000 ...
Mas isso é muito, muito fácil de descriptografar ...
Existe alguma maneira de, se possível, não precisar de nenhum tipo de chave, criptografar meu progresso de salvamento?
encryption
binary
Daniel Béjar
fonte
fonte
Respostas:
Em geral, você nunca deve inventar seus próprios algoritmos criptográficos, a menos que tenha pelo menos um doutorado em matemática e ciência da computação. Mas existem muitos bons algoritmos de ações que não têm ataques conhecidos e têm implementações gratuitas em muitas linguagens de programação. Por exemplo, RC5, AES ou Blowfish. Dependendo da tecnologia que você usa para desenvolver seu jogo, ela pode até oferecer criptografia segura pronta para uso.
No entanto, a questão é se criptografar savegames é uma boa idéia.
Primeiro, quando o seu jogo é executável, é necessário criptografar e descriptografar, você deve incluir o algoritmo e a chave no executável do jogo. Isso significa que um hacker determinado pode encontrá-los, extraí-los e usá-los para criar um editor de jogos salvos. Portanto, nunca pode ser 100% seguro.
Segundo, por que você quer fazer isso de qualquer maneira? Quando é um jogo online, você deve armazenar o estado do jogo online onde os jogadores não podem modificá-lo. Quando é um jogo offline, por que se preocupar? Um trapaceiro só pode prejudicar sua própria experiência de jogo na pior das hipóteses. Os jogadores honestos que desejam desfrutar do seu jogo como pretendido não serão afetados por isso. Por outro lado, permitir que os jogadores trapaceiem pode agregar valor ao seu jogo. Ele permite que os jogadores experimentem o jogo de uma maneira diferente, o que pode apenas aumentar sua diversão a longo prazo.
fonte
Para criptografar e descriptografar localmente, você precisará armazenar a chave em seu programa, para que as pessoas possam decifrar a criptografia se desmontarem seu código. Existem truques para ofuscar as chaves, mas mesmo com aqueles que um atacante dedicado encontra a chave e a publica on-line para todos aqueles que são menos dedicados a ver. A única coisa que a criptografia impede são as pessoas que usam um editor hexadecimal - você pode facilmente impedir isso com a compactação e qualquer coisa que torne o arquivo ilegível por um programa de descompactação. Por exemplo, adicione um byte na frente dos dados.
Como alternativa, você pode anexar o md5 do savefile no final do arquivo, para perceber se um arquivo foi violado. Em seguida, você pode usá-lo para recusar o carregamento do savegame ou para sinalizar os tickets de suporte adequadamente, para não perder tempo com problemas causados por savegames modificados manualmente. Novamente, é trivial contornar qualquer pessoa que possa ler seu código.
Se você quiser algo que não possa ser contornado por alguém que tenha acesso aos binários no dispositivo, será necessário executar parte do programa em um servidor, que está sob seu controle.
Para responder à sua última pergunta, um tipo de chave mais criptografia apenas identifica o algoritmo exato que precisa ser aplicado para criptografar / descriptografar. Você não pode criptografar / descriptografar dados sem um algoritmo que defina como fazer isso.
fonte
Armazene um hash SHA256 transformado dos dados salvos reais no arquivo salvo.
Compare o hash armazenado com o valor SHA256 dos dados ao carregá-lo.
Se isso não corresponder, eles trapacearam ou corromperam o arquivo.
Edite para esclarecer: isso dificulta a quebra do sistema anti-fraude, mas ainda é possível .
fonte
Eu usaria um algoritmo de criptografia padrão (porque dificulta a análise de criptografia no arquivo salvo), mas não um dos cinco principais mais usados, e o ocultaria em todo o seu código (porque dificulta a compreensão de qual algoritmo ele é e onde está a chave.)
Para ocultar o algoritmo de criptografia em seu código: pegue uma versão de código aberto, entenda seu fluxo (que funções chamam outras pessoas em que sequência), renomeie todas as variáveis, campos de estrutura e nomes de funções (apenas para ter certeza) e espalhe as funções em toda a sua base de código, em diferentes objetos e módulos, possivelmente também separando sua execução temporalmente (execute uma parte da criptografia, faça outra coisa e depois que alguns ms retornem a partir de uma parte de código aparentemente não relacionada e execute outra fase da chave e assim por diante.) A chave pode estar oculta da mesma maneira, como um número de constantes aparentemente não relacionadas em todas as suas classes, que são acessadas em tempo de execução pelas várias partes ocultas do algoritmo de criptografia.
Se tudo isso faz sentido economicamente é outro tópico.
fonte