Engenharia reversa/Antes de começar

É importante que este livro seja compreendido, portanto, não pule esta parte. ;-)

Terminologia editar

Utilizo do itálico para neologismos, palavras em Inglês ou em outro idioma, como crypter (encriptador).

Em geral me recuso a utilizar termos "aportuguesados" como baite (para byte) ou linkeditor (para linker). Acho que isso confunde o leitor e por isso mantenho tais termos como seus originais em Inglês, mas destaco-os em itálico.

Já negrito utilizo para dar destaque ou para me referir à um comando.

As palavras software, hardware, malware e quaisquer outros "ware" são consideradas "substantivos incontáveis" no idioma Inglês e, assim como music, love, money, water, etc, não possuem uma grafia específica para plural.

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.

No Brasil, chamamos laptop de notebook e isso pode causar uma grande confusão se você estiver conversando com um gringo. Em Inglês, notebook é, como o nome sugere, caderno de anotações - e nada mais. Utilizo a palavra laptop neste livro.

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. Mais a frente no livro, abandono seus nomes em Português em prol da praticidade e universalidade de seus mnemônicos em Inglês, como AND, OR e XOR.

Arquitetura de software editar

Cada frase deste livro, a não ser que expressado diferente, considera a arquitetura Intel x86 (IA-32).

Exercícios editar

Este livro é recheado de trechos de código. É esperado que o leitor pratique escrevendo os códigos no ambiente específico cada vez que encontrar blocos como os abaixo:

Exemplos de código em Python como a seguir devem ser comandados no ambiente do Python 2.7 da sua máquina virtual (ou real) GNU/Linux:

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

O leitor também encontrará códigos em C como este:

#include <stdio.h>

int main(void) {
    printf("Compilar com o gcc e executar!\n");

    return 0;
}

Neste caso, é preciso salvar o código em C num arquivo de texto e assim compilar e executar no ambiente GNU/Linux, a menos que especificado outro:

$ gcc -o exemplo1.c exemplo1
$ ./exemplo1

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. ;-)