Quais são as vantagens de ofuscar código de liberação?


12

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?


1
Simplificando, a ofuscação muda a economia da engenharia reversa do seu código, nada mais.
Mark Booth

Respostas:


22

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. :)


3
Interessante, eu nunca soube que eles vieram com "pilha traço un-ofuscação" (sem nunca ter usado um ofuscador) ... o que uma idéia legal :-)
Dean Harding

1
A única desvantagem que eu já vi é, ocasionalmente, um ofuscador (um do .NET neste caso) ofuscou-o até o ponto em que o jitter não conseguia nem lê-lo (instruções ilegais). Falha maciça.
precisa saber é o seguinte

@vcsjones: Isso não é realmente ofuscação então ...
configurador

3
  • protegendo sua propriedade intelectual

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.


Se for necessário usar um ofuscador para tais otimizações, o compilador em uso deve ser um software realmente preguiçoso.
Phresnel 6/07

@phresnel: Sim obfuscator pode fazer um trabalho muito bom

@phresnel: incompleta, provavelmente, mas de baixa qualidade ...

Você está certo. Deixe-me repassar.
Phresnel 6/07

1
Não é que eu não acredite em você; Eu faço! Mas todas essas otimizações geralmente também são exercidas por compiladores modernos. Pelo menos eu sei que o gcc tem todos eles. Portanto, minha opinião é: se um ofuscador realmente fornecer uma aceleração significativa, o compilador [fornecedor] não se esforçou o suficiente ou não recebeu os sinalizadores de otimização apropriados.
Phresnel #
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.