Pergunta

Meu produto tem vários componentes:ASP.NET, aplicativo Windows Forms e serviço Windows.Cerca de 95% do código é escrito em VB.NET.

Por motivos de propriedade intelectual, preciso ofuscar o código e, até agora, tenho usado uma versão do dotfuscator que já tem mais de 5 anos.Estou pensando que é hora de mudar para uma ferramenta de nova geração.O que procuro é uma lista de requisitos que devo considerar ao procurar um novo ofuscador.

O que eu sei que devo procurar até agora:

  • Serialização/desserialização.Na minha solução atual, simplesmente digo à ferramenta não para ofuscar quaisquer membros de dados da classe porque o problema de não ser capaz de carregar dados que foram serializados anteriormente é simplesmente muito grande.
  • Integração com processo de construção
  • Trabalhando com ASP.NET.No passado, achei isso problemático devido à alteração de nomes .dll (geralmente você tem um por página) - que nem todas as ferramentas lidam bem.
Foi útil?

Solução

De volta ao .Net 1.1, a ofuscação era essencial:descompilar o código foi fácil e você poderia ir do assembly ao IL, ao código C# e compilá-lo novamente com muito pouco esforço.

Agora, com o .Net 3.5, não tenho certeza.Tente descompilar um assembly 3.5;o que você obtém está muito longe de ser compilado.

Adicione as otimizações do 3.5 (muito melhor que o 1.1) e a maneira como tipos anônimos, delegados e assim por diante são tratados pela reflexão (eles são um pesadelo para recompilar).Adicione expressões lambda, compilador 'mágico' como sintaxe Linq e var, e funções C#2 como yield (o que resulta em novas classes com nomes ilegíveis).Seu código descompilado acaba muito longe de ser compilável.

Uma equipe profissional com muito tempo ainda poderia fazer engenharia reversa novamente, mas o mesmo se aplica a qualquer código ofuscado.O código que eles obtiveram seria insustentável e provavelmente apresentaria muitos bugs.

Eu recomendaria assinar com chave seus assemblies (ou seja, se os hackers puderem recompilar um, eles terão que recompilar todos), mas não acho que a ofuscação valha a pena.

Outras dicas

Tentamos vários ofuscadores.Nenhum deles funciona em um grande aplicativo cliente/servidor que usa comunicação remota.O problema é que o cliente e o servidor compartilham algumas DLLs e não encontramos nenhum ofuscador que possa lidar com isso.

Tentamos DotFuscator Pro, SmartAssembly, XenoCode, Salamander e vários aplicativos pequenos cujos nomes me escapam.

Francamente, estou convencido de que a ofuscação é um grande truque.

Mesmo os problemas que aborda não são inteiramente um problema real.A única coisa que você realmente precisa proteger são cadeias de conexão, códigos de ativação e coisas sensíveis à segurança como essas.Essa bobagem de que outra empresa fará engenharia reversa de toda a sua base de código e criará um produto concorrente a partir dela é algo que vem do pesadelo de um gerente paranóico, não da realidade.

Estou 'até os joelhos' nisso agora, tentando encontrar uma boa solução.Aqui estão minhas impressões até agora.

Xenocódigo - Tenho uma licença antiga do Xenocode2005 que costumava usar para ofuscar meus assemblies .net 2.0.Funcionou bem no XP e foi uma solução decente.Meu projeto atual é .net 3.5 e estou no Vista, o suporte me disse para tentar, mas a versão 2005 nem funciona no Vista (trava), então eu e agora tenho que comprar o 'PostBuild2008' por um preço estonteante de $ 1900.Esta pode ser uma boa ferramenta, mas não vou descobrir.Muito caro.

Reator.Net - Este é um preço muito mais atraente e funcionou bem no meu Executável Independente.O módulo de licenciamento também foi bom e teria me poupado muito esforço.Infelizmente, falta um recurso importante: a capacidade de excluir coisas da ofuscação.Isso torna impossível alcançar o resultado que eu precisava (mesclar vários assemblies, ofuscar alguns, não ofuscar outros).

SmartAssembly - Baixei o Eval para isso e funcionou perfeitamente.Consegui alcançar tudo o que queria e a Interface era de primeira classe.O preço ainda é um pouco alto.

