👀
Antes de Começar
Todo escritor quer que sua mensagem seja lida e compreendida, isso não é diferente no meu caso. Então, estabeleci umas regras em meu processo de escrita para facilitar o seu processo de compreensão da disciplina de Engenharia Reversa.
Utilizo do itálico para neologismos, palavras em Inglês ou em outro idioma, como crypter (encriptador). Em geral, prefiro não utilizar termos "aportuguesados" como baite (para byte) ou linkeditor (para linker). Acho que isso confunde o leitor e por isso mantenho-os em seus originais em Inglês, mas em itálico.
Já o negrito, utilizo para dar destaque ou para me referir à um comando.
Algumas vezes utilizo o termo GNU/Linux ao invés de somente Linux. O projeto GNU é o principal projeto da FSF (Free Software Foundation), que criou o conceito de software livre. Suas ferramentas são parte essencial de qualquer sistema operacional baseado no kernel Linux e por isso faz bem lembrá-la de vez em quando.
Após a introdução, engenharia reversa (ou simplesmente ER) passa a ser utilizado como forma curta de engenharia reversa de software.
Nas operações bit-a-bit (bitwise), utilizo os símbolos da programação para representar as operações E, OU, OU EXCLUSIVO, etc. No texto, adoto seus mnemônicos em Inglês: AND, OR e XOR.
Cada frase deste livro, a não ser que expressado diferente, considera a arquitetura Intel x86 (IA-32), visto que esta é documentada o suficiente para começar o estudo de engenharia reversa e moderna o suficiente para criar exemplos funcionais de código e analisar programas atuais.
Este é um guia prático. Sendo assim, é recomendável que você seja capaz de reproduzir o que é sugerido neste livro em seu próprio ambiente. Você vai precisar do seguinte:
- Uma máquina (virtual ou real) com Windows 7, 10 ou 11.
- Uma máquina virtual, física ou remota com uma distribuição Linux. Usei o Ubuntu, mas qualquer outra serve desde que você saiba instalar pacotes nela. Alternativamente, você pode instalar uma distribuição Linux via Windows Subsystem for Linux (WSL), se sua máquina com Windows for física.
Na máquina Windows, os programas necessários são:
- Detect It Easy (DIE) - https://horsicq.github.io
- HxD - https://mh-nexus.de
- Python 3 - https://www.python.org
- Visual Studio Community - https://aka.ms/vs
- x64dbg - https://x64dbg.com
Já na máquina Linux, é preciso instalar os seguintes programas:
- bc
- hexdump
- nasm
Este livro é recheado de trechos de código. É recomendável que você pratique escrevendo-os no ambiente específico cada vez que encontrar blocos como os mostrados abaixo.
Exemplos de código em Python como a seguir devem ser digitados no ambiente do Python.
>>> print 'Execute isto no console do Python!'
Vários exemplos são no shell do Linux, que é o Bash por padrão:
$ echo 'Este vai no Bash'
Você também encontrará códigos em linguagem C como este:
#include <stdio.h>
int main(void) {
printf("Compilar com o gcc e executar!\n");
}
No caso do código anterior, exceto quando especificado diferente, é preciso salvá-lo num arquivo de texto para depois compilar e executar no ambiente GNU/Linux, assim:
$ gcc -o exemplo exemplo.c
$ ./exemplo
Caso o código em C inclua a windows.h, este deve ser compilado em ambiente Windows utilizando de preferência o Visual Studio Community.
Há ainda outros tipos de blocos, mas tenha em mente que é necessário para o aprendizado que você os escreva, execute e analise seus resultados.
Se já estiver tudo pronto, vamos seguir para a introdução ao assunto!
Last modified 7mo ago