Como posso proteger meus assemblies .NET da descompilation?

Um, se as primeiras coisas que aprendi quando comecei com C # foram as mais importantes. Você pode descompilar qualquer assembly .NET com o Reflector ou outras ferramentas. Muitos desenvolvedores não estão cientes desse fato e a maioria deles fica chocada quando eu mostro seu código fonte.

A proteção contra a descompilation ainda é uma tarefa difícil. Eu ainda estou procurando uma maneira rápida, fácil e segura de fazer isso. Eu não quero ofuscar meu código, então os nomes dos meus methods serão a, b, c ou assim. Reflector ou outras ferramentas devem ser incapazes de reconhecer meu aplicativo como assembly .NET. Eu já conheço algumas ferramentas, mas elas são muito caras. Existe alguma outra maneira de proteger meus aplicativos?

EDITAR:

O motivo da minha pergunta não é impedir a pirataria. Eu só quero impedir que os concorrentes leiam meu código. Eu sei que eles vão e eles já fizeram. Eles até me disseram isso. Talvez eu seja um pouco paranóico, mas rivais de negócios lendo meu código não me fazem sentir bem.

    Uma coisa a ter em mente é que você quer fazer isso de uma maneira que faça sentido para os negócios. Para fazer isso, você precisa definir seus objectives. Então, quais são seus objectives?

    Prevenindo a pirataria? Esse objective não é alcançável. Até mesmo o código nativo pode ser descompilado ou quebrado; A infinidade de warez disponíveis on-line (mesmo para produtos como Windows e Photoshop) é a prova de que um hacker determinado pode sempre obter access.

    Se você não pode evitar a pirataria, que tal simplesmente reduzi-la? Isso também é equivocado. Leva apenas uma pessoa decifrando seu código para que ele esteja disponível para todos. Você tem que ter sorte toda vez. Os piratas só precisam ter sorte uma vez.

    Eu coloquei para você o objective deve ser maximizar os lucros. Você parece acreditar que parar com a pirataria é necessário para esse esforço. Não é. Lucro é simplesmente receita menos custos. Parar a pirataria aumenta os custos . É preciso esforço, o que significa adicionar custos em algum ponto do processo e, assim, reduzir esse lado da equação. Proteger seu produto também não faz nada para aumentar sua receita. Eu sei que você olha para todos os piratas e vê todo o dinheiro que poderia ganhar se pagasse apenas as taxas de licença, mas a realidade é que isso nunca acontecerá. Há alguma hipérbole aqui, mas geralmente é verdade que os piratas que são incapazes de decifrar sua segurança encontrarão um produto similar que possam ser quebrados ou não. Eles nunca o comprarão e, portanto, não representam vendas perdidas.

    Além disso, proteger seu produto realmente reduz a receita . Há duas razões para isso. Uma é a pequena porcentagem de clientes que têm problemas com sua ativação ou segurança e, portanto, decidem não comprar novamente ou pedir seu dinheiro de volta. A outra é a pequena porcentagem de pessoas que realmente experimentam uma versão pirata do software para garantir que ele funcione antes de comprar. Limitar a distribuição pirateada do seu produto ( se você for de alguma forma capaz de ter sucesso nisso) impede que essas pessoas experimentem seu produto, e assim elas nunca o comprarão. Além disso, a pirataria também pode ajudar seu produto a se espalhar para um público mais amplo, atingindo assim mais pessoas que estarão dispostas a pagar por isso.

    Uma estratégia melhor é supor que seu produto será pirateado e pensar em maneiras de aproveitar a situação. Mais alguns links sobre o tópico:
    Como faço para evitar que meu código seja roubado?
    Protegendo um aplicativo .NET

    No trabalho, usamos o Dotfuscator da PreEmptive Solutions.

    Embora seja impossível proteger as montagens .NET, 100% Dotfuscator torna isso difícil o suficiente, eu acho. Eu venho com muitas técnicas de ofuscação;

    Renomeação de Cross Assembly
    Renomeando esquemas
    Renomeando Prefixo
    Indução de Sobrecarga Aprimorada
    Obstrução Incremental
    Relatório de Renomeação de HTML
    Controle de stream
    Criptografia de Cadeia

    E descobriu-se que eles não são muito caros para as pequenas empresas. Eles têm um preço especial para pequenas empresas.

    (Não, não estou trabalhando para PreEmptive ;-))

    Existem alternativas de freeware, é claro;

    Hospede seu serviço em qualquer provedor de serviços em nuvem.

    Como evitar a descompilation de qualquer aplicativo c #

    Quase descreve toda a situação.

    Em algum momento, o código terá que ser traduzido para o bytecode da VM, e o usuário poderá acessá-lo.

    O código da máquina também não é muito diferente. Um bom desassemblador / depurador interativo como o IDA Pro torna praticamente qualquer aplicativo nativo transparente. O depurador é inteligente o suficiente para usar o AI para identificar APIs comuns, otimizações de compiladores, etc., permitindo que o usuário reconstrua meticulosamente construções de alto nível a partir do conjunto gerado a partir do código de máquina.

    E IDA Pro suporta .Net, até certo ponto também.

    Honestamente, depois de trabalhar em um projeto de engenharia reversa (por compatibilidade) por alguns anos, a principal coisa que tirei da minha experiência é que eu provavelmente não deveria me preocupar muito com pessoas roubando meu código. Se alguém quiser, nunca será muito difícil obtê-lo, independentemente do esquema que eu implementar.

    Eu sei que você não quer ofuscar, mas talvez você devesse checar o dotfuscator , ele irá pegar suas assemblagens compiladas e ofuscá-las para você. Eu acho que pode até criptografá-los.

    Nenhum obsfuscator pode proteger sua aplicação, nem mesmo qualquer um descrito aqui. Veja este link, é um desobstrutor que pode ofuscar quase todos os observadores.

    https://github.com/0xd4d/de4dot

    A melhor maneira que pode ajudá-lo (mas lembre-se que eles também não são full prof) é usar códigos mistos, codificar seus códigos importantes em linguagem não gerenciada e fazer uma DLL como em C ou C ++ e, em seguida, protegê-los com Armageddon ou Themida. Themida não é para todos os crackers, é um dos melhores protectores do mercado, também pode proteger o seu software .NET.

    Eu ouvi sobre alguns projetos que compilar diretamente IL em código nativo. Você pode obter algumas informações adicionais deste post: É possível compilar o código IL .NET para código de máquina?

    Usamos a proteção {SmartAssembly} para .NET de um aplicativo distribuído de nível corporativo e ela funcionou muito bem para nós.

    Se você quiser proteger totalmente o seu aplicativo de descompilation, veja o Hasp de Aladdin. Você pode agrupar seus assemblies em um shell criptografado que só pode ser acessado pelo seu aplicativo. É claro que alguém se pergunta como eles podem fazer isso, mas funciona. Eu não sei, no entanto, se eles protegem o seu aplicativo de anexo / reflection de tempo de execução, que é o que o Crack.NET é capaz de fazer.

    – Edit Também tenha cuidado ao compilar código nativo como uma solução … também existem descompiladores para código nativo.

    Se alguém tiver que roubar seu código, provavelmente significa que seu modelo de negócios não está funcionando. O que quero dizer com isso? Por exemplo, eu compro seu produto e peço suporte. Você está muito ocupado ou acredita que meu pedido não é válido e um desperdício de tempo. Eu decodifico seu produto para suportar meu negócio relativo. Seu produto se torna mais valioso para mim e priorizo ​​meu tempo de maneira a resolver o modelo de negócios para alavancar seu produto. Eu reconto e re-brand seu produto e, em seguida, saio e faço o dinheiro que você decidiu deixar na mesa. Existem razões para proteger o código, mas provavelmente você está olhando para o problema do ponto de vista errado. Claro que você é. Você é o “codificador” e eu sou o homem de negócios. 😉 Felicidades!

    ps. Eu também sou um desenvolvedor. ou seja, “codificador”

    Você API?

    Em vez de tentar proteger seu arquivo ddl em um de seus produtos em todos os dispositivos de seus clientes, por que não criar um serviço de API para seus resources preciosos? Deixe o produto real salvo em um dispositivo consumir essa API para entregar o produto como você deseja.

    Acho que dessa forma você tem 100% de certeza de que seu código não está descompilado e define seus próprios limites na API para que os desenvolvedores / hackers não consumam sua API da maneira que você não deseja.

    Claro que é mais um pouco de trabalho, mas no final, você está no controle.

    Eu sei que isso é velho, mas, Themida é o software anti-cracking mais avançado que já usei.
    Não é livre, no entanto.