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.
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.
Nome | Licença | Descrição |
Shareware | Multiplataforma, bastante usado. | |
fhex | Livre | Editor gráfico multiplataforma capaz de exibir o binário graficamente, além de suportar expressões regulares na busca. |
GNU poke | Livre | Editor REPL genérico (não só para executáveis), ainda em beta, mas muito interessante. Escrevemos um artigo sobre. |
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. | |
HexFiend | Livre | Somente para macOS, com recursos legais como diff e data inspector. |
hexxed | Livre | Novo, baseado na ncurses, portanto de linha de comando. Tem potencial e vale o teste. |
Comercial | Editor (e disassembler) muito poderoso, principalmente por conta de seeus 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. Feio, mas cumpre seu trabalho. | |
HxD | Freeware | Bem bom. Possui recursos extras como geração de hashes e suporte a abrir discos. |
ImHex | Livre | Impressionante editor gráfico para Windows 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. | |
Livre | Multiplataforma, recursos interessantes. | |
XVI32 | Freeware | Sem muitos recursos, mas quebra um galho. |
Analisam estaticamente os binários, sem carregá-los. São úteis para uma primeira visão sobre um executável desconhecido.
Nome | Licença | Descrição |
capa | 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. | |
DUMPBIN | Freeware | Analisador de PE de linha de comando disponível no SDK do Visual Studio. |
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 APK's. :) | |
objdump | Livre | Parte do GNU binutils, também analisa PE, além de ELF, a.out, etc. |
PE-Bear | Freeware | Analisador gráfico (Qt) multiplataforma que também detecta packers/protectors. |
PEdump | Livre | Analisador online muito legal! |
pestudio | Freeware | Analisador de PE padrão da indústria, com foco em malware. Tem versão Pro (paga). |
pev | Livre | Nosso 💚 toolkit de ferramentas de linha de comando para análise de PE. Artigo introdutório aqui. |
readelf | Livre | Também parte do binutils, analisador de ELF. |
Stud_PE | Freeware | Analisador e editor com suporte a plugins, assinaturas do antigo PEiD, editor de recursos e mais. |
Nome | Licença | Descrição |
BFD | Livre | Binary File Descriptor é a biblioteca usada por programas como readpe e objdump. Tem suporte a muitos tipos de arquivos, incluindo PE e ELF, claro. |
libpe | Livre | Nossa 💚 biblioteca multiplataforma para parsing de arquivos PE. |
Livre | Biblioteca em C++ para PE usada pelo PE-Bear. | |
pefile | Livre | Famosa biblioteca em Python pra fazer qualquer coisa com arquivos PE. |
PeNet | Livre | Biblioteca em .Net para PE. |
PeParser | Livre | Biblioteca em Java para PE. |
Livre | Biblioteca em Python para parsear binários ELF. |
Nome | Licença | Descriçã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 | Atualmente já vem com o Visual Studio da Microsoft, mesmo na versão Community. Segue um tutorial de como compilar um "Hello, world". | |
Livre | Multiplataforma, suporte à sintaxe Intel e bem popular. Veja um tutorial de como compilar um "Hello, world" no Linux. | |
Livre | Multiplataforma, escrito com base no NASM pra ser um substituto mas acho que não vingou. hehe |
Nome | Licença | Descrição |
Comercial | Novo disassembler que teoricamente compete com o IDA. Possui versão online gratuita mediante registro. | |
Ghidra | Livre | Disassembler livre lançado pela NSA. Temos um treinamento em vídeo sobre ele. |
Hopper | Comercial | Disassembler com foco em binários de Linux e macOS. |
IDA | Comercial | Disassembler interativo padrão de mercado. Possui versão freeware. |
Nome | Licença | Descrição |
dnSpy | Livre | Somente para .NET, descompila, debuga e (dis)assembla. |
Livre | Debugger gráfico (Qt) com foco em binários ELF no Linux. | |
Livre | Super conhecido debugger pra Linux do projeto GNU. Tem uma versão não oficial pra Windows também. É modo texto, mas possui vários front-ends como GDBFrontend, dentre outros. | |
GEF | Livre | O GDB Enhanced Features extende o GDB com recursos para engenharia reversa. |
OllyDbg | Freeware | Poderoso debugger, apesar de não mais mantido. |
PEDA | Livre | O Python Exploit Development Assistance também extende o GDB, assim como o GEF. A interface é um pouco diferente, no entanto. |
WinDbg | Freeware | Debugger ring0/3, parte integrante do SDK do Windows. |
x64dbg | Livre | Debugger user-mode para Windows com suporte a 32 e 64-bits. |
Nome | Licença | Descrição |
de4dot | 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. |
Nome | Licença | Descrição |
ILSpy | Livre | Descompilador multiplataforma para .NET. |
Nome | Licença | Descrição |
Livre | Para binários compilados em Delphi. |
Nome | Licença | Descrição |
Livre | Descompilador para C/C++ feito pelo time do Avast. Inclui detector de compilador e packer, plugins para IDA e radare2. | |
Snowman | Livre | Descompilador livre para C/C++. Pode ser usado como plugin no IDA, x64dbg, etc. |
Nome | Licença | Descrição |
CFR | 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. | |
JD-GUI | Livre | Descompilador para Java com GUI. |
Procyon | Livre | Para Java, com suporte a recursos novos da linguagem. É modo texto mas há GUI's disponíveis documentadas no link. |
Nome | Licença | Descrição |
Comercial | Descompilador para VB5/6 e disassembler para VB .NET. |
Nome | Licença | Descrição |
Qiling | 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. |
Nome | Licença | Descrição |
Livre | Talvez o melhor da categoria. Mostra os handles, objetos, processos, quem tá usando o que e muita mais. | |
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. |
Existem outros projetos como Limon, Detux, HaboMalHunter, mas na lista abaixo procurei deixar somente os que estão ativos.
Nome | Licença | Descrição |
LiSa | Livre | Possui uma API bem simples e suporta binários ELF compilados para x86, x86-64, ARM e MIPS. |
Esta lista não inclui serviços de sandbox puramente comerciais.
Nome | Licença | Descrição |
Any.Run | 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. |
Nome | Licença | Descrição |
hdump | Livre | Clone nosso 💚, multiplataforma (funciona no Windows!) do hexdump que imita a saída do hd. |
heksa | Livre | Multiplataforma, com saída colorida e recursos interessantes como seek negativo (a partir do fim do arquivo). |
HexLasso | Gratuito | Visualizador web que faz análises estatísticas visuais muito úteis. |
hexyl | 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 do binário /bin/ls utilizando os visualizadores acima:
$ hdump -n 32 /bin/ls00000000 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/ls00000┊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┊×[email protected]│└────────┴─────────────────────────┴─────────────────────────┴────────┴────────┘$ hd -n32 /bin/ls00000000 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 -tx1 -N /bin/ls0000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 000000020 03 00 28 00 01 00 00 00 21 3e 00 00 34 00 00 000000040$ xxd -g1 -l32 /bin/ls00000000: 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...
Nome | Licença | Descriçã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. |