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
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