.net instrumentos/estratégia de ofuscação [encerrado]

o meu produto tem vários componentes: ASP.NET, Windows Forms App e Windows Service. 95% ou mais do código está escrito em VB.NET.

Por razões de Propriedade Intelectual, preciso de ofuscar o código, e até agora tenho usado uma versão do dotfuscator que tem agora mais de 5 anos. Acho que está na hora de passar 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 deve procurar até agora:

  • serialização/des-serialização. Na minha solução atual, eu simplesmente digo à ferramenta Não para ofuscar qualquer membro de dados de classe porque a dor de não ser capaz de carregar dados que foi previamente serializado é simplesmente muito grande.
  • Integração com o Processo de Compilação
  • trabalhar com ASP.NET. no passado, achei isso problemático devido à mudança .dll nomes (você frequentemente ter um por página) - que nem todas as ferramentas lidar bem.
Author: csmba, 2008-08-05

30 answers

De volta com. Net 1.1 ofuscação era essencial: o código de descompilação era fácil, e você poderia ir de montagem, para IL, para C# código e tê-lo compilado novamente com muito pouco esforço.

Com a. Net 3.5, Não tenho a certeza. Tente descompilar um conjunto 3.5; o que você tem é um longo caminho longe de compilar.

Adicione as optimizações de 3.5 (muito melhor que 1.1) e a forma como os tipos anónimos, os delegados e assim por diante são tratados pela reflexão (são um pesadelo para recompilar). Adicionar lambda expressions, compiler 'magic' like Linq-syntax and var, and C#2 functions like yield (which results in new classes with unreadable names). O seu código descompilado acaba muito longe de ser compilado.

Uma equipa profissional com muito tempo ainda pode voltar a fazer engenharia reversa, mas o mesmo se aplica a qualquer código obscuro. O código que conseguiram seria inatingível e muito provável que fosse muito instável. Eu recomendaria que assinasses a tua chave. assembleias (o que significa que se os hackers podem recompilar um eles têm que recompilar todos), mas eu não acho que ofuscação vale a pena.
 39
Author: Keith, 2008-08-12 12:19:13
Já tentámos vários ofuscadores. Nenhum deles trabalha em um aplicativo cliente/servidor grande que usa remoting. O problema é que o cliente e o servidor compartilham dlls, e não encontramos nenhum ofuscador que possa lidar com isso. Tentámos DotFuscator Pro, SmartAssembly, XenoCode, Salamander, e vários pequenos aplicativos de tempo cujos nomes me escapam.

Francamente, estou convencido que ofuscar é uma grande invasão.

Mesmo os problemas que aborda não são inteiramente um problema real. A única coisa que precisas de proteger São cordas de ligação, códigos de activação, coisas sensíveis à segurança. Este absurdo de que outra empresa vai reverter a sua base de código e criar um produto concorrente a partir dele é algo do pesadelo de um gerente paranóico, não a realidade.

 47
Author: Judah Himango, 2009-05-04 18:12:46
Estou "atolado" nisto agora, a tentar encontrar uma boa solução. Aqui estão as minhas impressões até agora.

Xenocode - tenho uma antiga licença para o Xenocode 2005 que usei para ofuscar os meus conjuntos. NET 2.0. Funcionou bem no XP e foi uma solução decente. O meu projecto actual é o. Net 3.5 e estou no Vista, o support disse - me para tentar, mas a versão de 2005 nem sequer funciona no Vista (crashes), por isso eu e agora tenho de comprar o "Postbuild 2008" a um preço que aumenta o valor do GOB ponto de $ 1900. Pode ser uma boa ferramenta, mas não vou descobrir. Caro.

Reactor.Net este é um ponto de preço muito mais atraente e funcionou bem no meu autómato executável. O módulo de Licencing também foi bom e ter-me-ia poupado um monte de esforço. Infelizmente, falta-lhe uma característica fundamental, que é a capacidade de excluir coisas da ofuscação. Isso torna impossível alcançar o resultado que eu precisava (mesclar vários conjuntos juntos, ofuscar alguns, não ofuscar outros).

Fiz o download da avaliação Para isto e funcionou perfeitamente. Consegui tudo o que queria e a Interface era de primeira classe. O ponto de preço ainda é um pouco pesado.

Dotfuscator Pro - não conseguiu encontrar o preço no site. Atualmente em discussões para obter uma cotação. Parece sinistro.

