Mais e mais jogos estão seguindo a rota orientada a dados, o que significa que é preciso haver uma camada de segurança para facilitar a manipulação. Eu já vi onde os jogos agrupam completamente seus ativos (áudio, arte, dados) e eu estou imaginando como eles estão gerenciando isso. Existem aplicativos / bibliotecas que agruparão e ajudarão você a gerenciar os ativos? Caso contrário, existem bons recursos que você apontaria para empacotar / descompactar / criptografar?
Essa pergunta específica gira em torno de C ++, mas eu ficaria aberto para saber como isso é gerenciado também em C # / XNA.
Só para esclarecer: não pretendo criar uma solução para evitar hackers. No nível fundamental, todos nós estamos manipulando zeros e zeros. Mas, queremos impedir que 99% das pessoas que jogam o jogo simplesmente modifiquem arquivos XML usados para criar o mundo do jogo. Eu já vi muitos jogos agruparem todos os seus recursos. Estou simplesmente curioso sobre os métodos que eles estão usando.
fonte
Respostas:
Uma boa estratégia é criar seu próprio formato de arquivo do zero e torná-lo indexado com uma tabela apontando para blocos de dados em vez de armazenar arquivos seqüenciais inteiros no seu arquivo, criptografar sua tabela de índice e compactar cada bloco separadamente usando LZMA / Bzip2.
Outra abordagem é usar bits de geradores de dados procedimentais aqui e ali (se você quiser ir tão longe, pode até obter os 'parâmetros' para esses geradores a partir de um servidor on-line como uma medida extra), e descarregando parte do trabalho para a GPU, você também pode evitar despejos de memória cheia e compensar parte do desempenho perdido.
No entanto, acho que essas técnicas geralmente atrapalham o desempenho e desperdiçam o tempo de desenvolvimento, oferecendo, ao mesmo tempo, nada ao usuário final, além de problemas em potencial e bugs desnecessários.
No entanto, nada é 100% seguro.
fonte
Não envie dados confidenciais.
Não há como enviar dados criptografados para que apenas o jogo possa acessá-los. Você pode se esforçar muito, mas rapidamente se depara com os problemas de DRM.
Se você deseja manter os ativos do jogo longe de olhares indiscretos.
xor
o arquivomy_level.zip.xor
, não usemy_level.map
).Isso impedirá 95% dos usuários variados. Os outros 5% vão conseguir, não importa o que você faça.
Você não precisa realmente zipar e
xor
. Em vez disso, você pode usar o lzma e usar o AES com uma chave conhecida. O ponto é não gastar muito tempo com isso.fonte
That will stop 95% of mischeivieous users.
de quebrar, enquanto eu acredito que ainda há pessoas que realmente entenderão que eu apreciaria se não todos e cada um puder. Estes dias mais 10 crianças antigos y saber como os arquivos abertos no bloco de notas e renomeá-lo ...Passar uma grande quantidade de tempo com isso é provavelmente tolo. Existem ferramentas para capturar dados de textura e modelo diretamente da GPU, e os sons podem ser facilmente apontados para um dispositivo de loopback virtual. Qualquer coisa que precise ser realmente segura precisa viver em um servidor e funcionar apenas por meio de desafio / resposta. A validação de dados do cliente é outra história, algo mais parecido com -verify_all da Valve. Isso ainda é difícil, já que você não pode confiar no executável local para aplicá-lo (ou pelo menos não pode confiar mais nele do que no seu sistema anti-fraude de ponto final, que também é uma idéia boba).
fonte
Meu trabalho é em software antitérmico. Conheço alguém que é um viciado em jogos da velha escola. Ele quebra jogos como respirar. Você não pode parar pessoas como ele. Se o seu jogo for popular o suficiente, várias versões quebradas do seu jogo atingirão os sites de torrent apenas alguns dias após o lançamento, independentemente do que você faça. Meu conselho é fazer apenas o mínimo necessário para impedir que Joe comum ache que ele pode querer dar uma facada nessa coisa de engenharia reversa.
fonte
Boa pergunta, mas isso está longe de ser fácil de responder.
Da minha experiência com segurança de dados, você deve pensar no seguinte:
1) O que você está protegendo, de quem e qual é o impacto se esses dados são inseguros - a segurança é muito mais sobre avaliação de riscos do que soluções técnicas sistemáticas
2) Presumo que sua plataforma seja desktop (por exemplo, Windows / OSX). um espaço de problema diferente do hardware proprietário, como o PS3 / Xenon, que possui suas próprias tentativas de segurança no nível do kernel (se esta é uma solução válida aberta para debate)
3) Criptografia! = segurança. A criptografia garante apenas que seus dados não possam ser lidos , não garante que seus dados não possam ser gravados ou reproduzidos / executados em proxy.
Se seus requisitos são para tornar seus dados à prova de adulteração, você precisa pensar em fazer um hash de dados (de preferência com SHA-256 ou SHA-512). sistema.
Também vale a pena saber que a adição de tecnologia de criptografia ao seu produto pode ter implicações legais devido a restrições de exportação (a tecnologia de criptografia é classificada como tecnologia com grau de armas restrito, acredite ou não), portanto, é recomendável usar bibliotecas que superem esses problemas legais.
Finalmente - nunca, nunca role sua própria tecnologia de criptografia - use algoritmos conhecidos, documentados e pesquisados, como AES, Blowfish, RSA etc.
ps A chave pública / privada não é adequada ou prática para criptografar grandes quantidades de dados, portanto, o DRM / PGP etc. usa um sistema simétrico RSA + híbrido , ou seja, segura a chave simétrica com o RSA e, em seguida, criptografia simétrica padrão usando essa chave
É um assunto complexo muito grande e eu definitivamente não fiz justiça
espero que ajude
fonte
Se você deseja um exemplo de um formato que foi projetado e construído (provavelmente com excesso de engenharia) por ser pequeno (compressível), ridiculamente seguro e flexível, você deve procurar o formato MPQ da Blizzard.
http://wiki.devklog.net/index.php?title=The_MoPaQ_Archive_Format
O layout geral do arquivo morto é o seguinte:
Dados do arquivo de cabeçalho do arquivo morto Dados do arquivo - arquivos especiais Tabela de bloco de tabela hash Tabela de bloco estendido Assinatura digital forte
Este formato tem TUDO. Tabela de blocos, tabela de blocos estendida, dados divididos em setores (para fácil transmissão), suporte para 7 (!) Algoritmos de compactação (se você contar com compactação de som) que podem ser combinados arbitrariamente, assinatura digital fraca, assinatura digital forte e assim por diante.
Se você comprasse a API da Blizzard que lida com a arquitetura de arquivos, obteria tudo o que precisa e muito mais.
fonte
Como isso foi ressuscitado recentemente, sua pergunta (e, portanto, todas as respostas até agora) parece lidar apenas com o carregamento do arquivo, que é tão seguro quanto o executável que deseja carregá-lo. No PC, não há nada que seja realmente seguro (você apenas atrasa as pessoas); você pode verificar as coisas nos servidores, mas mesmo essa verificação pode ser removida para que exe modificados possam ser executados, não importa o que aconteça. Os consoles ainda são "bastante" seguros, portanto, na maioria dos casos, gero um hash de arquivos importantes, assino o hash com uma chave privada, incorporo a chave pública no código e verifico o hash seguro no arquivo.
Pensei em lançar outro ataque à conversa, algo que só me deparei no ano passado, pois não costumo enviar muito para o PC. O Cheat Engine é um pequeno programa muito arrumado que quase automatiza a criação de seus próprios hacks (o que significa que qualquer um pode usá-lo). É bastante avançado no que pode fazer, muitos truques / truques que vi pessoas venderem são feitos por isso ou algo muito parecido com o que vi (todos os do mercado de massa). Com algum trabalho que você pode proteger contra coisas assim novamente, acho que tudo depende de quão popular é o jogo e se alguém se importa o suficiente para se incomodar.
Opps, esqueci de mencionar uma boa lib para criptografia (em C ++) é o LibTomCrypt .
fonte