2012/02/03

Descompilador .Net Gratuito


A maioria das pessoas saberá o que é o chamado "código-fonte" (source-code)... aquelas linguagens estranhas que os hackers escrevem nos filmes a toda a velocidade, e que no fundo são as instruções que se escondem no interior de todo e qualquer programa que executam nos vossos computadores.

Todo esse texto, cuja sintaxe varia em função da linguagem de programação, é depois interpretada ou compilada em instruções que fazem sentido para o computador, mas que se tornam praticamente indecifráveis para nós.

No entanto, não se pense que tudo fica perdido; ou que o vosso programa automaticamente fica protegido contra os olhares indiscretos: pois existem ferramentas que fazem o processo inverso, descompilando um executável de volta para código fonte, como é o caso desde descompilador de .Net gratuito que hoje vos trago.

Neste caso, o .Net é um pouco diferente das linguagens compiladas, pois utiliza uma linguagem intermédia que até facilita este processo; mas... o princípio é o mesmo.

Este tipo de ferramentas é bastante poderosa, e como sempre... pode ser utilizada para o "bem" e para o "mal". Servindo para que um programador possa verificar se o seu programa está efectivamente a ser compilado tal como pretendia, e até podendo ajudar a optimizar partes críticas - como também pode ser usado por um atacante/hacker que esteja a ver como funcionam as partes internas do programa, e assim podendo obter informação que não deveria ou ultrapassar sistemas de protecção.

5 comentários:

  1. Dai ser tão importante ofuscar o código...
    é sempre um perigo enorme alguém andar a vasculhar o nosso código...

    ResponderEliminar
  2. Anónimo3/2/12 09:35

    O artigo seria bom se indica-se que é possível ofuscar o código e que ferramentas são ideias para o processo tipo, .NET Reactor

    ResponderEliminar
  3. "Neste caso, o .Net é um pouco diferente das linguagens compiladas, pois utiliza uma linguagem intermédia que até facilita este processo; mas... o princípio é o mesmo."
    Não é não o! .Net ou como é conhecido dot Not é uma linguagem interpretada, por isso é que é possivel "descompilar", já o Delphi ou o c++ é impossivel de descompilar.
    O que é uma linguagem interpretada: a que necessita de um programa intermedio para se executar o nosso software. Exemplos: .Net, Visual Basic, JAVA, Python, perl, etc.
    O ofuscação do código é muito importante nestas linguagens porque dificulta a descoberta dos algoritmos.
    Há até concursos de ofuscação: http://c2.com/cgi/wiki?InternationalObfuscatedCeeCodeContest

    ResponderEliminar
  4. A obfuscação não entra aqui para o caso. Isso é algo que apenas serve para tornar ilegível o código fonte: depois de um programa compilado, pode ser sempre descompilado - independentemente da linguagem fonte que lhe deu origem (no extremo, usando um desassemblador).

    Obviamente que o programa fonte que é recriado não é igual ao original (não terá o nome das variáveis, ou comentários, ou nome das funções, que serão subtituidos por nomes genéricos)... mas terás código fonte que, recompilando, dará origem ao mesmo binário executável.

    E por isso mesmo, se torna irrelevante qualquer "obsfucação".

    Imagina que há um programa que faz um:

    a=1+1;

    E na sua versão obfuscada seria:

    byzpo234=678234-678233+5-4+1-2;

    (exemplo estúpido eu sei :)
    Se o compilador optimizar a coisa, o resultado seria simplesmente um:
    a=2
    em instruções binárias, e que quando descompiladas retornariam um programa fonte do género:

    var1=2;

    Ou seja... não há obfuscação que faça diferença.

    A obfuscação poderá servir como desmotivadora e dificultar o processo... mas não serve de nada para quem se dedicar a fazer o reverse engineering do executável (conforme demonstrado pelas décadas de hacks e cracks que continuam a existir, ultrapassando todo e qualquer tipo de pseudo-sistemas de segurança dos softwares).

    ResponderEliminar
  5. "depois de um programa compilado, pode ser sempre descompilado - independentemente da linguagem fonte que lhe deu origem"
    não se chama descompilado mas dessasemblado, é muito diferente porque o resultado será código maquina (bons velhos tempos)!
    quando se trata de obfuscar o código é para dificultar a descoberta dos algoritmos, e baseia-se numa maxima da programação que diz que é mais facil escrever código do que ler código, isto acontece no dia a dia quando estamos um periodo de tempo sem trabalhar-mos com o código de um programa e depois para pegar naquilo é mais complicado do que devia.
    Quanto á protecção do software será em ultima instancia inutil, porque se podemos fechar um cofre tambem podemos abri-lo -que o diga a Steinberg que teve de pagar aos hackers para irem de férias em vez de crackarem o seu software-

    ResponderEliminar