Confuser - um projecto de código aberto que funciona muito bem (para confundir ppl, assim como o nome implicar). https://confuser.codeplex.com/
( added by jgauffin)

Nota: ConfuserEx é alegadamente "quebrado" de acordo com Número #498 no seu repo GitHub.

 40
Author: Michael Dausmann, 2016-06-23 22:10:03
Se procura um grátis, pode tentar a edição comunitária DotObfuscator que vem com Visual Studio ou ... Eazfuscator.NET.

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

 21
Author: Israel Rodriguez, 2017-03-29 04:13:05
Tenho usado a montagem inteligente. Basicamente, escolhes um dll e ele devolve-o ofuscado. Parece funcionar bem e não tive problemas até agora. Muito, muito fácil de usar.
 18
Author: Shawn, 2008-08-05 16:21:56
Já tentei quase todos os obscuros no mercado e o SmartAssembly é o melhor na minha opinião.
 10
Author: Andrew Peters, 2008-08-07 10:44:33
Também tenho usado a montagem inteligente. Encontrei aquele Reactor Ezrinz. Net muito melhor para mim em aplicações.net. Ele ofusca, suporta Mono, funde conjuntos e também tem um módulo de licenciamento muito bom para criar versão de teste ou ligar a licença para uma determinada máquina (muito fácil de implementar). O preço também é muito competitivo e quando eu precisava de apoio onde Rápido. Eziriz Só para que fique claro, sou apenas um pudim que gosta do produto e não de forma alguma. relacionado com a empresa.
 8
Author: Ronnie, 2008-08-22 17:41:21
A resposta curta é que não podes. Existem várias ferramentas ao redor que tornarão mais difícil para alguém ler seu código - algumas das quais foram apontadas por outras respostas. No entanto, tudo isso torna mais difícil a leitura-eles aumentam a quantidade de esforço necessário, isso é tudo. Muitas vezes isso é suficiente para dissuadir os leitores casuais, mas alguém que está determinado a cavar o seu código sempre será capaz de fazê-lo.
 7
Author: Bevan, 2009-07-16 21:45:02
Temos uma aplicação multi-níveis com um asp.net e interface winform que também suporta remoting. Eu não tive problemas em usar qualquer ofuscador com a exceção do tipo de criptografia que gera um carregador que pode ser problemático em todos os tipos de maneiras inesperadas e simplesmente não vale a pena na minha opinião. Na verdade, meu conselho seria mais ao longo das linhas de "evitar encriptar os obfuscadores Tipo Carregador como a praga". :) Pela minha experiência, qualquer ofuscador funcionará bem com qualquer um. aspecto da. NET incluindo asp.net e remoting, você só tem que se tornar íntimo com as configurações e aprender até onde você pode empurrá-lo em quais áreas do seu código. E tome o tempo para tentar engenharia reversa sobre o que você recebe e ver como ele funciona com as várias configurações. Nós usamos vários ao longo dos anos em nossos aplicativos comerciais e assentamos em especiarias ofuscador de 9rays.net porque o preço é certo, ele faz o trabalho e eles têm um bom apoio embora nós realmente não precisamos do apoio em anos mais, mas para ser honesto eu não acho que realmente importa que ofuscador você usa, as questões e curva de aprendizagem são todos os mesmos se você quer que ele funcione corretamente com remoting e asp.net. Como outros já mencionaram, tudo o que está a fazer é o equivalente a um cadeado, mantendo as pessoas honestas de fora ou dificultando simplesmente a recompilação de uma aplicação. O Licenciamento é geralmente a área chave para a maioria das pessoas e você definitivamente deve estar usando algum tipo de de qualquer forma, 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 no lugar, as pessoas que quebram o sistema de licenciamento nunca iriam comprar em primeiro lugar. É muito fácil levar isto longe demais e ter um impacto negativo nos seus clientes e nos seus negócios, fazer o que é simples e razoável e depois não se preocupe com isso.
 6
Author: JohnC, 2008-11-16 19:57:28

