Folha de dicas para comandos GDB úteis

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
      
      






All Articles