Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Identificando programas compactados

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Identificando programas compactados

    Olá pessoas, decidi escrever este pequeno artigo para mostrar-lhes como é possível identificar um programa compactado sem a ajuda desses auto-scanners como PEiD, EXEInfoPE e etc...

    1º Método - Imports

    O executável compactado tem poucos imports, isso acontece porque a IAT (Import Address Table) também foi compactada, e uma nova IAT foi sobreposta à ela. Essa nova IAT tem poucas funções, e quase sempre contém essas duas: LoadLibraryA e GetProcAddress, ambas provenientes da kernel32.dll.

    LoadLibraryA é responsável por carregar as dlls da IAT original do programa, assim que ela é reconstruída, e depois disso, a GetProcAddress se responsabiliza por pegar o endereço de cada função usada pelo programa original.

    Ou seja, quando um software compactado é executado, a unpacking stub descompacta o executável na memória, reconstrói a IAT original e transfere a execução para o OEP (Original Entry Point).



    2º Método - Analisando o Entry Point

    EP, ou Entry Point, é o endereço da primeira linha de execução do programa. Esse endereço deve estar sempre localizado na seção .text (a seção que contém o código do executável (não necessariamente ela tem esse nome)). Então, ao vermos o PE Header com algum editor, no campo Optional Header, a flag AddressOfEntryPoint deve apontar para a seção .text. Se ele apontar para outra seção, algo estranho está acontecendo. No exemplo abaixo, o EntryPoint está localizado na seção .aspack (que já nos dá certeza de que ele está compactado com o aspack).



    Isso acontece porque o EntryPoint está localizado na Unpacking Stub, que faz a descompressão do arquivo na memória, e depois passa a instrução pro OEP (Original Entry Point, o EP do programa descompactado).



    3º Método - Analisando o tamanho das seções

    Já aproveitando o embalo nas seções, devemos também olhar as flags Raw Size e Virtual Size da seção .text.

    Raw Size se refere ao tamanho em bytes do arquivo no disco rígido.
    Virtual Size se refere ao tamanho em bytes do arquivo na memória.

    Se o Virtual Size for muito maior que o Raw Size, quer dizer que o programa tem um tamanho maior quando está na memória, do que quando está em disco. Ou seja, o programa se descompacta, ficando bem maior do que realmente é (ou parece ser).



    No exemplo acima, o Virtual Size tem tamanho de 2000 (8192 em decimal), enquanto que o Raw Size tem E00 (3584 em decimal). A diferença é bem grande, cerca de 4608 bytes são descompactados na memória.

    Apenas resumindo:

    1- O programa tem poucos imports, geralmente o LoadLibraryA e GetProcAddress;
    2 - O EntryPoint está na seção errada (fora da .text);
    3 - Existe alguma seção que denuncia a utilização de packer (como .aspack, .UPXo, etc);
    4 - O Virtual Size é bem maior que o Raw Size na seção .text;

    Bom, é basicamente isso, é sempre bom usar todos os métodos que citei aqui, pois um complementa o outro. Espero que o texto tenha ficado compreensivo à todos, estou aberto a críticas construtivas e dúvidas. Obrigado e até a próxima =)

    Escrito por Nickguitar.dll em 14/01/2015.
    .

    - PHP & VB C0d3r.

    Nickguitar.dll@hotmail.com

    http://www.youtube.com/user/superskate56 <~ Hacking tuts =)

    Quando aprendemos a ouvir, também aprendemos a falar..
    Quando aprendemos a ler, também aprendemos a escrever.
    Então, quando aprendemos a usar um computador, por que não aprender a programa-lo ?


    I'm C0ding for $$$

    #~: Just $this :~#
    Similar Threads

  • Font Size
    #2
    Muito bom Nick, muito bom.
    "Não subestime os fracos pois eles não agem com a força e sim com a mente."

    Comment


    • Font Size
      #3
      Vlw

      Muito bom, dá uma enorme ajuda
      O bem e o mal não existem, existe os pontos de vista

      Comment


      • Font Size
        #4
        Bem ou mal?

        Tem razão...mas exatamente esses pontos de vista é que dão sentido ao que consideramos bem ou mal

        Comment


        • Font Size
          #5
          tem um modo mais prático e rápido...

          na maior parte das veses basta olhar o "magick number", o cabeçalho diz muito, só isso :P
          sigpic

          Comment


          • Font Size
            #6
            Postado Originalmente por ed_frz Ver Post
            na maior parte das veses basta olhar o "magick number", o cabeçalho diz muito, só isso :P
            Como assim? Pelo que eu sei, o magic number serve só pro windows identificar o formato do arquivo... Como é possível identificar um programa packeado olhando o magic number?

            Abraço.
            .

            - PHP & VB C0d3r.

            Nickguitar.dll@hotmail.com

            http://www.youtube.com/user/superskate56 <~ Hacking tuts =)

            Quando aprendemos a ouvir, também aprendemos a falar..
            Quando aprendemos a ler, também aprendemos a escrever.
            Então, quando aprendemos a usar um computador, por que não aprender a programa-lo ?


            I'm C0ding for $$$

            #~: Just $this :~#

            Comment


            • Font Size
              #7
              cara...

              deixa pra lá, falei merda -.-'

              confundi signatures com magic number, pqp ¬¬'

              Código:
              000000b0: a298 b634 5550 5821  ...4UPX!
              000000b8: f407 0d16 0000 0000  ........



              é uma merda quando se percebe q errou em algo, mas errar faz parte kkkkkkkkkkkkk
              sigpic

              Comment


              • Font Size
                #8
                Ah sim... Entendi. Isso aí são as seções que o packer cria.
                Dá pra identificar por aí, mas tem uns packers melhoreszinhos que criam seções com nomes padrão, aí fica mais difícil de identificar.
                Mas é sempre bom ver por ai
                .

                - PHP & VB C0d3r.

                Nickguitar.dll@hotmail.com

                http://www.youtube.com/user/superskate56 <~ Hacking tuts =)

                Quando aprendemos a ouvir, também aprendemos a falar..
                Quando aprendemos a ler, também aprendemos a escrever.
                Então, quando aprendemos a usar um computador, por que não aprender a programa-lo ?


                I'm C0ding for $$$

                #~: Just $this :~#

                Comment


                • Font Size
                  #9
                  Sou novo

                  Olha eu sou novo em algumas areas... sou o tipo de pessoa que entende 1 pouco de tudo e 1 pouco de nada, entendo muito e em outras coisas... nada...
                  Ok queria saber o Seguinte... como assim "Aquivos Compactados" tipo, Winrar com senha? pfv explica pra mim sem julgar
                  Cada dia aprendendo coisa Novas!
                  sigpic

                  Comment


                  • Font Size
                    #10
                    Não. Existem programas chamados packers, que fazem +/- a mesma coisa que o winrar. Eles servem pra deixar o programa menor, e isso foi bem usado por muito tempo (e ainda é usado até hoje) porque o tamanho do arquivo fica menor.
                    Acontece que esses packers podem ser usados para burlar anti-vírus, já que eles "embolam" o código original do programa pra deixá-lo menor, e isso pode fazer com que o anti-vírus pense que o programa se trata de outra coisa, ao invés de um vírus.
                    A maioria dos AVs detectam arquivos compactados como vírus genérico, mas ainda assim, muita gente usa.
                    .

                    - PHP & VB C0d3r.

                    Nickguitar.dll@hotmail.com

                    http://www.youtube.com/user/superskate56 <~ Hacking tuts =)

                    Quando aprendemos a ouvir, também aprendemos a falar..
                    Quando aprendemos a ler, também aprendemos a escrever.
                    Então, quando aprendemos a usar um computador, por que não aprender a programa-lo ?


                    I'm C0ding for $$$

                    #~: Just $this :~#

                    Comment


                    • Font Size
                      #11
                      Obrigado

                      Ah ta agora que vi vc explicando ali! Entendi então arquivos compactados ou Packers são tipo UPX néh! valeu explicação lek xD
                      Cada dia aprendendo coisa Novas!
                      sigpic

                      Comment

                      X
                      Working...
                      X