Pergunta

Eu estava pensando em ofuscar um aplicativo comercial .Net.Mas vale realmente a pena o esforço para selecionar, comprar e usar tal ferramenta?Os binários ofuscados estão realmente protegidos contra engenharia reversa?

Foi útil?

Solução

Talvez você não precise comprar uma ferramenta - o Visual Studio.NET vem com uma versão comunitária do Dotfuscator.Outras ferramentas gratuitas de ofuscação estão listados aqui, e eles podem atender às suas necessidades.

É possível que os binários ofuscados não estejam protegidos contra engenharia reversa, assim como é possível que a trava da sua bicicleta seja quebrável/quebrável.No entanto, muitas vezes acontece que um pequeno inconveniente é suficiente para dissuadir os ladrões de códigos/bicicletas.

Além disso, se chegar a hora de fazer valer seus direitos a um trecho de código em tribunal, ter sido visto fazendo um esforço para protegê-lo (ofuscando-o) pode lhe dar pontos extras.:-)

Você deve considerar as desvantagens - pode ser mais difícil usar reflexão com código ofuscado, e se você estiver usando algo como log4net para gerar partes de linhas de log com base no nome da classe envolvida, essas mensagens podem tornar-se muito mais difícil de interpretar.

Outras dicas

Lembre-se de que a ofuscação é apenas uma barreira para o examinador casual do seu código.Se alguém quiser realmente descobrir o que você escreveu, será muito difícil impedi-lo.

Se você tiver segredos em seu código (como senhas), você está fazendo isso errado.

Se você teme que alguém possa produzir seu próprio software com suas ideias, terá mais sorte no mercado fornecendo novas versões que seus clientes desejam, com suporte técnico e sendo um parceiro deles.Bons negócios vencem.

Em nossa empresa avaliamos diversas tecnologias de ofuscação diferentes, mas todas apresentaram problemas.O maior problema é que confiamos muito na reflexão, por ex.para criar grades dinamicamente com base em nomes de propriedades.

Então, todos os ofuscadores renomeiam as coisas, você pode desativá-los, é claro, mas você perde muitos benefícios da ofuscação.

Além disso, em nosso código, temos muitos testes NUnit que dependem de muito mais métodos e propriedades serem públicos, o que impediu que alguns dos ofuscadores pudessem ofuscar essas classes.

No final, decidimos por um produto chamado Reator .NET

Funciona muito bem e não temos nenhum dos problemas associados aos outros produtos.

"Em contraste com os ofuscadores, 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.Em detalhes, o .NET Reactor constrói uma barreira nativa entre hackers em potencial e seu código .NET.O resultado é um arquivo padrão baseado no Windows, não compatível com MSIL.O código .NET original permanece intacto, bem protegido pelo código nativo e invisível para olhares indiscretos.O código .NET original não é copiado no disco rígido em nenhum momento.Não existe nenhuma ferramenta capaz de descompilar assemblies protegidos pelo .NET Reactor."

O fato de você realmente poder fazer engenharia reversa não torna a ofuscação inútil.Isso eleva significativamente a fasquia.

Um assembly .NET não ofuscado mostrará toda a fonte, destacada e tudo apenas baixando o Refletor .NET.Adicione ofuscação a isso e você reduzirá significativamente a quantidade de pessoas que poderão modificar o código.

Depende de você você está se protegendo.Se você enviá-lo sem ofuscação, você também pode abrir o código do aplicativo e se beneficiar do marketing.Enviá-lo ofuscado apenas permitirá que as pessoas gerem binários modificados com relativa facilidade por meio de patches, em vez de roubar seu código e criar um concorrente direto.Obter a fonte real do código ofuscado é muito difícil, dependendo do ofuscador, é claro.

Acho que depende do tipo do seu produto.Se for direcionado para uso por desenvolvedores - a ofuscação prejudicará seus clientes.Temos usado os produtos ArcGIS no trabalho e todas as DLLs estão ofuscadas.Isso está dificultando muito nosso trabalho, já que não podemos usar o Reflector para decifrar comportamentos estranhos.E estamos comprando clientes que pagaram milhares de dólares pelo produto.

Então, por favor, não ofusque, a menos que seja realmente necessário.

Coisas que você deve levar em consideração:

  • A ofuscação não protege seu código ou lógica. Isso apenas torna mais difícil de ler e entender.
  • A ofuscação não impede ninguém de fazer engenharia reversa. Isso apenas retarda o processo.
  • Sua propriedade intelectual é protegida por lei na maioria dos países. Portanto, se um concorrente usar seu código ou implementação específica, você poderá processá-lo.

O único problema que a ofuscação pode resolver é que alguém crie uma cópia 1:1 (ou quase 1:1) de sua implementação específica.

Além disso, em um mundo ideal, a engenharia reversa de uma aplicação ofuscada é econômica e pouco atraente.

Mas voltando à realidade:

  • Não existe nenhuma ferramenta neste planeta que impeça alguém de copiar interfaces de usuário, comportamentos ou resultados que qualquer aplicativo fornece ou produz. A ofuscação é nesta situação 100% inútil
  • O melhor ofuscador do mercado não pode impedir alguém de usar algum tipo de desmontador ou editor hexadecimal e para alguns geeks é muito bom examinar o cerne de um aplicativo.É apenas mais difícil do que em um código não ofuscado.

