Pacote de conteúdo personalizado para arquivos


13

Estou prestes a comprar alguns pacotes de modelos de um site para criar um protótipo do meu jogo. No contrato, afirma que devo protegê-los para impedir que o público obtenha acesso a eles.

Lembro-me de trabalhar com os jogos da Valve, eles usavam .gcf (arquivo de conteúdo do jogo) que basicamente era um arquivo de todo o conteúdo de cada jogo. Eles embalados em som / materiais / modelos / mapas / etc. Achei que não seria uma má idéia desenvolver algo parecido com isso e apenas escrevi uma pequena ferramenta para me permitir adicionar / remover arquivos dela.

O problema é que eu realmente não tenho ideia de como começar algo assim. Eu tentei o Google, mas nem sabia o que procurar. Se alguém tiver alguma idéia, links que possam ser úteis ou qualquer outra coisa, eu agradeceria muito.

Respostas:


9

Armazene seus dados em um formato de arquivo um pouco obscuro, como o 7-Zip .

Dê a eles uma extensão de arquivo diferente para que um usuário casual não possa abri-los facilmente com seu programa zip.

Use physfs para ler e acessar esses arquivos. Ele também permite que você trabalhe com arquivos em seu diretório local, para que você possa testar facilmente novos recursos sem reconstruir seus pacotes. Altamente recomendado.

Considere criptografia muito trivial no conteúdo, por exemplo. Criptografia XOR . Escreva um pequeno arquivo ou script em lote para criar seus pacotes, criptografando os dados conforme eles entram e use a mesma função para descriptografar os dados em seu jogo.

Isso não manterá um usuário determinado fora - nada o fará. Mas será bom o suficiente para satisfazer os requisitos dos seus pacotes de modelos.


Alguém me recomendou physfs na outra noite. Pequena biblioteca agradável.
greyfade

8

Se você está apenas criando um protótipo, não me preocupo em compactar seus ativos em um arquivo GCF / ZIP / PAK; o público não vai ver o seu protótipo!

Além disso, o GCF da Valve fornece tanta proteção para o seu conteúdo quanto um arquivo ZIP - isto é, zero. O arquivo não está criptografado; você pode baixar o GCFScape para navegar e extrair seu conteúdo.

Não vale a pena se esforçar para criar seu próprio sistema de arquivos de pacote, a menos que você tenha necessidades específicas no momento que não estejam sendo atendidas por arquivos ZIP ou pelo próprio mecanismo de acesso a arquivos do sistema operacional; de fato, as únicas razões pelas quais consigo pensar são:

  • Ofuscação de conteúdo (manter seus arquivos livres de ajustes tem seus usos; eu ainda sugiro seu exagero para suas necessidades atuais),
  • Armazenando metadados adicionais por arquivo de uma maneira específica do jogo para ajudar a direcionar os dados de seu conteúdo de alguma maneira,
  • Como contornar as limitações do sistema de arquivos do sistema operacional, como a necessidade de acessar milhares de arquivos pequenos rapidamente ou garantir o acesso a dados contíguos. (Essa é uma necessidade definitiva ao trabalhar em consoles.)

Eu concordo completamente. O problema é que não poderei lançar uma demonstração sem alguma forma de proteção. O ZIP é muito conhecido, o PAK é praticamente o mesmo. Pelo menos com um formato personalizado (a Valve exige uma chave CTX que é codificada no mecanismo do jogo para acessar os arquivos GCF), o joe médio não será capaz de executar apenas uma ferramenta de extração e entrar.
Aidan Knight

Woops, não percebi que a entrada não iria descer uma linha. De qualquer forma, encontrei este nemesis.thewavelength.net/index.php?p=35, que parece ser um Lib de código aberto que fornece funcionalidade GCF independente dos jogos da Valve. O problema que vejo aqui é que ele é muito robusto e estava procurando algo um pouco mais simples apenas para criar uma versão básica para expandir posteriormente. (Para ser honesto, a maneira como ele codifica faz minha cabeça doer) #
Aidan Knight

4
Por curiosidade, este contrato menciona como você deve proteger o conteúdo deles?
Blair Holloway

2
essa é a questão! Como você não pode protegê-lo, é obrigatório que você (se você não é burro) saiba exatamente o que esses incompetentes querem que você faça. Caso contrário, faça o que fizer, uma vez que não funcionará, você poderá ser responsabilizado (por não fazer algo que não poderia ser feito em primeiro lugar).
o0 '.

3

Esse requisito é, bem, besteira.

