Pergunta

Parece-me que o ofuscamento é uma ideia que se enquadra em algum lugar no campo da “segurança pela obscuridade” ou da “falsa sensação de proteção”.Para proteger a propriedade intelectual, existem os direitos autorais;para evitar que problemas de segurança sejam encontrados, há corrigindo esses problemas.Em suma, considero-o uma solução técnica para um problema social. Isso quase nunca funciona.

No entanto, parece que sou o único em nossa equipe de desenvolvimento que se sente assim, então estou errado ou só preciso de argumentos convincentes.Nosso produto usa .NET e um desenvolvedor sugeriu o .NET Reactor (que, aliás, foi sugerido neste tópico SO também).

O .NET Reactor interrompe completamente qualquer descompilação misturando qualquer assembly .NET puro (escrito em C#, VB.NET, Delphi.NET, J#, MSIL...) com código de máquina nativo.

Então, basicamente, você joga fora todas as vantagens do bytecode de uma só vez?

Existem bons Engenharia benefícios para ofuscação?

Foi útil?

Solução

Postei uma pergunta que pode ajudá-lo, pois discute alguns dos problemas:devo-estar-preocupado-com-ofuscar-meu-código-de-rede

Outras dicas

Você perguntou por motivos de engenharia, portanto, estritamente falando, isso não é uma resposta à pergunta.Mas acho que é um esclarecimento válido.

Como você disse, a ofuscação visa resolver um problema social.E os problemas sociais (ou empresariais), ao contrário dos problemas técnicos, raramente têm uma solução completa.Existem apenas graus de sucesso na abordagem ou minimização do problema.

Nesse caso, a ofuscação aumentará as barreiras para alguém descompilar e roubar seu código.Isso desencorajará ataques casuais e, por inércia, poderá diminuir a probabilidade de roubo de sua propriedade intelectual.Para fazer uma analogia cansativa, um imobilizador não evita que seu carro seja roubado, mas tornará isso menos provável.

É claro que há um custo na manutenção, (possivelmente) no desempenho e, o mais importante, em tornar mais difícil para os usuários enviarem relatórios de bugs com precisão.

Como disse o GateKiller, a ofuscação não impedirá que uma determinada equipe se descompile, mas (e depende de qual é o seu produto) quão determinada é a probabilidade de uma equipe atacar você?

Portanto, esta não é uma solução técnica para um problema social, é uma decisão técnica que acrescenta influência a uma estrutura social complexa.

Se uma grande equipe de programadores realmente desejasse obter seu código-fonte e tivesse tempo, dinheiro e esforço, então eles teriam sucesso.

A ofuscação, portanto, deve impedir que pessoas que não têm tempo, dinheiro ou esforço para obter sua fonte possam telefonar para elas.

Se você se limitar à ofuscação pura do código gerenciado, poderá reduzir bastante o tamanho do assembly, e nomes de classes/funções ofuscados (recolhidos em letras únicas) significam menor consumo de memória.Isso quase sempre é insignificante, mas tem um impacto (e é usado) em alguns dispositivos móveis/incorporados (embora principalmente em java).

Um benefício potencial de engenharia é que, em alguns casos, a ofuscação pode criar executáveis ​​menores ou outros artefatos – por exemplo.ofuscar o javascript resulta em arquivos menores (porque todas as variáveis ​​são nomeadas "a" e "b" em vez de "descriptiveNameOne" e todos os espaços em branco são removidos, etc.).Isso resulta em tempos de carregamento mais rápidos para páginas da web que usam javascript ofuscado.Obviamente, isso não se aplica (tanto) ao mundo .NET, mas é um exemplo de situação em que há um benefício direto de engenharia.

Embora não esteja relacionado ao .net, eu consideraria a ofuscação em Javascript e, possivelmente, em outras linguagens interpretadas.Javascript se beneficia bem da ofuscação porque reduz a largura de banda necessária e os tokens que o analisador precisa ler.

Mas ofuscar o bytecode compilado não parece tão útil para mim.Quero dizer, o que você tentaria alcançar?Só consigo ver que a ofuscação é um pouco útil no código de verificação de licença para evitar que seja contornada com muita facilidade.

O principal motivo para usar a ofuscação é proteger a propriedade intelectual, conforme você indicou.Geralmente, é muito mais econômico para uma empresa comprar um produto de ofuscação como o .NET Reactor do que tentar fazer cumprir legalmente seus direitos autorais.

A ofuscação também pode fornecer outros benefícios mais incidentais, como melhorias de desempenho e redução do tamanho da montagem.Esses seriam os Engenharia benefícios que você procura.

Use criptografia para proteger as informações no caminho.

Use ofuscação para proteger informações enquanto seu programa ainda as possui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top