Como decompilar jogos no Unity3D

Decompilar somente para uso pessoal

Posted by     "rbits" on Wednesday, March 24, 2021

TOC

Documentos

Um recurso que todo desenvolvedor deveria conhecer é possibilidade de engenharia reversa de seu código. Esse processo de voltar ao fonte dos arquivos que foram usados para desenvolver o programa é chamado de decompilação.

Normalmente os programas são criados baseados em linguagem de programação que traduzem o texto que contém os comandos e a lógica do programa para a versão binária inteligível para o processador do seu computador.

Durante esse processo, a maior parte do código fonte original é perdido.  Os comentários e indentações são completamente removidas pois não fazem sentido para os computadores. Frequentemente o código binário é otimizado por esse processo para melhorar o desempenho na execução pelo processador do seu computador.

Esse processo é chamado de decompilação que permite por meio do arquivo executável obter o código fonte criado pelo desenvolvedor do programa. Com esses arquivos fontes que são baseados em textos.

Você pode aprender muito com exemplos baseados em programas já prontos. O uso de código total ou parcial está em desacordo com as regras de direito autoral. Nem todo o programa pode ser retornado para o fonte com os códigos em linguagem de alto nível, pois depende da linguagem utilizada para compilar o programa. As linguagens de alto nível são baseadas em comandos que fazem mais sentido para os humanos que para o processador do seu computador. Exemplo, A linguagem C# da Microsoft é fácil de ser entendida e interpretada por humanos. Ao contrario Assembler tem seus comandos voltados para o código próximo da linguagem binária do processador.

Existe um ampla opções de linguagens de programação. Algumas como C++  são compiladas ou seja traduzem previamente um código texto para a linguagem binária do processador.  Os programas gerados tem melhor desempenho e ficam menos sujeitas a esse processo de decompilação de todo o projeto. Entretando as linguagens que fazem uso de uma linguagem intermediaria como C# ou Java não geram exatamente o código binário utilizado pelo processador de seu computador mas uma linguagem intermediaria (IL) que facilita a engenharia reversa do código binário para o fonte original.

Esse código fonte é o texto com os comandos da linguagem C# que foi digitado no seu projeto durante o uso da ferramenta de desenvolvimento como Microsoft Visual Studio.

Aqui vamos tratar do processo de decompilação de um programa criado pela ferramenta Unity utilizada para criação de jogos e fazendo uso da Linguagem C#.  Unity é a empresa que desenvolve uma ferramenta Unity3D para criação de jogos 2D e 3D.  Quando você executada qualquer programa, todo o código para que o programa seja executado corretamente está armazenado no seu computador. Ao compilar um jogo para Windows fazendo uso do ambiente Unity3D  todos os recursos já compilados ficam armazenados na pasta Managed da area de dados do jogo. Fisicamente a informação sobre o jogo fica armazenada em um conjunto de DLLs gerada pela Unity.  Mas precisamente estamos interessados em tres DLLs: Assembly-CSharp.dll, Assembly-CSharp-firstpass.dll and Assembly-UnityScript.dll.

Explorar o conteudo de cada uma delas é possivel com a ferramenta correta como os programas ILSpy ou dotPeek que são gratuitos. Algumas contramedidas podem ser implementadas pelo desenvolvedor para dificultar um hacker interessado no seu aplicativo de seu codigo .NET. Uma solução seria usar um obfuscador como o oferecido na Unity Store. Apesar da solução funcionar, muitas classes que são referencidas externamente dessa DLL não podem ser renomeadas sob risco de perda da conexão. Se seu código, não aceita essa solução, ele pode ser movido para o servidor. Portanto, atualizar os escores do andamento do jogo localmente não é a solução, visto que um hacker pode altera-lo em proveito proprio.

Documentos

ILSpy dotPeek Alanzucconi A practical tutorial to hack (and protect) Unity games

Perguntas Mais Frequentes