Ferramentas

Esta seção aborda não somente ferramentas utilizadas no livro, mas também outras que vale a pena citar na esperança que o leitor se sinta atraído a baixar, usar e tirar suas próprias conclusões em relação à eficiência delas.

Editores Hexadecimais

Este tipo de ferramenta é útil para editar arquivos binários em geral, não somente executáveis, dumpar (copiar) conteúdo de trechos de arquivos, etc. Também é possível editar uma partição ou disco com bons editores hexadecimal a fim de recuperar arquivos, por exemplo.

NomeLicençaDescrição

Shareware

Multiplataforma, bastante usado. Suporta templates e scripts. Alguns dizem que é o melhor atualmente.

Livre

Editor de interface de texto (TUI), similar ao HT Editor. Tem versão para DOS/Windows mas reina mesmo é no Linux.

Livre

Editor gráfico multiplataforma capaz de exibir o binário graficamente, além de suportar expressões regulares na busca.

Livre

Comercial

Editor incrível para Windows. Tem recursos muito legais como edição e alocação de memória, operações com dados (XOR, SHL, etc) e na versão paga tem suporte a vários algoritmos criptográficos, disassembly e mais.

Comercial

Pago, somente para Windows, antigo, mas muito bem feito.

Livre

Somente para macOS, com recursos legais como diff e data inspector.

Shareware

Linux, macOS e Windows. Tem templates (chamados de "grammars"), scripting em Python e Lua e compara binários.

Livre

Baseado na ncurses, portanto de interface gráfica de texto. Tinha potencial, mas o desenvolvimento parou no final de 2022.

Comercial

Editor (e disassembler) muito poderoso, principalmente por conta de seus módulos HEM. Tem suporte à vários formatos e é muito usado por analistas de malware, mas é pago.

Livre

Interface gráfica baseada em texto, parecido com o Hiew. Tem muitos recursos, mas infelizmente o desenvolvimento parou em 2015. Hora de alguém fazer um fork!

Freeware

Bem bom. Possui recursos extras como geração de hashes e suporte a abrir discos.

Livre

Impressionante editor gráfico para Windows, macOS e Linux. Possui uma linguagem de patterns para aplicar no arquivo, exporta/importa patches e muito mais.

Livre

Nova proposta de um editor especificamente para engenharia reversa.

Comercial

Para macOS, desenvolvido por quem faz o Hexinator. Tem o mesmo nível de recursos.

Comercial

Editor com edições especiais focadas em forense, mas faz tudo que os outros fazem também. Somente para Windows.

Livre

Multiplataforma, recursos interessantes. Infelizmente o desenvolvimento parou em 2017.

Freeware

Sem muitos recursos, mas quebra um galho no Windows para uma edição rápida.

Analisadores Estáticos de Executáveis

Analisam estaticamente os binários, sem carregá-los. São úteis para uma primeira visão sobre um executável desconhecido.

NomeLicençaDescrição

Livre

Detecta as capacidades de executáveis PE e shellcodes para Windows.

Freeware

Sendo parte do Explorer Suite, é na real um editor de PE. Com ele é possível adicionar imports, remover seções, etc.

Freeware

Detecta compilador, linker, packer e protectors em binários. Também edita os arquivos.

Freeware

Analisador de PE de linha de comando disponível no SDK do Visual Studio.

Freeware

Parser de linha de comando para Windows. Suporta arquivos NE, LX/LE, PE/PE32+, ELF/ELF64 (little-endian), Mach-O (little-endian), e TE.

Freeware

Detecta compilador, packer, protectors e edita os arquivos, além de suportar vários plugins loucos. Tem versão VIP mediante doação.

Livre

Mais um nacional pra uma primeira impressão de arquivos suspeitos, URLs e domínios. Checa também APKs.

Livre

Parte do GNU binutils, também analisa PE, além de ELF, a.out, etc.

Freeware

Analisador gráfico (Qt) multiplataforma que também detecta packers/protectors.

Livre

Analisador online muito legal!

Freeware

Analisador de PE padrão da indústria, com foco em malware. Tem versão Pro (paga).

Livre

Também parte do binutils, analisador de ELF.

Livre

Freeware

Analisador e editor com suporte a plugins, assinaturas do antigo PEiD, editor de recursos e mais.

Bibliotecas para parsear Executáveis

