O GDB (The GNU Project Debugger) é hoje sem dúvida o melhor debugger para ambientes Linux e Unix. Porém sua interface padrão causa um pouco de rejeição para quem está começando a se aventurar no processo de criação de exploits ou engenharia reversa.
Por este motivo trago para vocês algumas dicas que vão lhe ajudar bastante neste processo.
Parte 1: Configurando o locale
Se certifique que o locale da máquina está configurado como UTF-8
[sourcecode language="shell"]root@M4v3r1ck:~# sudo locale-gen "en_US.UTF-8"
root@M4v3r1ck:~# echo 'LANG="en_US.UTF-8"' > /etc/default/locale
root@M4v3r1ck:~# echo 'LANGUAGE="en_US:en"' >> /etc/default/locale
root@M4v3r1ck:~# echo 'LC_ALL="en_US.UTF-8"' >> /etc/default/locale
[/sourcecode]
Parte 2: Instalando o GDB + Python3
[sourcecode language="shell"]root@M4v3r1ck:~# sudo apt-get install python python3 python-dev gdb python3-gdbm python3-gdbm-dbg
[/sourcecode]
Parte 3: Instalando GEF
O GEF (acrônimo para GDB Enhanced Features) é um plugin que deixa o visual do GDB bem mais amigável, bem como implementa novos comandos que auxiliam bastante no processo de criação de exploits e engenharia reversa. O seu manual está disponível em https://gef.readthedocs.io/en/master/
[sourcecode language="shell"]root@M4v3r1ck:~# wget -O ~/.gdbinit-gef.py -q https://raw.githubusercontent.com/hugsy/gef/dev/gef.py
root@M4v3r1ck:~# echo source ~/.gdbinit-gef.py >> ~/.gdbinit
root@M4v3r1ck:~# echo "set follow-fork-mode parent" >> ~/.gdbinit
[/sourcecode]
Parte 4: Instalando scripts adicionais do GEF
Dentro destes scripts adicionais há 2 comandos que implementei que é muito útil no processo de criação de exploits, mais especificamente no momento da checagem de Badchars.
- bytearray: gera o bytearray para copiar e colocar dentro do script python de exploit, bem como o arquivo binário para comparação
- bincompare: compara o arquivo binário com os dados em memória objetivando encontrar por badchars.
[sourcecode language="shell"]root@M4v3r1ck:~# wget -q -O- https://github.com/hugsy/gef/raw/master/scripts/gef-extras.sh | sh
[/sourcecode]