Dotfuscator Pro - Não foi possível encontrar o preço no site.Atualmente em discussões para obter uma cotação.Parece ameaçador.

Confuso - um projeto de código aberto que funciona muito bem (para confundir as pessoas, como o nome indica). https://confuser.codeplex.com/
(adicionado por jgauffin)

Observação:ConfuserEx está supostamente "quebrado" de acordo com Edição nº 498 em seu repositório GitHub.

Se você está procurando um gratuito, experimente o DotObfuscator Community Edition que vem com o Visual Studio ou Eazfuscator.NET.


Desde 29 de junho de 2012, Eazfuscator.NET agora é comercial.A última versão gratuita disponível é a 3.3.

Tenho usado o smartassembly.Basicamente, você escolhe uma dll e ela a retorna ofuscada.Parece funcionar bem e não tive problemas até agora.Muito, muito fácil de usar.

Experimentei quase todos os ofuscadores do mercado e o SmartAssembly é o melhor na minha opinião.

Também tenho usado o SmartAssembly.Descobri que o Ezrinz .Net Reactor é muito melhor para mim em aplicativos .net.Ele ofusca, suporta Mono, mescla assemblies e também possui um módulo de licenciamento muito bom para criar versão de teste ou vincular a licença a uma determinada máquina (muito fácil de implementar).O preço também é muito competitivo e quando precisei de suporte eles foram rápidos.Eziriz

Só para deixar claro, sou apenas um cliente que gosta do produto e não tem nenhuma relação com a empresa.

A resposta curta é que você não pode.

Existem várias ferramentas que dificultarão a leitura do seu código - algumas das quais foram apontadas por outras respostas.

No entanto, tudo o que isso faz é dificultar a leitura - aumentam a quantidade de esforço necessária, só isso.Freqüentemente, isso é suficiente para dissuadir leitores casuais, mas alguém que está determinado a se aprofundar em seu código sempre será capaz de fazê-lo.

Temos um aplicativo multicamadas com uma interface asp.net e winform que também suporta comunicação remota.Não tive problemas ao usar nenhum ofuscador, com exceção do tipo de criptografia que gera um carregador que pode ser problemático de todas as maneiras inesperadas e simplesmente não vale a pena, na minha opinião.Na verdade, meu conselho seria mais parecido com "Evite criptografar ofuscadores do tipo carregador como uma praga".:)

Na minha experiência, qualquer ofuscador funcionará bem com qualquer aspecto do .net, incluindo asp.net e comunicação remota, você só precisa se familiarizar com as configurações e aprender até onde pode empurrá-lo em quais áreas do seu código.E reserve um tempo para tentar a engenharia reversa do que você obtém e ver como funciona com as várias configurações.

Usamos vários ao longo dos anos em nossos aplicativos comerciais e optamos pelo ofuscador Spices da 9rays.net porque o preço é justo, ele faz o trabalho e eles têm um bom suporte, embora realmente não precisemos mais do suporte há anos, mas para ser honesto Eu não acho que realmente importe qual ofuscador você usa, os problemas e a curva de aprendizado são todos os mesmos se você quiser que ele funcione corretamente com comunicação remota e asp.net.

Como outros mencionaram, tudo o que você realmente faz é equivalente a um cadeado, mantendo pessoas honestas afastadas e/ou dificultando a simples recompilação de um aplicativo.

O licenciamento geralmente é a área principal para a maioria das pessoas e, de qualquer maneira, você definitivamente deveria usar algum tipo de sistema de certificado assinado digitalmente para licenciamento.Sua maior perda virá do compartilhamento casual de licenças. Se você não tiver um sistema inteligente instalado, as pessoas que violam o sistema de licenciamento nunca comprariam.

É realmente fácil levar isso longe demais e ter um impacto negativo sobre seus clientes e seus negócios. Faça o que é simples e razoável e depois não se preocupe com isso.

Nos últimos dois dias tenho experimentado o Dotfuscator Community Edition avançado (um download gratuito após registrar o CE básico que vem junto com o Visual Studio).

