para quem é isso?
1) engenheiros reversos iniciantes que conhecem as peculiaridades da engenharia reversa e desejam aprender um depurador como o GDB
2) como uma dica para aqueles que trabalham constantemente com IDA, Ghidra ou qualquer outra ferramenta poderosa e confiável, mas devido a certas circunstâncias, é mais fácil e rápido resolver o problema usando GDB, e eu realmente não quero ir para a documentação oficial e lembrar de tudo novamente
Comandos básicos
Corrida
Sintaxe geral para selecionar um arquivo executável para análise
gdb program_name
Iniciar a execução do programa
run | r
Junte-se ao gdbserver
target remote host:port
Junte-se ao processo, desconecte-se dele
attach PID / detach
gdb
quit | q CTRL + D
set disassembly-flavor intel/att
,
info file
info functions | i func
asm-
disas func_name disas address
( -g3 gcc) ,
list func_name
set args show args
info proc mappings
registers
step | s
next | n
,
until | u number_of_list_string until | u *func_name+offset until | u *address
, ( , )
info args info locals info frame
info threads thread number
breakpoints
b func_name b *func_name+offset b *address
, , breakpoint
info break disable/enable breakpoint_number delete breakpoint_number ignore breakpoint_number n // n
breakpoint-
continue | c
telescope telescope $rsp+64
x, "/"
x/i - x/x - hex x/s - x/a -
x/b - 8-bit x/h - 16-bit x/w - 32-bit x/g - 64-bit
x/64bx x/i $pc
run $(python -c "print('A'*32 + '\xde\xad')") run $(echo "asdf\\xde\xad")
run <<< $(python -c "print('A1'*3)") run <<< $(echo "asdf\xde\xad")
Gdb
gdb
gdbserver host:port program
Reverse Debug
, , CFG .. , gdb Reverse Debug, .
, gdb, reverse debug
record
reverse-step reverse-next
( )
dump memory output_file start_addr end_addr
, display
display/5i $pc display/g $rax display/g $rbx display/g $rcx
GEF
gdb gef, , , . .
aslr, /
aslr aslr on/off
ASLR, Canary, PIE ..
checksec
heap chunks
,
canary
, info proc mappings
vmmap
Veja o cadastro de bandeiras e altere-as
flags flags -Flag_name +Flag_name
Ajuda para encontrar vulnerabilidades de formato de string (definição de pontos de interrupção neles, informações sobre funções encontradas)
format-string-helper
Criando um padrão e encontrando-o
pattern create 128 pattern search 0x61616167 pattern search $rbp
Pesquise strings por padrão
search-pattern pattern
Patching
patch byte/word/dword/qword address value
Imprimir uma matriz em um formato conveniente para cópia em código Python. O parâmetro B deve ser 8/16/32/64, l controla o comprimento da matriz
Exemplo
print-format -b 64 -l 1 $rsp
Para pesquisar o código de shell por padrão
shellcode search pattern shellcode get shellcode_number
Valores Xorim na memória e registros
xor display address/register size xor_key xor patch address/register size xor_key