none
Disassembler .net RRS feed

  • Pergunta

  • Pessoal, pelo que percebi, utilizando o .NET Reflector é possível visualizar o código fonte das aplicações...
    Será que tem algum jeito de bloquear isso?

    Valeu!
    sexta-feira, 7 de agosto de 2009 13:31

Respostas

  • Hmm, eu já ouvi falar sobre fazer isso programaticamente, mas nunca obtive sucesso.

    O Visual Studio Profissional vem com um aplicativo chamado Dotfuscator Community Edition.

    Uma outra opção é o Protector Lite , criado por LukeSw.
    Aliás, no site dele você também encontra uns componentes interessantes! ^^

    Att.
    Igor
    • Marcado como Resposta Rafael R sexta-feira, 7 de agosto de 2009 17:54
    sexta-feira, 7 de agosto de 2009 16:37

Todas as Respostas

  • Hmm, eu já ouvi falar sobre fazer isso programaticamente, mas nunca obtive sucesso.

    O Visual Studio Profissional vem com um aplicativo chamado Dotfuscator Community Edition.

    Uma outra opção é o Protector Lite , criado por LukeSw.
    Aliás, no site dele você também encontra uns componentes interessantes! ^^

    Att.
    Igor
    • Marcado como Resposta Rafael R sexta-feira, 7 de agosto de 2009 17:54
    sexta-feira, 7 de agosto de 2009 16:37
  • Igor,

    Obrigado pela ajuda!

    Utilizei o DotFuscator do VS e funcionou parcialmente (acho que é só dar uma pesquisada no Google pra achar um tutorial) =D

    Quanto ao Protector Lite tbm usei, e funcionou direitinho =D e o site é bom mesmo.

    Valeu!

    sexta-feira, 7 de agosto de 2009 17:54
  • Olá Rafael,

    Não é só com o .NET Reflector que isso acontece... Existem dezenas de disassemblers disponíveis para .NET, e todos eles permitem descompilar aplicações.

    É impossível bloquear isso, porque todo código que você desenvolve em alguma linguagem do .NET (C#, VB .NET, etc...) é compilado para IL (Intermediate Language), que é uma linguagem com uma estrutura de alto nível, e por isso é razoavelmente simples transformar o código que está em IL de volta para C# ou VB .NET, por exemplo.

    O máximo que você pode fazer é dificultar esse processo... Impedir totalmente não é possível.

    Os obfuscators ajudam a dificultar, mas não impedem a descompilação... Eles apenas alteram os nomes dos métodos e das variáveis, e alteram também a ordem de algumas operações (quando possível), na tentativa de deixar o código confuso a ponto das pessoas desistirem da idéia de tentar descompilar... Tudo depende da "paciência" de quem descompilar...

    Uma estratégia que muitas empresas utilizam (normalmente em conjunto com obfuscators), é criar uma aplicação em Visual C++ (não-gerenciado) que armazena todos os assemblies (DLLs, EXEs, etc...) criptografados dentro dessa aplicação C++. Então, ao iniciar essa aplicação, ela descriptografa os assemblies em tempo de execução, e coloca-os em memória executando diretamente.

    Isso dificulta a vida de algumas pessoas, porque não são criados arquivos físicos no disco, que podem ser descompilados (tudo é feito em memória), mas novamente, isso não impede que você utilize um debugger qualquer para examinar a memória do processo, e extrair os assemblies que estão carregados, para arquivos em disco.


    Abraços,
    Caio Proiete



    Caio Proiete Siga-me no Twitter!
    http://www.caioproiete.com
    sexta-feira, 7 de agosto de 2009 17:56
    Moderador
  • Caio,

    Muito obrigado pela informação. Achei que só com ofuscator fosse possível impedir a leitura do código.
    Mas esse método que citou, de criar uma aplicação em C++, teria algum link ou material sobre isso, pois não intendi muito bem como isso ocorre.
    Pelo que pude intender, é criado uma aplicação em C++ com os assemblies (C#) incluídos, como resources, e depois são utilizados numa boa. É isso?
    sexta-feira, 7 de agosto de 2009 20:25
  • Oi, o assunto me interessou um pouco, sei não tem muito a ver, mas gotaria de saber se Java também tem este mesmo problema, e C++, não o Visual C++, mas o GCC mesmo, por exemplo.

    Obrigado.
    sábado, 8 de agosto de 2009 00:37
  • @Caio Proiete [MVP]
    Então o .NET Framework lê e executa essa IL na runtime?
    Por isso que o obfuscator (que complica o código), não interfere no programa, já que é o PC, na runtime, que lê isso?

    @tera1985
    Java eu sei que tem, se eu não me engano tem algo a ver com o comando "javap", mas existem programas prontos que fazem isso.
    sábado, 8 de agosto de 2009 00:43
  • Olá Rafael,

    Pois é... Os Obfuscators não impedem, apenas tentam confundir para dificultar a leitura.

    Sobre a criação de uma aplicação C++ nativa, a idéia é essa mesma, criar uma aplicação C++, colocar os assemblies nos resources, de preferência criptografados, e carregá-los em memória na hora da execução, sem chegar a escrevê-los em disco.

    É mais ou menos isso que a ferramenta .NET Reactor faz, por exemplo:

    .NET Reactor
    http://www.eziriz.com/


    Abraços,
    Caio Proiete



    Caio Proiete Siga-me no Twitter!
    http://www.caioproiete.com
    domingo, 9 de agosto de 2009 01:10
    Moderador
  • Olá Tera,

    Isso não é um problema, é uma "característica" :).

    Com o Java é a mesma coisa... O código Java é compilado para Java bytecode, que também é uma linguagem de alto nível, e por isso pode ser descompilado de volta para código Java... Existem várias ferramentas que permitem descompilar os arquivos .class, como por exemplo:

    Java Decompilar project
    http://java.decompiler.free.fr/

    DJ Java Decompiler
    http://members.fortunecity.com/neshkov/dj.html

    JAD  Java Decompiler
    http://www.varaneckas.com/jad

    JReversePro
    http://jreversepro.blogspot.com/


    Abraços,
    Caio Proiete



    Caio Proiete Siga-me no Twitter!
    http://www.caioproiete.com
    • Sugerido como Resposta Junio Albino segunda-feira, 10 de agosto de 2009 14:01
    domingo, 9 de agosto de 2009 01:22
    Moderador
  • Olá Igor,

    Exatamente... O código em IL é executado pela Common Language Runtime (CLR) do .NET. Os Obfuscators mudam os nomes das funções e fazem algumas "misturas" nas chamadas dos métodos, para dificultar a leitura do código (entre outras coisas).

    Existem várias técnicas para tornar o código mais "obscuro" e difícil de ler, e cada ferramenta normalmente tem seu próprio algoritmo para fazer as confusões. Na Wikipedia tem um artigo muito bom, que mostra algumas técnicas interessantes:

    Obfuscated Code
    http://en.wikipedia.org/wiki/Obfuscated_code

    Abraços,
    Caio Proiete



    Caio Proiete Siga-me no Twitter!
    http://www.caioproiete.com
    domingo, 9 de agosto de 2009 01:29
    Moderador
  • Boa Noite ....

    Caio....

    Vc saberia de algum exemplo de como eu subir o executavel criptografado em C# na memória utlizando o C++, conforme você sitou acima....[

    abraço .....
    domingo, 30 de agosto de 2009 00:51