Pergunta

Que recomendações você pode dar para um sistema que deve fazer o seguinte:

Carregue plug-ins (e eventualmente execute-os), mas tenha 2 métodos para carregar esses plug-ins:

  • Carregar apenas plugins autorizados (desenvolvido pelo proprietário do software)
  • Carregue todos os plug-ins

E precisamos estar razoavelmente seguros de que os plug-ins autorizados são reais (não modificados).No entanto, todos os plugins devem estar em montagens separadas.Eu estive pensando em usar assemblies com nomes fortes para os plug-ins, com a chave pública armazenada no aplicativo carregador, mas para mim parece muito fácil modificar a chave pública dentro do aplicativo carregador (se o usuário quiser), independentemente de qualquer ofuscação do aplicativo carregador.Alguma ideia mais segura?

Foi útil?

Solução

Basicamente, se você colocar seu código na máquina de outra pessoa, não há garantia absoluta de segurança.

Você pode ver todos os tipos de truques de segurança, mas no final, o código está na máquina deles, então está fora do seu controle.

Quanto você tem a perder se o usuário final carregar um plugin não autorizado?

Outras dicas

Quanto você tem a perder se o usuário final carregar um plugin não autorizado?

É certo que isso não acontecerá com frequência, mas quando/se acontecer, perderemos muito e, embora entenda que não produziremos nada 100% seguro, quero tornar isso um obstáculo suficiente para impedir as pessoas de fazê-lo.

O que é irritante em fazer um carregamento dinâmico simples com um nome forte completo é que basta uma simples alteração literal da string dentro do aplicativo carregador para carregar qualquer outro assembly, mesmo que os plug-ins estejam assinados.

você pode ampliar sua pergunta:"como posso proteger meus assemblies .net da engenharia reversa?"

a resposta é: você não pode.para quem ainda não viu, basta procurar "refletor" e executá-lo em algum exe ingênuo.

(a propósito, esta é sempre a resposta para o código que está fora do seu controle, desde que você não tenha hardware de en/descriptografia enviado com ele),

ofuscar tenta tornar a engenharia reversa mais difícil (custa mais dinheiro) do que o desenvolvimento, e para alguns tipos de algoritmos ela é bem-sucedida.

Assine as assembleias.

Assinatura de nome forte, ou nomeação forte, dá a um componente de software um globalmente identidade única que não pode ser falsificada por outra pessoa.Nomes fortes são usados para garantir esse componente Dependências e configuração As instruções são mapeadas exatamente para a direita versão do componente e do componente.

http://msdn.microsoft.com/en-us/library/h4fa028b(VS.80).aspx

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