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



    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    Criar uma conta

    Crie uma nova conta em nossa comunidade. É fácil!

    Crie uma nova conta

    Entrar

    Já tem uma conta? Faça o login.

    Entrar Agora


×