Acho que a razão pela qual mais pessoas não usam a ofuscação como opção padrão é que ela é um incômodo sério comparado ao risco.Em projetos de teste menores, consegui executar o código ofuscado com muito esforço.Implantar um projeto simples via ClickOnce foi problemático, mas possível após assinar manualmente os manifestos com mage.O único problema foi que, em caso de erro, o rastreamento de pilha voltou ofuscado e o CE não possui um desofuscador ou clarificador empacotado.

Tentei ofuscar um projeto real que é VSTO baseado em Excel, com integração com Virtual Earth, muitas chamadas de webservice e um container IOC e muita reflexão.Era impossível.

Se a ofuscação for realmente um requisito crítico, você deverá projetar seu aplicativo com isso em mente desde o início, testando as compilações ofuscadas à medida que avança.Caso contrário, se for um projeto bastante complexo, você acabará sofrendo muito.

Ofuscador de criptografia abordar todas as suas preocupações e cenários.Isto :

  1. Exclui automaticamente tipos/membros da ofuscação com base em regras.Tipos/campos serializados são um deles.
  2. Ele pode ser integrado ao processo de construção usando MSBUild.
  3. Suporta projetos ASP.Net.

Recentemente, tentei canalizar a saída de um ofuscador gratuito para outro ofuscador gratuito - ou seja, Dotfuscator CE e o novo ofuscador Babel no CodePlex.Mais detalhes no meu blog.

Quanto à serialização, movi esse código para uma DLL diferente e incluí-o no projeto.Eu raciocinei que não havia nenhum segredo ali que não estivesse no XML, então não precisava de ofuscação.Se houver algum código sério nessas classes, o uso de classes parciais no assembly principal deverá cobri-lo.

Você deve usar o que for mais barato e mais conhecido para sua plataforma e encerrar o dia.A ofuscação de linguagens de alto nível é um problema difícil, porque os fluxos de opcode da VM não sofrem dos dois maiores problemas que os fluxos de opcode nativos sofrem:identificação de função/método e alias de registro.

O que você deve saber sobre a reversão de bytecode é que já é uma prática padrão que os testadores de segurança revisem o código X86 direto e encontrem vulnerabilidades nele.No X86 bruto, você não pode necessariamente encontrar funções válidas, muito menos rastrear uma variável local durante uma chamada de função.Em quase nenhuma circunstância os reversores de código nativos têm acesso a nomes de funções e variáveis ​​– a menos que estejam revisando o código da Microsoft, para o qual a MSFT fornece essas informações ao público.

"Dotfuscation" funciona principalmente embaralhando nomes de funções e variáveis.Provavelmente é melhor fazer isso do que publicar código com informações de nível de depuração, onde o Reflector está literalmente desistindo do seu código-fonte.Mas qualquer coisa que você faça além disso provavelmente terá retornos decrescentes.

Não tive problemas com o Smartassembly.

Você poderia usar o "Dotfuscator Community Edition" - ele vem por padrão no Visual Studio 2008 Professional.Você pode ler sobre isso em:

http://msdn.microsoft.com/en-us/library/ms227240%28VS.80%29.aspx
http://www.preemptive.com/dotfuscator.html

A versão “Profissional” do produto custa dinheiro, mas é melhor.

Você realmente precisa que seu código seja ofuscado?Geralmente há muito pouco problema em descompilar seu aplicativo, a menos que seja usado para fins de segurança.Se você está preocupado com pessoas “roubando” seu código, não se preocupe;a grande maioria das pessoas que olham para o seu código será para fins de aprendizagem.De qualquer forma, não existe uma estratégia de ofuscação totalmente eficaz para .NET - alguém com habilidade suficiente sempre será capaz de descompilar/alterar seu aplicativo.

Evite o reator.É completamente inútil (e sim, paguei pela licença).O Xenocode foi o melhor que encontrei e também comprei uma licença.O suporte foi muito bom, mas não precisei muito dele, pois simplesmente funcionou.Testei todos os ofuscadores que pude encontrar e minha conclusão é que o xenocode foi de longe o mais robusto e fez o melhor trabalho (também a possibilidade de pós-processar seu exe .NET em um exe nativo que não vi em nenhum outro lugar).

