Análisis de binarios con PEDump

En DragonJAR hemos visto diferentes herramientas para el análisis de binarios, como "Anubis: Analyzing Unknown Binaries". Además de las herramientas vistas aquí en nuestra comunidad, en el mercado existen algunas como solucinoes muy completas como pefile o PeStudio que nos permiten realizar esta tarea.

En el artículo de hoy veremos PeDump, una herramienta que nos va a permitir analizar binarios, la cual esta implementada en Ruby y soporta los siguientes formatos:

  • DOS MZ EXE
  • win16 NE
  • win32 PE
  • win64 PE

Además es capaz de extraer la siguiente información:

  • MZ/NE/PE Header
  • DOS stub
  • 'Rich' Header
  • Data Directory
  • Sections
  • Resources
  • Strings
  • Imports & Exports
  • VS_VERSIONINFO parsing
  • PE Packer/Compiler detection
  • Posibilidad de usar una herramienta online http://pedump.me

Lo primero que vamos ha hacer para utilizar la herramienta es descagarla e instalarla:

seifreed@blackhole:~$ sudo gem install pedump

Password:

Fetching: multipart-post-1.1.5.gem (100%)

Fetching: progressbar-0.21.0.gem (100%)

Fetching: awesome_print-1.2.0.gem (100%)

Fetching: iostruct-0.0.4.gem (100%)

Fetching: zhexdump-0.0.2.gem (100%)

Fetching: pedump-0.5.0.gem (100%)

Successfully installed multipart-post-1.1.5

Successfully installed progressbar-0.21.0

Successfully installed awesome_print-1.2.0

Successfully installed iostruct-0.0.4

Successfully installed zhexdump-0.0.2

Successfully installed pedump-0.5.0

6 gems installed

Installing ri documentation for multipart-post-1.1.5...

Building YARD (yri) index for multipart-post-1.1.5...

Installing ri documentation for progressbar-0.21.0...

Building YARD (yri) index for progressbar-0.21.0...

Installing ri documentation for awesome_print-1.2.0...

Building YARD (yri) index for awesome_print-1.2.0...

Installing ri documentation for iostruct-0.0.4...

Building YARD (yri) index for iostruct-0.0.4...

Installing ri documentation for zhexdump-0.0.2...

Building YARD (yri) index for zhexdump-0.0.2...

Installing ri documentation for pedump-0.5.0...

Building YARD (yri) index for pedump-0.5.0...

Installing RDoc documentation for multipart-post-1.1.5...

Installing RDoc documentation for progressbar-0.21.0...

Installing RDoc documentation for awesome_print-1.2.0...

Installing RDoc documentation for iostruct-0.0.4...

Installing RDoc documentation for zhexdump-0.0.2...

Installing RDoc documentation for pedump-0.5.0...

Una vez instalada, invocamos el HELP para poder ver que posibilidades nos ofrece:

seifreed@blackhole-2:~$ pedump -h

Usage: pedump [options]

        --version                    Print version information and exit

    -v, --verbose                    Run verbosely

                                     (can be used multiple times)

    -q, --quiet                      Silent any warnings

                                     (can be used multiple times)

    -F, --force                      Try to dump by all means

                                     (can cause exceptions & heavy wounds)

    -f, --format FORMAT              Output format: bin,c,dump,hex,inspect,table,yaml

                                     (default: table)

        --mz

        --dos-stub

        --rich

        --pe

        --ne

        --data-directory

    -S, --sections

        --tls

        --security

    -s, --strings

    -R, --resources

        --resource-directory

    -I, --imports

    -E, --exports

    -V, --version-info

        --packer

        --deep                       packer deep scan, significantly slower

    -P, --packer-only                packer/compiler detect only,

                                     mimics 'file' command output

    -r, --recursive                  recurse dirs in packer detect

        --all                        Dump all but resource-directory (default)

        --va2file VA                 Convert RVA to file offset

    -W, --web                        Uploads files to a http://pedump.me

                                     for a nice HTML tables with image previews,

                                     candies & stuff

    -C, --console                    opens IRB console with specified file loaded

Lo ejecutamos y vamos a extraer información sobre el binario:

=== MZ Header ===

                     signature:                     "MZ"

           bytes_in_last_block:        144          0x90

                blocks_in_file:          3             3

                    num_relocs:          0             0

             header_paragraphs:          4             4

          min_extra_paragraphs:          0             0

          max_extra_paragraphs:      65535        0xffff

                            ss:          0             0

                            sp:        184          0xb8

                      checksum:          0             0

                            ip:          0             0

                            cs:          0             0

            reloc_table_offset:         64          0x40

                overlay_number:          0             0

                     reserved0:          0             0

                        oem_id:          0             0

                      oem_info:          0             0

                     reserved2:          0             0

                     reserved3:          0             0

                     reserved4:          0             0

                     reserved5:          0             0

                     reserved6:          0             0

                        lfanew:        184          0xb8

Indicando la opción MZ, extraemos la información sobre el binario a analizar

Si queremos extraer la cabecera, podemos indicarlo como parámetro:

=== PE Header ===

                     signature:             "PE\x00\x00"

# IMAGE_FILE_HEADER:

                       Machine:        332         0x14c  x86

              NumberOfSections:          3             3

                 TimeDateStamp:    "2013-05-15 13:36:21"

          PointerToSymbolTable:          0             0

               NumberOfSymbols:          0             0

          SizeOfOptionalHeader:        224          0xe0

               Characteristics:        271         0x10f  RELOCS_STRIPPED, EXECUTABLE_IMAGE

                                                          LINE_NUMS_STRIPPED, LOCAL_SYMS_STRIPPED

                                                          32BIT_MACHINE

# IMAGE_OPTIONAL_HEADER32:

                         Magic:        267         0x10b  32-bit executable

                 LinkerVersion:                      6.0

                    SizeOfCode:      36864        0x9000

         SizeOfInitializedData:     266240       0x41000

       SizeOfUninitializedData:          0             0

           AddressOfEntryPoint:       5040        0x13b0

                    BaseOfCode:       4096        0x1000

                    BaseOfData:      40960        0xa000

                     ImageBase:    4194304      0x400000

              SectionAlignment:       4096        0x1000

                 FileAlignment:       4096        0x1000

        OperatingSystemVersion:                      4.0

                  ImageVersion:                      1.0

              SubsystemVersion:                      4.0

                     Reserved1:          0             0

                   SizeOfImage:     307200       0x4b000

                 SizeOfHeaders:       4096        0x1000

                      CheckSum:     341490       0x535f2

                     Subsystem:          2             2  WINDOWS_GUI

            DllCharacteristics:          0             0

            SizeOfStackReserve:    1048576      0x100000

             SizeOfStackCommit:       4096        0x1000

             SizeOfHeapReserve:    1048576      0x100000

              SizeOfHeapCommit:       4096        0x1000

                   LoaderFlags:          0             0

           NumberOfRvaAndSizes:         16          0x10

Además de las opciones que hemos visto invocando el HELP, también existe una interfaz Web en la que podremos subir binarios para analizarlos con PeDump

pedump

Tambien cuenta con integración con Virus Total y permite el uso de DisASM, ademas de ofrecer una version online con todas las funcionalidades de la herramienta que corre en la pagina http://pedump.me/

Recuerda que cuando subimos un ejecutable la informacion de este queda publico en la pagina de la herramienta.

Podemos instalar la herramienta con GEM, o podemos bajarla y compilarla desde su repositorio en GitHub https://github.com/zed-0xff/pedump

Subir