Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Esses apêndices servem tanto de referência como de material de apoio para estudar assuntos que não foram abordados com profundeza neste livro.
E possível encontrar versões anteriores desta tabela, mas a mais usada é a seguinte:
Reuni aqui alguns exemplos de códigos em Assembly, úteis para a compreensão de trechos de binários quando fazemos engenharia reversa.
Outra versão:
Outra versão:
Parece bobo, mas "fazer nada" corretamente significa não alterar nenhuma flag, nem nenhum registrador. A instrução em Assembly Intel mais famosa para tal é a NOP (NO Operation):
Mas também é possível atingir o mesmo resultado com instruções como a XCHG (eXCHanGe). Por exemplo, se você trocar o valor do registrador EAX com ele mesmo, acaba por não fazer "nada":
Instruções que não fazem nada também podem ser utilizadas como padding necessário para o correto alinhamento das seções do binário em memória. Já vi o GCC utilizar XCHG AX, AX neste caso.
Através de várias bibliotecas como kernel32.dll, user32.dll, advapi32.dll e ntdll.dll, só para citar algumas, a Windows API provê inúmeras funções para os programas em usermode chamarem. Criar uma lista com todas essas funções seria insano, mas destaco aqui algumas comumente encontradas em programas para Windows. Optei também por colocar o protótipo de algumas delas, para rápida referência, mas todas as informações sobre estas funções podem ser encontradas na documentação oficial. Basta buscar por um nome de função em seu buscador preferido que certamente o site da Microsoft com a documentação da função estará entre os primeiros.
Mesmo que você não sabia tudo sobre a função funciona, essa lista te ajudará a saber onde colocar breakpoints, de acordo com o seu caso. Por exemplo, caso suspeite que um programa está abrindo um arquivo, pode colocar um breakpoint nas funções CreateFileA
e CreateFileW
.
Vamos agora à lista de funções, separadas por categoria.
Utilizadas em técnicas básicas para evitar a depuração de aplicações.
Utilizadas para exibir janelas com mensagens.
Ver também: MessageBoxEx
.
Usadas para ler textos de caixas de texto.
Implementam algoritmos de criptografia como algoritmos de hash e criptografia simétrica e assimétrica.
Ver também: CryptDecrypt
, CryptGenKey
, e CryptImportKey
.
Configuram e consultam data e hora do sistema.
Ver também: SetSystemTime
e SetLocalTime
.
Pegam informações sobre num disco, pen drive, drives de rede mapeados, etc e também sobre seus volumes (partições).
Ver também: GetDiskFreeSpace
, GetDriveType
e GetVolumeInformationA
.
Manipulam arquivos e outros objetos.
CreateFileA
e CreateFileW
abrem para ler e/ou para escrever e também criam e até truncam (zeram) arquivos no disco. Também trabalham com outros objetos como pipes, diretórios e consoles.
Ver também: CopyFile
, CreateFileMapping
, DeleteFile
, GetFullPathName
, GetTempPath
, LoadLibrary
, MoveFile
, OpenFile
, OpenFileMapping
e OpenMutex
.
Funções que falam com a internet, normalmente via HTTP.
Ver também: HttpSendRequestA
, InternetOpenA
, InternetOpenW
, InternetOpenUrlW
e InternetReadFile
.
Habilitam ou desabilitam janelas ou itens dentro dela.
Gerenciam memória, alocando ou deselocando, configurando permissões, dentre outras operações.
Ver também: VirtualAllocEx
, VirtualFree
, VirtualLock
, VirtualProtect
e VirtualQuery
.
Manipulam processos e threads. Podem enumerar, alterar o estado, executar e mais.
Ver também: CreateRemoteThread
, CreateThread
, CreateToolhelp32Snapshot
, ExitProcess
, ExitThread
, Heap32First
, Heap32ListFirst
, Heap32ListNext
, Heap32Next
, Module32First
, Module32Next
, OpenProcess
, OpenProcessToken
, OpenThreadToken
, Process32First
, Process32Next
, ShellExecute
, TerminateProcess
, Toolhelp32ReadProcessMemory
, WriteProcessMemory
, ZwQueryInformationProcess
e ZwSetInformationThread
.
Criam e alteram chaves e valores no registro.
Ver também: RegCloseKey
, RegEnumKeyExA
, RegOpenKey
, RegOpenKeyEx
, RegQueryValueA
, RegSetValueW
, RegSetValueExA
e RegSetValueExW
.
Manipulam cadeias de texto.
Ver também: lstrcat
, lstrcpy
e lstrlen
.
A Crash Course in Everything Cryptographic - https://medium.com/dataseries/a-crash-course-in-everything-cryptographic-50daa0fda482 - Leo Whitehead, 2019.
Linguagem compilada - https://pt.wikipedia.org/wiki/Linguagem_compilada - Wikipedia.
Linguagem interpretada - https://pt.wikipedia.org/wiki/Linguagem_interpretada - Wikipedia.
Microprocessador - https://pt.wikipedia.org/wiki/Microprocessador - Wikipedia.
Qual a diferença entre linguagem compilada para linguagem interpretada? - https://pt.stackoverflow.com/questions/77070/qual-a-diferen%C3%A7a-entre-linguagem-compilada-para-linguagem-interpretada - StackOverflow.
Transístor - https://pt.wikipedia.org/wiki/Transístor - Wikipedia.
Understand flags and conditional jumps - http://www.godevtool.com/GoasmHelp/usflags.htm - Jeremy Gordon, 2002-2003.
Pluralsight's Windows Internals - https://app.pluralsight.com/library/courses/windows-internals - Pavel Yosifovich, 2013.
Intel® 64 and IA-32 Architectures Software Developer's Manual.
Microsoft Portable Executable and Common Object File Format Specification.
Crackproof Your Software: Protect Your Software Against Crackers - Pavol Cerven, 2002.
Fundamentos em programação Assembly - José Augusto N. G. Manzano, 2006.
História da Matemática - Carl B. Boyer, 1974.
Reversing: Secrets of Reverse Engineering - Eldad Eilam, 2005.
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.
Analisam estaticamente os binários, sem carregá-los. São úteis para uma primeira visão sobre um executável desconhecido.
Existem outros projetos como Limon, Detux, HaboMalHunter, mas na lista abaixo procurei deixar somente os que estão ativos.
Esta lista não inclui serviços de sandbox puramente comerciais.
Abaixo um comparativo onde dumpamos os primeiros 32 bytes do binário /bin/ls utilizando os visualizadores acima:
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descrição |
---|
Nome | Licença | Descriçã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. |
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. |
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. |
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. |
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. |
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 |
Comercial |
Livre |
Comercial | Disassembler com foco em binários de Linux e macOS. |
Comercial | Disassembler interativo padrão de mercado. Possui versão freeware. |
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. |
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. |
Livre | Descompilador multiplataforma para .NET. |
Livre | Para binários compilados em Delphi. |
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. |
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. |
Comercial | Descompilador para VB5/6 e disassembler para VB .NET. |
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. |
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! |
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. |
Livre | Possui uma API bem simples e suporta binários ELF compilados para x86, x86-64, ARM e MIPS. |
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. |
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. |
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. |
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. |
Editor REPL genérico (não só para executáveis) com uma abordagem muito interessante. Escrevemos um sobre.
Anteriormente chamado de pev, este é o nosso 💚 toolkit de ferramentas de linha de comando para análise de PE. Artigo introdutório .
Atualmente já vem com o Visual Studio da Microsoft, mesmo na versão Community. Segue um .
Multiplataforma, suporte à sintaxe Intel e bem popular. Veja um .
Novo disassembler que teoricamente compete com o IDA. Possui versão mediante registro.
Disassembler livre lançado pela NSA. Temos um em vídeo sobre ele.
Super conhecido debugger pra Linux do projeto GNU. Tem uma também. É modo texto, mas possui vários front-ends como , dentre .
(antigo Process Hacker)