Existem duas diferenças principais entre reator e xenocódigo.A primeira é que o Xenocode realmente funciona.A segunda é que a velocidade de execução de suas montagens não é diferente.Com o reator foi cerca de 6 milhões de vezes mais lento.Também tive a impressão de que o reator era operado por uma só pessoa.

Achei que o Agile.Net oferece uma proteção muito boa para o seu .Net Assembly porque oferece não apenas ofuscação, mas também criptografia.Baixe uma trilha grátis.
http://secureteam.net/NET-Code-Protection.aspx http://secureteam.net/downloads.aspx

Tenho ofuscado o código no mesmo aplicativo desde o .Net 1 e tem sido uma grande dor de cabeça do ponto de vista da manutenção.Como você mencionou, o problema de serialização pode ser evitado, mas é muito fácil cometer um erro e ofuscar algo que você não queria que fosse ofuscado.É fácil quebrar a compilação ou alterar o padrão de ofuscação e não conseguir abrir arquivos antigos.Além disso, pode ser difícil descobrir o que deu errado e onde.

Nossa escolha foi o Xenocode, e se eu fizesse a escolha novamente hoje, preferiria não ofuscar o código ou usar o Dotfuscator.

Aqui está um documento da própria Microsoft. Espero que ajude... é de 2003, mas ainda pode ser relevante.

Estamos usando o SmartAssembly em nosso cliente Windows.Funciona muito bem.

Também adiciona alguns problemas extras.A impressão dos nomes de suas classes em arquivos de log/exceções deve ser ofuscada.E é claro que não é possível criar uma classe a partir do seu nome.Portanto, é uma boa ideia dar uma olhada no seu cliente e ver quais problemas você pode resolver ofuscando.

Tudo depende da linguagem de programação que você usa.Leia o artigo: Código ofuscado

a maneira gratuita seria usar o dotfuscator no visual studio, caso contrário você teria que sair e comprar um ofuscador como o Postbuild (http://www.xenocode.com/Landing/Obfuscation.aspx)

Eu tive que usar uma proteção de ofuscação/recurso em meu último projeto e encontrei Ofuscador de criptografia como uma ferramenta agradável e simples de usar.O problema de serialização é apenas uma questão de configurações nesta ferramenta.

Existe uma boa versão de código aberto chamada Obfuscar.Parece funcionar bem.Tipos, propriedades, campos, métodos podem ser excluídos.O original está aqui: https://code.google.com/p/obfuscar/, mas como parece não estar mais atualizado, alguém o transferiu para aqui: https://obfuscar.codeplex.com/

Você também pode querer dar uma olhada em novas tecnologias de proteção de código, como Metafórico e V.i.Labs e novas tecnologias de proteção contra cópia de software, como ByteShield.Divulgação:Eu trabalho para ByteShield.

Eu também uso o smartassembly.No entanto, não sei como isso funciona para um aplicativo da web.No entanto, gostaria de salientar que se o seu aplicativo usa proteção do tipo shareware, certifique-se de não verificar uma licença com retorno booleano.é muito fácil byte crack.http://blogs.compdj.com/post/Binary-hack-a-NET-executable.aspx

SmartAssembly é ótimo, fui usado na maioria dos meus projetos

Experimentei a versão demo do Eziriz....gostei.Mas nunca trouxe o software.

Ofuscar não é uma proteção real.

Se você tiver um arquivo .NET Exe, há um Muito melhor solução.

eu uso Têmida e posso dizer que funciona muito bem.

A única desvantagem do Themida é que ele não pode proteger DLLs .NET.(Também protege código C++ em Exe e DLLs)

Themida é de longe mais barato que os ofuscadores aqui mencionados e é o melhor em anti pirataria proteção no mercado.Ele cria uma máquina virtual onde partes críticas do seu código são executadas e executa vários threads que detectam manipulação ou pontos de interrupção definidos por um cracker.Ele converte o .NET Exe em algo que o Reflector nem reconhece mais como um assembly .NET.

Por favor, leia a descrição detalhada em seu site:http://www.oreans.com/themida_features.php

Eu experimentei um produto chamado Rummage e ele faz um bom trabalho ao lhe dar algum controle...Embora falte muitas coisas que Eziriz oferece, mas o preço do Rummage é muito bom...

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