NomeLicençaDescrição

Livre

Binary File Descriptor é a biblioteca usada por programas como readelf e objdump. Tem suporte a muitos tipos de arquivos, incluindo PE e ELF, claro.

Livre

Nossa 💚 biblioteca multiplataforma para parsing de arquivos PE.

Livre

Biblioteca em C++ para PE usada pelo PE-Bear.

Livre

Famosa biblioteca em Python pra fazer qualquer coisa com arquivos PE.

Livre

Biblioteca em .Net para PE.

Livre

Biblioteca em Java para PE.

Livre

Biblioteca em Python para parsear binários ELF.

Assemblers

NomeLicençaDescrição

Livre

Assembler bem recente que já vem com vários exemplos de código. Windows e Linux.

Livre

Também chamado simplesmente de as, é o assembler do projeto GNU e provavelmente já está instalado no seu Linux!

Freeware

Livre

Livre

Multiplataforma, escrito com base no NASM pra ser um substituto mas acho que não vingou. hehe

Disassemblers

NomeLicençaDescrição

Comercial

Livre

Comercial

Disassembler com foco em binários de Linux e macOS.

Comercial

Disassembler interativo padrão de mercado. Possui versão freeware.

Debuggers

NomeLicençaDescrição

Livre

Somente para .NET, descompila, debuga e (dis)assembla.

Livre

Debugger gráfico (Qt) com foco em binários ELF no Linux.

Livre

Livre

O GDB Enhanced Features extende o GDB com recursos para engenharia reversa.

Livre

Debugger que roda no nível do hypervisor, também conhecido como ring -1.

Freeware

Poderoso debugger, apesar de não mais mantido.

Livre

O Python Exploit Development Assistance também extende o GDB, assim como o GEF. A interface é um pouco diferente, no entanto.

Freeware

Debugger ring0/3, parte integrante do SDK do Windows.

Livre

Debugger user-mode para Windows com suporte a 32 e 64-bits.

Desofuscadores

NomeLicençaDescrição

Livre

Para .NET. Conhece vários ofuscadores e permite trabalhar genericamente também.

Livre

Para programas feito em Java. Suporta os ofuscadores mais comuns como Stinger e ZKM.

Descompiladores

.NET

NomeLicençaDescrição

Livre

Descompilador multiplataforma para .NET.

Delphi

NomeLicençaDescrição

Livre

Para binários compilados em Delphi.

Genéricos (C, C++, Delphi, etc)

NomeLicençaDescrição

Livre

Descompilador genérico com versão de linha de comando, gráfica e até web.

Livre

Descompilador para C/C++ feito pelo time do Avast. Inclui detector de compilador e packer, plugins para IDA e radare2.

Livre

Descompilador livre para C/C++. Pode ser usado como plugin no IDA, x64dbg, etc.

Java

NomeLicençaDescrição

Livre

Descompilador para Java de linha de comando. O output é o código fonte e só.

Mista

Na verdade é uma IDE para programação em Java mas mesmo a versão Community possui descompilador e debugger para classes compiladas em Java.

Livre

Descompilador para Java com GUI.

Livre

Para Java, com suporte a recursos novos da linguagem. É modo texto mas há GUI's disponíveis documentadas no link.

Visual Basic

NomeLicençaDescrição

Comercial

Descompilador para VB5/6 e disassembler para VB .NET.

Emuladores

NomeLicençaDescrição

Livre

Framework que combina emulação com instrumentação de binários. É possível emular programas de Windows e Linux, além de outros SOs, incluindo ring0.

Livre

Emulador feito pela FireEye, inicialmente para programas nativos de Windows (ring0) mas possui um crescente suporta à programas em usermode (ring3), emulando várias das funções da Windows API.

Frameworks

NomeLicençaDescrição

Livre

Framework para análise estática e simbólica de binários.

Livre

Framework para instrumentação dinâmica de binários.

Livre

Plataforma de análise dinâmica baseada no QEMU, que faz até replay de ações.

Livre

Suíte completa com debugger, disassembler e outras ferramentas para quase todo tipo de binário existente!

Monitores de Processos

NomeLicençaDescrição

Freeware

Clássica ferramenta do conjunto SysInternals, que exibe muito mais que o Gerenciador de Tarefas comum.

Livre

