¿Para quién?
1) ingenieros inversos principiantes que conocen las peculiaridades de la ingeniería inversa y quieren aprender un depurador como GDB
2) como una pista para quienes trabajan constantemente con IDA, Ghidra o cualquier otra herramienta poderosa y confiable, pero debido a ciertas circunstancias, es más fácil y rápido resolver el problema usando GDB, y realmente no quiero ir a la documentación oficial y recordar todo nuevamente.
Comandos básicos
Corriendo
Sintaxis general para seleccionar un ejecutable para su análisis
gdb program_name
Iniciar la ejecución del programa
run | r
Únete a gdbserver
target remote host:port
Únase al proceso, desconéctese de él
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
Ver el registro de banderas y cambiarlas
flags flags -Flag_name +Flag_name
Ayuda para encontrar vulnerabilidades de cadenas de formato (establecer puntos de interrupción en ellas, información sobre funciones encontradas)
format-string-helper
Crear un patrón y encontrarlo
pattern create 128 pattern search 0x61616167 pattern search $rbp
Buscar cadenas por patrón
search-pattern pattern
Parcheo
patch byte/word/dword/qword address value
Imprimir una matriz en un formato conveniente para copiar en código Python. El parámetro B debe ser 8/16/32/64, l controla la longitud de la matriz
Ejemplo
print-format -b 64 -l 1 $rsp
Para buscar shellcode por patrón
shellcode search pattern shellcode get shellcode_number
Valores de Xorim en memoria y registros
xor display address/register size xor_key xor patch address/register size xor_key