Portanto, a realidade é que você pode tornar mais difícil e demorado a análise do seu aplicativo, mas não obterá nenhuma proteção confiável.Independentemente de você usar um produto gratuito ou comercial.

Tecnologias avançadas, como ofuscação de fluxo de controle ou virtualização de código, podem ajudar a dificultar a compreensão da lógica, mas também podem causar muitos problemas engraçados e difíceis de depurar ou resolver.Portanto, às vezes eles são mais um problema adicional do que uma solução.

Do meu ponto de vista, a ofuscação não vale o dinheiro que algumas empresas cobram pelos seus produtos. Se você quiser incomodar os desenvolvedores casuais, os ofuscadores de código aberto são bons o suficiente.Se você quiser dificultar ao máximo a análise do coração de seus aplicativos, precisará usar contêineres criptográficos com ambientes de execução virtuais e sistemas de arquivos virtuais, mas eles também fornecem vetores de ataque e também podem ser uma fonte para um saco cheio de problemas .

Sua propriedade intelectual e seus produtos são protegidos por lei na maioria dos países. Portanto, se houver um concorrente analisando e copiando seu código, você poderá processá-lo.Se um bandido ou um hacker ou cracker pegar seu aplicativo, você receberá uma pegadinha - mas um ofuscador não faz diferença.

Portanto, você deve primeiro pensar sobre seus alvos, seu mercado e o que deseja alcançar com um ofuscador. Como você pode ler aqui (e em outros lugares), a ofuscação não resolve realmente o problema da engenharia reversa.Isso só torna tudo mais difícil e demorado. Mas se é isso que você deseja, você pode dar uma olhada em ofuscadores de código aberto como, por exemplo.sharpObfuscator ou obfuscar que pode ser bom o suficiente para incomodar programadores casuais (uma lista pode ser encontrada aqui: Lista de ofuscadores .NET na Wikipedia).

Se for possível no seu cenário, você também pode estar interessado em conceitos de SaaS. Isso significa que você fornece acesso ao seu software, mas não ao software em si.Portanto, o cliente normalmente não tem acesso às suas montagens. Mas dependendo do nível de serviço, da segurança e da base de usuários, pode ser caro, complexo e difícil realizar um serviço SaaS confiável, confiável e de alto desempenho.

Não, foi comprovado que a ofuscação não impede que alguém consiga decifrar o código compilado.Isso torna mais difícil fazê-lo, mas não impossível.

Sinto-me muito confortável lendo código assembly x86, e as pessoas que trabalham com assembly há mais de 20 anos?

Você sempre encontrará alguém que só precisa de um minuto para ver o que seu código c# ou c está fazendo...

Apenas uma observação para qualquer pessoa que esteja lendo isso anos depois - acabei de dar uma olhada na licença Dotfuscator Community Edition (que vem com o VS2008) algumas horas atrás e acredito que você não pode usar esta versão para distribuir um produto comercial ou para ofuscar código de um projeto que envolve outros desenvolvedores além de você.Portanto, para desenvolvedores de aplicativos comerciais, é apenas uma versão de teste.

...recorte...Essas mensagens podem se tornar muito mais difíceis de interpretar

Sim, mas a edição comunitária gratuita que acompanha o Visual Studio possui uma funcionalidade de mapa.Com isso, você pode rastrear os nomes dos métodos ofuscados até os nomes originais.

Tive sucesso ao colocar a saída de um ofuscador gratuito em um ofuscador diferente.No Dotfuscator CE, apenas alguns dos truques de ofuscação estão incluídos, portanto, usar um segundo ofuscador com truques diferentes o torna mais ofuscado.

É muito simples fazer engenharia reversa de um aplicativo .net usando refletor .net - já que o aplicativo irá gerar código VB, VC e C# diretamente do MSIL, e é possível extrair todos os tipos de joias úteis.

Os ofuscadores de código ocultam muito bem o código da maioria dos hacks de engenharia reversa e seriam uma boa ideia para usar em código proprietário e competitivo que agrega valor ao seu aplicativo.

Há um artigo muito bom sobre ofuscação e está funcionando aqui

Esta postagem e a questão circundante tem alguma discussão que pode ser valiosa.Não é uma questão de sim ou não.

Sim, você definitivamente deveria.Não para protegê-lo de uma determinada pessoa, mas para obter algum lucro e ter clientes.A propósito, se você chegar a um ponto aqui, alguém tentar hackear seu software, isso significa que você vende um software popular.

O problema é qual ferramenta escolher para o trabalho.Confira minha experiência com ofuscadores comerciais: https://stackoverflow.com/questions/337134/what-is-the-best-net-obfuscator-on-the-market/2356575#2356575

Sim nós fazemos.Usamos o ofuscador BitHelmet.É novo, mas funciona muito bem.

Mas vale realmente a pena o esforço para selecionar, comprar e usar tal ferramenta?

Achei o Eazfuscator barato (gratuito) e fácil de usar:demorou cerca de um dia.Eu já fiz extensos testes automatizados (boa cobertura), então acho que pude encontrar algum bug que foi introduzido por ofuscação.

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