Versão do Pavel Yosifovich que conta com algumas vantagens sobre o Process Explorer, como visualizar informações de processos protegidos (através de um driver), listar todas as threads abertas no Windows, todos os jobs, etc.

Livre

Talvez o melhor da categoria. Mostra os handles, objetos, processos, quem tá usando o que e muita mais.

Sandboxes (Linux)

Existem outros projetos como Limon, Detux, HaboMalHunter, mas na lista abaixo procurei deixar somente os que estão ativos.

NomeLicençaDescrição

Livre

Possui uma API bem simples e suporta binários ELF compilados para x86, x86-64, ARM e MIPS.

Sandboxes (Windows)

Esta lista não inclui serviços de sandbox puramente comerciais.

NomeLicençaDescrição

Livre

Projeto co-financiado pelo CERT da Polônia que usa o engine DRAKVUF para criar uma sandbox de Windows 7 ou Windows 10 sem agente no guest.

Livre

Sandbox específica para extração de configuração de malware.

Livre

Provavelmente a sandbox mais popular e utilizada.

Sandboxes (Online)

NomeLicençaDescrição

Community

Apesar do nome, só suporta artefatos de Windows, mas é muito bom!

Community

Sandbox muito boa. Também é um portal de investigação inclusive com suporte à regras de Yara.

Community

Um dos primeiros serviços. Suporta ELF (x86 e x86-64), PE e documentos.

Visualizadores Hexadecimais

NomeLicençaDescrição

Livre

Clone nosso 💚, multiplataforma (funciona no Windows!) do hexdump que imita a saída do hd.

Livre

Multiplataforma, com saída colorida e recursos interessantes como seek negativo (a partir do fim do arquivo).

Gratuito

Visualizador web que faz análises estatísticas visuais muito úteis.

Livre

Multiplataforma, também com output colorido, exibição de borda, etc.

hexdump/hd

Livre

Padrão no BSD e Linux. Se chamado por "hd" exibe saída em hexa/ASCII.

od

Livre

Padrão no UNIX e Linux. O comando od -tx1 produz uma saída similar à do hd.

xxd

Livre

Vem com o vim. Uma saída similar à do hd é obtida com xdd -g1.

Abaixo um comparativo onde dumpamos os primeiros 32 bytes de um binário /bin/ls utilizando os visualizadores acima:

$ hdump -n 32 /bin/ls
00000000  7f 45 4c 46 01 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
00000010  03 00 28 00 01 00 00 00  21 3e 00 00 34 00 00 00  |..(.....!>..4...|

$ heksa -l 32 /bin/ls
00000┊7f 45 4c 46 01 01 01 00  00 00 00 00 00 00 00 00┊.ELF...Ø ØØØØØØØØ
00010┊03 00 28 00 01 00 00 00  21 3e 00 00 34 00 00 00┊.Ø(Ø.ØØØ !>ØØ4ØØØ

$ hexyl -n32 /bin/ls
┌────────┬─────────────────────────┬─────────────────────────┬────────┬────────┐
│00000000│ 7f 45 4c 46 02 01 01 00 ┊ 00 00 00 00 00 00 00 00 │•ELF•••0┊00000000│
│00000010│ 02 00 3e 00 01 00 00 00 ┊ fc 4a 40 00 00 00 00 00 │•0>0•000┊×J@00000│
└────────┴─────────────────────────┴─────────────────────────┴────────┴────────┘

$ hd -n32 /bin/ls
00000000  7f 45 4c 46 01 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
00000010  03 00 28 00 01 00 00 00  21 3e 00 00 34 00 00 00  |..(.....!>..4...|
00000020

$ od -Ax -tx1 -N32 /bin/ls
0000000    7f  45  4c  46  01  01  01  00  00  00  00  00  00  00  00  00
0000010    03  00  28  00  01  00  00  00  21  3e  00  00  34  00  00  00
0000020

$ xxd -g1 -l32 /bin/ls
00000000: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00  .ELF............
00000010: 03 00 28 00 01 00 00 00 21 3e 00 00 34 00 00 00  ..(.....!>..4...

Outras

NomeLicençaDescrição

Livre

Se você pensa em parsear um formato desconhecido ou tá estudando PE/ELF, vale olhar este gerador de parser livre.

Community

Online. Requer um pequeno cadastro. Tem um recursos de identificar "genes" estaticamente de famílias de binários.

Last updated