Pergunta

Eu estava olhando para a melhor criptografia para uma chave de licença para uma aplicação, e alguém disse que alguém pode facilmente descompilar o aplicativo e, em seguida, simplesmente ignorar o teste para a chave de licença.

como é que alguém vai fazer sobre isso em termos práticos? Então eles têm o meu .dll, eles têm de decompor-lo de alguma forma, em seguida, comentar a chamada função para verificar a licença, em seguida, recompilar-lo? O decompiler tem que ser realmente bom de tal forma que o código ainda compila!

Foi útil?

Solução

Tente abrir o aplicativo com refletor . Você provavelmente será surpreendido: -)

E uma vez que um cracker tenha localizado o local certo no seu código, eles podem usar uma combinação de ildasm / ilasm para remover a seleção do seu aplicativo -. mesmo se o código refletor gera não irá compilar

Outras dicas

Se o código fonte foi compilado normalmente é muito fácil de decompor NET assembléias.

Você pode usar .NET Reflector , originalmente desenvolvido por Lutz Roeder, agora apoiado por Redgate Software. Há uma imagem na parte inferior desta resposta que lhe dá uma impressão que refletor faz.

Você pode navegar através de seus namespaces e classes e veja o código fonte e métodos na sua língua favorita .NET. Denis Bauer é FileDisassembler permitirá que você (ou os hackers do mal no seu caso) para convertê-lo em uma solução e fazer VS modificações no programa.

Existem algumas medidas preventivas como o uso de um Código obfuscator para tornar seu código praticamente ilegível.

Existem algumas outras questões interessantes sobre StackOverflow sobre este tópico:

Screenshot do refletor:

text alt

Josh Smith também lançou Crack.NET recentemente que pode ser usado para anexar a um correndo .NET processo e, em seguida, abrir esse em refletor - assim mesmo se as assembleias no disco são encriptada de alguma forma (para as pessoas evitar o uso de refletor para chegar a eles), eles vão ainda ser capaz de usar as versões em memória

.NET é super fácil de decompor. Obfuscation irá torná-lo um pouco mais difícil de entender o que está acontecendo, mas alguém Decompiling seu código ainda pode descobrir se eles são persistentes.

Aqui estão alguns conselhos sobre como proteger o seu código .NET que eu encontrei on-line:

http://blogs.msdn.com/ericgu /archive/2004/02/24/79236.aspx

Basta notar que nenhuma das técnicas discutidas são 100% eficazes, é apenas uma questão de quantas aros você vai fazer o salto biscoito completamente.

.NET compilação, em geral, é muito fácil: para começar uma sensação para este mesmo, basta pegar uma cópia do . NET Reflector e dar-lhe uma tentativa.

Na maioria dos casos, não haverá necessidade de recompilar o código para remover uma verificação de licença simples: basta remendar o MSIL irá fazer o truque.

Proteger-se contra este rendimento cenário diminuindo rapidamente retornos: haverá sempre ser alguém suficientemente inteligente para ignorar tudo o que verificações adicionais que você adicionar ao seu código. Por exemplo, você pode adicionar uma assinatura digital ao seu código, e se recusam a executar da assinatura não corresponde (indicando o código foi adulterado, por exemplo, para remover a verificação de licença).

O jogo torna-se então para remover a verificação de assinatura (para além da verificação de chave de licença). Então você adicionar outro cheque, que pode então ser contornado, et cetera, ad infinitum.

Há toda uma indústria de código obfuscatation e copiar ferramentas de proteção para ajudá-lo a defender o seu software contra problemas como este. Cabe a você decidir se o esforço adicional do seu lado, e o aborrecimento que você vai fazer com que seus clientes legítimos, vale a pena comprar para estas soluções ...

Se isto é algo que você está olhando para defender contra, você pode querer ler sobre como para atacá-lo.

Explorando Software por Greg Holland & Gary McGraw é uma excelente introdução.

É melhor não ir ao mar em tecnologia de chave de licença. Faça o que fizer pode ser cortado por um determinado usuário e você corre o maior risco de adição de questões que impedem os usuários legítimos usando sua aplicação. Eu vi mesmo código que foi protegido com Ferrolho Dongles ficar rachado. Criptografar sua chave de licença e ofuscar o seu código deve ser suficiente para impedir ataques oportunistas, há pouco ponto vai além disso.

Eric Sink escreveu um bom artigo cobrindo desta secção, ver ponto "4 não irrite povos honestos" de "Princípios de Transparência"

Mesmo sem refletor, as pessoas têm feito isso há muito tempo. Basicamente você assistir o aplicativo com um depurador - algo como WinDBG vai fazer - e depois descobrir quando a verificação de licença acontece. Você assiste o valor de retorno, e então você simplesmente corrigir o aplicativo para saltar directamente para o "tudo de bom" cheque.

Eu recomendo tudo o que as pessoas colocaram acima. Você apenas tem que perceber que é um jogo de gato e rato, e se o seu retorno sobre o investimento vai valer a pena. Se você tiver usuários que não estão tentando burlar o sistema, então algo simples pode fazer. Se você tem algo que quebra é galopante, então você vai ter que olhar para diferentes estratégias e de lá ir.

Você não tem que recompilar o aplicativo para corrigir isso - muitas ferramentas patch binário existe lá fora. E isso não vai parar seus biscoitos mais determinados se há dinheiro suficiente para ser feita.

"Too"

Qualquer tipo de mecanismo de verificação de licença "padrão" / usual é um alvo para ferramenta de remoção automática. E em poucos .NET comercial aplicativos que eu tenho refletido sobre, estas verificações "muito trivial" aparecem comum.

A melhor aposta é a de proteger, fazendo parte de dependentes do serviço de web do programa. Isso não deve ser de interface muito falador para evitar retardar a execução, mas deve ser nem muito robusto, como os pedaços poderia ser apenas então baixado e armazenado em cache localmente na versão "rachado" a menos que o aplicativo depende deles mudam frequentemente.

Se você quiser evitar a conectividade de rede (alguns usos ou usuários pode achar que problemático / questionável dependendo do aplicativo a menos que seja algo que você descreve e fornece valor), em seguida, dividindo alguns dos programas em uma dll nativa ou dois e ter a verificações de licença em todas as partes do aplicativo e menos obviamente assim no dll nativa do, provavelmente seria suficiente para deter a maioria.

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