GDB (GNU Debugger)
Sabtu, 27 Juli 2019
Tambah Komentar
GDB (GNU Debugger) adalah tool yang di gunakan untuk mendebug sebuah program dengan debugging information dan source, atau binary saja. GDB biasanya di jalankan dengan tampilan command line tentu mode command line ini sulit dan kurang nyaman untuk pemula. GDB ini biasanya sudah tersedia di linux tetapi ada juga di windows. Di windows bisa memakai software ollydbg atau windbg.
GDB-Peda adalah pelengkap atau bisa di bilang perangkat pendukung gdb yang dimana terdapat tambahan fitur :
- Meningkatkan tampilan gdb : memberi warna pada kode pembongkaran, register, informasi memori selama debugging
- Tambahan perintah untuk mendukung debugging dan mengeksploitasi development (untuk perintah lengkap bisa gunakan peda help)
aslr
-- Show/set ASLR setting of GDBchecksec
-- Check for various security options of binarydumpargs
-- Display arguments passed to a function when stopped at a call instructiondumprop
-- Dump all ROP gadgets in specific memory rangeelfheader
-- Get headers information from debugged ELF fileelfsymbol
-- Get non-debugging symbol information from an ELF filelookup
-- Search for all addresses/references to addresses which belong to a memory rangepatch
-- Patch memory start at an address with string/hexstring/intpattern
-- Generate, search, or write a cyclic pattern to memoryprocinfo
-- Display various info from /proc/pid/pshow
-- Show various PEDA options and other settingspset
-- Set various PEDA options and other settingsreadelf
-- Get headers information from an ELF fileropgadget
-- Get common ROP gadgets of binary or libraryropsearch
-- Search for ROP gadgets in memorysearchmem|find
-- Search for a pattern in memory; support regex searchshellcode
-- Generate or download common shellcodes.skeleton
-- Generate python exploit code templatevmmap
-- Get virtual mapping address ranges of section(s) in debugged processxormem
-- XOR a memory region with a key
Untuk cara installnya tinggal copy dan paste lalu jalankan perintah di bawah :
git clone https://github.com/longld/peda.git ~/peda echo "source ~/peda/peda.py" >> ~/.gdbinit echo "DONE! debug your program with gdb and enjoy"
Berikut adalah Tampilan GDB-Peda :
Perintah Perintah di GDB / GDB-Peda
Memulai dan keluar dari GDB
Cara termudah adalah memulai dengan executable
gdb <executable>
Jika programnya memiliki parameter:
gdb --args <executable> <param1> <param2> ...
Jika program crash dan Anda mengeset environment sehingga menghasilkan file core (biasanya crash dengan pesan core dumped), maka kita bisa mendebug memori ketika crash terjadi
gdb <executable> <filecore>
Jika program sudah berjalan, kita bisa mendebug process id yang sudah berjalan:
gdb <executable> <pid>
Kita juga bisa langsung memulai gdb dan meload filenya belakangan
(gdb) file <namaexecutable>
Atau kita bisa attach ke pid tertentu
(gdb) attach <pid>
Setelah itu kita bisa mulai menjalankan program dengan
run
: (gdb) run
Tapi biasanya kita akan mengeset dulu breakpoint sebelum menjalankan program dengan
run
.
Sebelum ke perintah lain, untuk keluar dari gdb, gunakan perintah
quit
lalu enter.
Melihat source
Jika program dicompile dengan informasi debuga (misalnya
gcc -g main.c
), kita bisa melihat source code dengan:(gdb) list
Mengeset breakpoint
Untuk mengeset breakpoint, gunakan
break
atau cuku b
saja. Ini bisa diikuti nama fungsi atau alamat. Contoh(gdb) break main
(gdb) break *0x0000000000400c1e
Kita bisa melihat daftar breakpoint yang ada dengan
info breakpoints
. Secara umum perintah gdb bisa dipersingkat asalkan tidak ambigu. Misalnya info breakpoints
bisa disingkat jadi info brea
atau bahkan i b
. (gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000000000400c22 <main+4>
Melihat disassembly
Untuk melihat diassembly fungsi yang namanya diketahui, gunakan
disas
diikuti nama fungsi: (gdb) disas main
Atau menggunakan perintah pdisas untuk tampilan lebih menarik:
(gdb) pdisas main
Jika nama tidak diketahui, kita bisa mengunaan
x
(singkatan dari examine
): (gdb) x/10i 0x0000000000400d5b
Perhatikan bahwa defaultnya disassembly menggunakan syntax att, jika Anda lebih suka sintaks intel
(gdb) set disassembly-flavor intel
Melihat status register
Untuk melihat register saat ini, gunakan
info registers
atau cukup i r
.
Melihat isi memori
Perintah
x
bisa digunakan untuk banyak hal, contohnya:
Tampilkan
5
byte (b
) sebagai hexa (x
), byte tersebut ada di alamat memori yang ditunjuk oleh register $edx
(gdb) x/5bx $edx
Atau untuk alamat memori absolut:
(gdb) x/5bx 0x10000
Di sini
b
bisa diganti dengan h
(short/2 byte), w
(word/4 byte) atau g
(giant/8 byte). Secara default displaynya memakai signed decimal, tapi kita bisa memakai x
untuk heksadesimal dan u
untuk unsigned.
Anda bisa melihat lebih lengkap di sini
Melihat kondisi stack
Perintah
bt
atau backtrace
akan mencetak stack backtrace. Perintah info frame
(atau i f
) akan mencetak frame saat ini.
Stepping
Jika source code tersedia, kita bisa menggunakan
step
untuk ke baris berikutnya atau step in ke dalam fungsi, jika perintah berikut adalah function call. Jika kita ingin ke baris berikutnya tapi tidak ingin masuk ke dalam fungsi, gunakan next
.
Perintah tersebut juga bisa diikuti dengan angka, jika kita ingin mengulangi
n
kali. Jadi:next 10
Akan mengeksekusi
next
sepuluh kali.
Jika kita ingin berhenti sampai
Mengikuti child ketika ada fork
Secara default gdb akan mengikuti parent ketika ada
fork()
, supaya kita mengikuti child process(gdb) set follow-fork-mode child
File .gdbinit
Setting-setting yang sering digunakan bisa disimpan di
~/.gdbinit
, misalnya Anda suka disassembly format intel dan kita sering mendebug child process, kita bisa memasukkan baris:set disassembly-flavor intel
set follow-fork-mode child
Saya sering mengulangi perintah yang sama, jadi saya suka menyimpan history perintah di file:
set history filename ~/.gdb_history
set history save
Ketika mendebug assembly, perintah ini berguna, supaya otomatis menampilkan instruksi assembly berikut
set disassemble-next-line on
sumber : https://yohan.es/security/gdb/
https://github.com/longld/peda
Belum ada Komentar untuk "GDB (GNU Debugger)"
Posting Komentar