Como o jogo pode acessar os dados e o usuário tem acesso ao jogo, se ele for habilidoso e determinado o suficiente, ele poderá fazer engenharia reversa no formato usado para armazenar os dados e pegar a chave eventual, se você for suficientemente tolo. para criptografá-lo.

Você não pode adicionar segurança. Repito: você simplesmente NÃO PODE adicionar segurança . Você só pode adicionar obscuridade, e a obscuridade é totalmente inútil, pois - como eu disse - um usuário com habilidade e determinação suficientes apenas a quebrará.

Não assine nada que lhe pergunte algo que não pode ser feito.


1
A obscuridade não faz sentido porque a maioria dos usuários não tem "habilidade e determinação suficientes". O mesmo vale para a segurança da sua casa: quem realmente quiser entrar pode fazê-lo, mas ainda assim vale a pena torná-lo estranho para eles.
Kylotan

Contraponto: a obscuridade é inútil porque, ao contrário de invadir sua casa, uma vez que alguém invadiu seu jogo, pode ser trivial para qualquer outra pessoa fazê-lo. (Por outro lado - obscuridade não é inútil, porque Brett precisa dos modelos que eu só não acho que a analogia mantém-se bem..)

Se alguém rouba um pedaço de ouro da sua casa, ele tem o seu pedaço de ouro. Se alguém pegar seu precioso modelo do seu arquivo de dados, ele poderá fazer quantas cópias desejar. Portanto, não, este exemplo não funciona, pois aqui não importa quantas pessoas quebram sua proteção inútil: uma é suficiente.
o0 '.

Um é o suficiente, supondo que os outros se importem o suficiente para parar de olhar os arquivos locais e ficar online para procurar, e fornecendo que alguém se esforce para publicar as coisas on-line (o que é ilegal, enquanto a exibição da cópia local não é) ou publicar instruções, que pressupõem que você tenha paciência para segui-las. Todo pequeno ajuda.
Kylotan

1
Cada pequena ajuda para quê ? Impedir que os usuários assistam seus dados e não façam nada a respeito é tão inútil que me deixa triste. Esse requisito idiota certamente existe para impedir que outras pessoas reutilizem esses dados, então você só precisa se preocupar com pessoas determinadas que se esforçarão e terão sucesso (porque, como eu disse, a longo prazo, elas simplesmente não podem falhar) .
o0 '.

1

Muitas vezes, percebo que os pacotes de conteúdo personalizado tendem a ser um arquivo .zip ou .rar com uma extensão diferente. Obviamente, isso não é bom se o site desejar algum tipo de criptografia personalizada.


Sim, o Ogre já suporta o carregamento de recursos via arquivo zip. Alguém mencionado em uma sala de bate-papo apenas passou a senha do arquivo zip, mas com a quantidade de ferramentas disponíveis para quebrá-los, realmente não é minha primeira escolha. Eu realmente gostaria de fazer algo parecido com os arquivos .gcf que a Valve usa, mas nem sei o que procurar até o início.
Aidan Knight

Se alguém quebrar seu arquivo zip, como é esse o seu problema? Realmente. Eles podem quebrar qualquer coisa que você possa jogar neles. Você tentou. Onde você define a linha pela qual esses licenciadores podem responsabilizá-lo?
Neverender

1

Algumas idéias:

1] Você usou um formato de modelo padrão (por exemplo, obj ou .x) ou usa um formato de modelo personalizado ao carregar diretamente no seu jogo? Se você possui um formato personalizado, e seria necessário fazer a engenharia reversa do formato do modelo para obtê-lo de forma útil, então você já tem algum nível de proteção contra o estripador de recursos oportunista.

2] O ponto de vista de Kylotan sobre a criptografia XOR é excelente, exceto para observar que você pode criptografar usando uma sequência gerada por número pseudo-aleatório (possivelmente propagada por um hash no nome do arquivo) para evitar longas sequências de zeros nos dados de origem, mostrando sua cadeia de criptografia. É claro que você teria que descriptografar seus arquivos imediatamente após o carregamento, mas dividir seu arquivo criptografado em blocos reinicializáveis ​​permitirá iniciar a descriptografia no local em vários threads, se isso realmente se tornar um fardo para o tempo de carregamento . Mas duvido seriamente que esse nível de "proteção" seja necessário - particularmente, como outros já disseram, o estripador determinado irá contorná-lo. por exemplo. interceptando as chamadas de empate usando uma biblioteca de desvio DLL e lendo os buffers de vértice / buffers de índice diretamente.

3] Você precisaria perguntar ao provedor de ativos original sobre os requisitos de proteção, mas poderia ser apenas uma questão de adicionar detalhes sobre os direitos autorais de ativos à tela inicial do programa e / ou ao EULA.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.