Nos últimos dois dias eu tenho experimentado com Dotfuscator Community Edition advanced (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 ofuscação como opção padrão é que é um problema grave comparado com o risco. Em projetos de teste menores eu poderia fazer com que o código ofuscado funcionasse com muito esforço. A implantação de um projecto simples via ClickOnce foi problemática, mas possível após a assinar manualmente os manifestos com a mage. O único problema era que no erro o traço da pilha voltou ofuscado e a CE não tem um desobfuscador ou clarifier embalado.

Eu tentei ofuscar um projeto real que é VSTO baseado no Excel, com integração virtual da Terra, muitas chamadas webservice e um recipiente de COI e muitas reflexões. Era impossível.

Se a ofuscação é realmente um requisito crítico, você deve projetar a sua aplicação com isso em mente a partir do comecem, testem as construções obscuras à medida que progridem. Caso contrário, se for um projeto bastante complexo, você vai acabar com uma grande quantidade de dor.

 5
Author: burnside, 2009-02-04 22:40:14

Crypto Ofuscator trata de todas as tuas preocupações e cenários. It:

  1. exclui automaticamente os tipos/membros da ofuscação com base em regras. Os tipos/campos serializados são um deles.
  2. Ele pode ser integrado no processo de construção usando MSBUild.
  3. suportes ASP.Net projectos.
 5
Author: logicnp, 2009-10-09 09:42:26
Recentemente tentei colocar a saída de um ofuscador livre no outro ofuscador livre, ou seja, Dotfuscator CE e o novo obfuscador Babel no CodePlex. Mais detalhes no meu blog . Quanto à serialização, mudei esse código para um DLL diferente e incluí-o no projecto. Eu argumentei que não havia nenhum segredo lá que não estivesse no XML de qualquer maneira, então não precisava de ofuscação. Se houver algum código grave nessas classes, utilizando classes parciais na Assembleia principal deve cobri-lo.
 4
Author: harriyott, 2008-09-11 11:53:35
Deve usar o que for mais barato e mais conhecido para a sua plataforma e terminar o dia. Ofuscação de linguagens de alto nível é um problema difícil, porque fluxos de opcode VM não sofrem dos dois maiores problemas que fluxos nativos de opcode fazem: identificação de função/método e registro de aliasing.

O que você deve saber sobre a inversão bytecode é que já é prática padrão para os testadores de segurança para rever o código x86 direto e encontrar vulnerabilidades nele. No raw X86, Você não pode necessariamente encontrar funções válidas, muito menos seguir uma variável local através de uma chamada de função. Em quase nenhuma circunstância os inversores de código nativos têm acesso a funções e nomes de variáveis - - - - a menos que eles estejam revisando o código Microsoft, para o qual o MSFT ajuda a fornecer essa informação ao público.

A "Dotfuscação" funciona principalmente através da codificação de funções e nomes de variáveis. É provavelmente melhor fazer isso do que publicar código com informações de nível de depuração, onde o O Reflector está literalmente a revelar o seu código-fonte. Mas tudo o que fizeres para além disto, é provável que chegues a resultados decrescentes.

 3
Author: tqbf, 2008-09-10 21:38:59
Não tive problemas com a montagem inteligente.
 3
Author: Geoff Appleford, 2008-09-16 11:12:55

Você poderia usar "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. Precisas mesmo do teu código ofuscado? Normalmente há muito pouco de errado com a sua aplicação sendo descompilada, a menos que é usado para fins de segurança. Se você está preocupado com as pessoas "roubando" seu código, não seja; a grande maioria das pessoas olhando para o seu código será para fins de aprendizagem. De qualquer forma, não há uma estratégia de ofuscação totalmente eficaz para.NET - alguém com habilidade suficiente sempre será capaz de descompilar/mudar sua aplicação.
 3
Author: Callum Rogers, 2009-08-28 15:34:17
Evitar O Reactor. É completamente inútil (e sim eu paguei por uma licença). Xenocode foi o melhor que eu encontrei e comprou uma licença para também. O apoio foi muito bom, mas eu não precisava muito dele, como apenas funcionou. Eu testei cada ofuscador que pude encontrar e minha conclusão é que xenocode foi de longe o mais robusto e fez o melhor trabalho (também a possibilidade de postar seu exe.NET para um exe nativo que eu não vi em qualquer outro lugar.). Existem duas diferenças principais: entre o reactor e o xenocode. O primeiro é que Xenocode realmente funciona. A segunda é que a velocidade de execução de suas assembléias não é diferente. Com o reactor foi cerca de 6 milhões de vezes mais lento. Também fiquei com a impressão de que o reactor era uma operação de um só homem.
 3
Author: Michael Finlan, 2011-05-04 09:43:43
Encontrei o ... Agile.Net fornecer uma proteção muito boa para o seu conjunto.Net porque oferece não só ofuscação, mas também criptografia. Obter um rasto gratuito.
http://secureteam.net/NET-Code-Protection.aspx http://secureteam.net/downloads.aspx
 3
Author: user2743618, 2013-09-03 15:26:53
Tenho ofuscado o código na mesma aplicação desde a. Net 1, e tem sido uma grande dor de cabeça do ponto de vista da manutenção. Como você mencionou, o problema da serialização pode ser evitado, mas é muito fácil cometer um erro e ofuscar algo que você não queria ofuscado. É fácil quebrar a construção, ou alterar o padrão de ofuscação e não ser capaz de abrir arquivos antigos. Além disso, pode ser difícil descobrir o que correu mal e onde. A nossa escolha foi Xenocode., e se eu fizer a escolha novamente Hoje eu preferiria não ofuscar o código, ou usar Dotfuscador.
 2
Author: Jon Dewees, 2008-08-21 20:31:40
Estamos a usar uma montagem inteligente no nosso cliente do windows. Funciona muito bem.

Também acrescenta alguns problemas extra. Imprimir os nomes das suas classes em ficheiros de Registo/excepções têm de ser desactualizados. E é claro que não se pode criar uma classe a partir do seu nome. Então é uma boa idéia dar uma olhada em seu cliente e ver que problemas você pode obter por ofuscar.

 1
Author: Carra, 2009-04-04 11:28:07

Tudo depende da linguagem de programação, que você usa. Deve ler-se o artigo: código ofuscado

 1
Author: Michał Ziober, 2009-07-16 21:31:20

A maneira livre seria usar o dotfuscator de dentro do estúdio visual, caso contrário você teria que sair e comprar um ofuscador como o Postbuild (http://www.xenocode.com/Landing/Obfuscation.aspx)

 1
Author: Russ Bradberry, 2009-07-16 21:38:38

Tive de usar um ofuscation/resource protection no meu rpoject mais recente e encontrei cripto Ofuscator como uma ferramenta simples de usar. A questão da serialização é apenas uma questão de Configurações nesta ferramenta.

 1
Author: logicnp, 2012-06-28 04:57:38
Há uma boa versão de código aberto chamada ofuscar. 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 actualizado, alguém o trouxe para aqui. https://obfuscar.codeplex.com/
 1
Author: erict, 2013-12-19 04:24:37

Você também pode querer olhar para o novo código de tecnologias de proteção, tais como Metaforic e V. eu.Laboratórios e o novo software de cópia de tecnologias de proteção, tais como ByteShield. Disclosure: eu trabalho para ByteShield.

 0
Author: Christian Olsson, 2009-01-03 18:56:59

Também uso montagem inteligente. No entanto, não sei como funciona para uma aplicação web. No entanto, gostaria de salientar que se o seu aplicativo usa shareware type protection, certifique-se de que ele não verifica uma licença com um retorno booleano. é demasiado fácil fazer um byte. http://blogs.compdj.com/post/Binary-hack-a-NET-executable.aspx

 0
Author: Rick Ratayczak, 2009-04-04 10:53:56

A montagem inteligente é óptima, fui usada na maioria dos meus projectos

 0
Author: guaike, 2010-12-01 04:49:21
Tentei a versão demo do Eziriz....Gostei. Mas nunca trouxe o software.
 -1
Author: Kalpak, 2009-09-04 03:21:58
Ofuscar não é uma protecção real.

Se tiver um ficheiro Exe. net existe uma solução Muito Melhor.

Eu usoThemida e posso dizer que funciona muito bem.

A única desvantagem da Themida é que não consegue proteger os Dlls. net. (Também protege o código C++ em Exe e DLLs)

Themida é muito mais barato do que os aqui mencionados obfuscators e é o melhor em anti pirataria proteção no mercado. Ele creates a virtual machine were critical parts of your code are run and runs several threads that detect manipulation or breakpoints set by a cracker. Ele converte o. NET Exe em algo que o refletor já não reconhece como um conjunto.net.

Por Favor, leia a descrição pormenorizada no seu sítio Web: http://www.oreans.com/themida_features.php

 -1
Author: Elmue, 2014-03-06 03:47:11
Já experimentei um produto chamado "Rummage" e faz um bom trabalho ao dar-te algum controlo ... Embora lhe faltem muitas coisas que Eziriz oferece, mas o preço para o Rummage é muito bom...
 -2
Author: DotOftheDotNet, 2013-09-06 17:27:45