Für wen ist das?
1) Reverse Engineer für Anfänger, die die Besonderheiten des Reverse Engineering kennen und einen Debugger wie GDB lernen möchten
2) als Hinweis für diejenigen, die ständig mit IDA, Ghidra oder einem anderen leistungsstarken und zuverlässigen Tool arbeiten, aber unter bestimmten Umständen ist es einfacher und schneller, das Problem mit GDB zu lösen, und ich möchte nicht wirklich in die offizielle Dokumentation gehen und mich noch einmal an alles erinnern
Grundlegende Befehle
Laufen
Allgemeine Syntax zur Auswahl einer ausführbaren Datei für die Analyse
gdb program_name
Starten Sie die Programmausführung
run | r
Tritt gdbserver bei
target remote host:port
Schließen Sie sich dem Prozess an und trennen Sie ihn
attach PID / detach
Beenden Sie 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
Zeigen Sie das Flaggenregister an und ändern Sie es
flags flags -Flag_name +Flag_name
Hilfe zum Auffinden von Sicherheitslücken in Formatzeichenfolgen (Festlegen von Haltepunkten, Informationen zu gefundenen Funktionen)
format-string-helper
Ein Muster erstellen und finden
pattern create 128 pattern search 0x61616167 pattern search $rbp
Suchen Sie nach Zeichenfolgen nach Muster
search-pattern pattern
Patchen
patch byte/word/dword/qword address value
Drucken eines Arrays in einem Format, das zum Kopieren in Python-Code geeignet ist. Der Parameter B muss 16.08.32/64 sein, l steuert die Länge des Arrays
Beispiel
print-format -b 64 -l 1 $rsp
Suche nach Shellcode nach Muster
shellcode search pattern shellcode get shellcode_number
Xorim-Werte im Speicher und in den Registern
xor display address/register size xor_key xor patch address/register size xor_key