Ir para conteúdo
  • Biblioteca em Python para instrumentação de binários


    Fernando Mercês

    A QuarksLab liberou recentemente o que chamou de LIEF, uma biblioteca multiplataforma para parsear binários Mach-O, ELF e PE. Funciona de forma similar à nossa libpe, mas liberaram wrapper pra Python, suporte à escrita, etc. Devo dizer que tem muito mais funções. :)

    Segue um exemplo em Python usando a LIEF para extrair informações de um PE com saída similar à do readpe, do toolkit to pev:

    import lief
    
    pe = lief.parse('churrasco.exe')
    print(pe)

    A saída é:

    Dos Header
    ==========
    Magic:                        5a4d
    Used Bytes In The LastPage:   90
    File Size In Pages:           3
    Number Of Relocation:         0
    Header Size In Paragraphs:    4
    Minimum Extra Paragraphs:     0
    Maximum Extra Paragraphs:     ffff
    Initial Relative SS:          0
    Initial SP:                   b8
    Checksum:                     0
    Initial IP:                   0
    Initial Relative CS:          0
    Address Of Relocation Table:  40
    Overlay Number:               0
    OEM id:                       0
    OEM info:                     0
    Address Of New Exe Header:    e0
    
    Rich Header
    ===========
    Key: d089bb0a
      - ID: 0x9100 Build ID: 0x7809 Count: 1
      - ID: 0x8400 Build ID: 0x7809 Count: 41
      - ID: 0x1000 Build ID: 0x0000 Count: 100
      - ID: 0x7b00 Build ID: 0xc627 Count: 7
      - ID: 0x8300 Build ID: 0x7809 Count: 93
      - ID: 0x9500 Build ID: 0x7809 Count: 18
      - ID: 0x0000 Build ID: 0x0000 Count: 0
    
    
    Header
    ======
    Signature:                    50 45 0 0 
    Machine:                      I386
    Number Of Sections:           3
    Pointer To Symbol Table:      0
    Number Of Symbols:            0
    Size Of Optional Header:      e0
    Characteristics:              RELOCS_STRIPPED - EXECUTABLE_IMAGE - CHARA_32BIT_MACHINE
    Time Date Stamp:              4be33f4a
    ...

    Tem muita coisa legal na LIEF. Experimenta substituir a linha print(pe) por help(pe) para ver todas as opções do que dá pra fazer com um PE e testa também com os outros formatos. Você vai se surpreender. :)

    Se ficou curioso, a maneira mais fácil de instalar é com o pip:

    $ pip install lief

    A LIEF também tem headers para C e C++.

    Editado por Fernando Mercês


    Feedback do Usuário

    Comentários Recomendados



    Participe da conversa

    Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

    Visitante
    Adicionar um comentário...

    ×   Você colou conteúdo com formatação.   Remover formatação

      Apenas 75 emojis são permitidos.

    ×   Seu link foi automaticamente incorporado.   Mostrar como link

    ×   Seu conteúdo anterior foi restaurado.   Limpar o editor

    ×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.


×
×
  • Criar Novo...