O exemplo específico que tenho em mente envolve o jogo atualmente alfa do Minecraft, mas essa é uma pergunta geral que acho que merece alguma conversa.
O Minecraft é escrito em Java e os rastreamentos de pilha geralmente se parecem com este (exemplo real):
java.lang.NullPointerException
at d.a(SourceFile:247)
at gi.b(SourceFile:92)
at bd.a(SourceFile:33)
at bn.a(SourceFile:69)
at bn.e(SourceFile:115)
at bn.d(SourceFile:103)
at net.minecraft.client.Minecraft.i(SourceFile:1007)
at net.minecraft.client.Minecraft.run(SourceFile:596)
at java.lang.Thread.run(Unknown Source)
Obviamente, esses não são os nomes reais de pacotes e métodos que o desenvolvedor usa quando escreve. Como ele está em um estágio alfa, parece que o desenvolvedor gostaria de poder entender seus rastreamentos de pilha, especialmente se alguém puder fornecer um para um relatório de bug. Como está, não tem sentido.
Que vantagem alguém poderia esperar obter ofuscando seu código assim que supera os inconvenientes de uma identificação de bug mais difícil?
obfuscation
StrixVaria
fonte
fonte
Respostas:
Também ofuscamos nosso código Java ...
A vantagem é que dificulta a engenharia reversa (se você está preocupado com alguém que rouba sua base de código e a usa como base para criar um produto concorrente semelhante, por exemplo, etc).
Você pode recuperar o rastreamento de pilha original: existem ferramentas de ofuscação que criam arquivos de referência especiais que você pode usar para executar os rastreamentos de pilha ofuscados e sai com o rastreamento de pilha de origem original. Eles são gerados pelo próprio processo de ofuscação, portanto, você não pode recuperar o rastreamento da pilha original, a menos que tenha em mãos o arquivo de referência usado para ofuscar o código em primeiro lugar.
Isso realmente não tem desvantagens. :)
fonte
A maioria dos ofuscadores também otimiza seu código , remove metadados inúteis ou códigos não utilizados, compactação, eliminação de código morto ou eliminação duplicada.
fonte