Devilzc0de Forum Follow @devilzc0de
  • Home
  • Hacking
  • Networking
  • Programming
  • O.S
  • Server
  • Tweets
  • Search
  • Member List
  • Calendar
Current time: 05-23-2013, 04:03 AM Hello There, Guest! (Login — Register)
Devilzc0de Forum › Information Technology › Programming › Assembly v
« Previous 1 2 3 Next »

Debugging ELF dengan GDB

Home General Computer Multimedia Business Lounge

Post Reply 
Tweet
Threaded Mode | Linear Mode
Debugging ELF dengan GDB
07-18-2010, 04:26 PM
Post: #1
mywisdom Offline
Administrator
*******
Administrators
Posts: 921
Joined: Dec 2009
Reputation: 44
Debugging ELF dengan GDB
Penggunaan GDB di Linux/ Unix

Ok sebelumnya saya pernah membuat artikel tentang debug.exe di ms dos
kali ini kita akan membahas tentang tool sejenis under linux/unix yaitu gdb.
Kenapa belajar gdb? ya untuk bisa daemon fuzzing harus minimal paham cara pakai gdb dulu. (gdb ini sebenernya bisa digunakan untuk remote debugging juga)

Kalau ada diantara Anda yang mencemooh artikel ini atau bilang bahasanya berat anda salah besar karena yang saya berikan selama ini selalu yang gampang dicerna, bagi yg mencemooh silahkan saja yayaya saya tahu memberi bunga pada seekor monyet adalah percuma saja. kidding jangan marah ye :))

Yang diperlukan dalam artikel kali ini:
- Sebungkus rokok marlboro (disarankan marlboro black menthol)
- Kue, camilan, kacang, dll
- Segelas kopi hangat

Ok langsung aja mulai, buka konsole unix /linux lalu ketikkan: gdb

Untuk melihat seluruh perintah yang ada di konsole gdb ketikkan:
Code:
help all


Perintah-Perintah Dasar GDB
- r (run)
digunakan untuk uji coba menjalankan program

Ok untuk praktek pertama kita buat dulu sebuah program dengan bug untuk kita debug, bug yang tersimple yaitu stack based buffer overflow, sebelumnya kita matikan proteksi stack, buat skrip dengan nama misal freestack.sh:

Code:
#!/bin/sh
echo "0" > /proc/sys/kernel/randomize_va_space
echo "0" > /proc/sys/kernel/exec-shield
echo "0" > /proc/sys/kernel/exec-shield-randomize

lalu kita bebaskan stack:
Code:
./freestack.sh

Setelah itu siapkan program degan stack based bof bug:

Code:
//bof.c
#include <string.h>
#include <stdio.h>
fungsi_yang_vulner(char *temp1, char * temp2)
{
char bufer[400];
strcpy(bufer,temp2);
printf("Isian data: %s %s\n",temp1,temp2);
}

int main(int argc, char * argv[])
{
fungsi_yang_vulner(argv[1],argv[2]);
printf("Isian data Anda: %s %s \n",argv[1],argv[2]);
}

Lalu kompile dengan opsi -g untuk menciptakan tabel simbol biar biar enak didebug.

Code:
gcc -o bof bof.c -g


Program di atas akan meminta 2 argumen untuk ditampilkan, di mana argv[2] akan dikopikan ke dalam buffer yang ukuran maksimalnya adalah 400

mari kita uji dengan gdb:
Code:
bt ~ # gdb -q bof
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) run argumen1 `perl -e 'print "A"x400'`
Starting program: /root/bof argumen1 `perl -e 'print "A"x400'`
Isian data: argumen1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA​AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Isian data Anda: argumen1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA​AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Program received signal SIGSEGV, Segmentation fault.
0x000a7325 in ?? ()
(gdb) info reg eip
eip            0xa7325  0xa7325
(gdb) run argumen1 `perl -e 'print "A"x408'`
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /root/bof argumen1 `perl -e 'print "A"x408'`
Isian data:  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA​AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Program received signal SIGSEGV, Segmentation fault.
0x41414141 in ?? ()
(gdb) info reg eip
eip            0x41414141       0x41414141
(gdb)

ok di sini kita lihat register eip teroverwrite total cuy.

<img src="http://koreayokogawa.com/.porn/gdb2.png">

Ok contoh kedua misal kita buat dulu program berikut ini dengan format string bugs:
Code:
//fmb.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
  char  buffer[64];
  strcpy(buffer, argv[1]);
  printf(buffer);
}

kompile dengan simbol:
Code:
gcc -o fmb fmb.c -g

Ok sebenarnya program di atas mengandung bug format string, coba perhatikan line ini:
Code:
printf(buffer);

Seharunya yang benar adalah:
Code:
printf("%s", buffer);

Tapi karena tidak adanya penetuan format data yang akan diprint yaitu langsung saja melakukan printf isi buffer maka kita bisa melihat alamat memori, mari kita tes dengan gdb

pertama kita tes dengan masukan yang benar:
Code:
bt ~ # gdb -q fmb
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) r contoh_argumen
Starting program: /root/fmb contoh_argumen
contoh_argumen
Program exited with code 016.
(gdb)

Bagaimana jika kita sisipkan format string hex???
Code:
(gdb) r %x%x%x
Starting program: /root/fmb %x%x%x
bffff50800
Program exited with code 012.
(gdb)

oopss keliatan alamat memori 0xbffff50800
See???

Perintah list (l)

Digunakan untuk melihat source code program yang dikompile dengan simbol, misal dari contoh elf binary fmb di atas kita bisa melihat sourcenya jika dikompile dengan gcc opsi -g:
Code:
gdb -q fmb
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) l
1       //fmb.c
2       #include <stdlib.h>
3       #include <stdio.h>
4       #include <string.h>
5
6       int main(int argc, char *argv[])
7       {
8         char  buffer[64];
9         strcpy(buffer, argv[1]);
10        printf(buffer);
(gdb) l
11      }(gdb) l
Line number 12 out of range; fmb.c has 11 lines.
(gdb)

<img src="http://koreayokogawa.com/.porn/gdb3.png">

kill
Perintah untuk stopping program yang sedang didebug.
misal:

Code:
bt ~ # gdb -q fmb
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) run
Starting program: /root/fmb

Program received signal SIGSEGV, Segmentation fault.
0xb7ef9d50 in strcpy () from /lib/libc.so.6
(gdb) kill
Kill the program being debugged? (y or n) y
(gdb)

Shell
Di tengah 2 melakukan debug program kita bisa menjalankan shell dari konsole debug, misal:
Code:
bt ~ # gdb -q fmb
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) shell pwd
/root
(gdb) shell ls
23.pdf   bof.c  fmt           gdb               gdb2.png  shellcode  tes
Desktop  fmb    fmt.c         gdb3.png          sp         tes.c
bof      fmb.c  freestack.sh  gdb1.png          gdb~      sp.c       tes.c~
(gdb)

Breakpoint, print, display,frame, register, info argumen
breakpoint artinya line dalam kode saat eksekusi program yang akan didebug berhenti, untuk menggunakan gdb ini merupakan teknik dasar, di mana biasanya dilanjutkan dengan examine variable (bisa dengan perintah p(print) atau d(display))

Ok misal kita buat dulu 1 lagi program utk didebug

Code:
//mywisdom.c
#include <stdio.h>
int main()
{
int mywisdom=123;
printf ("%d",mywisdom);
}

kompile dangan simbol: gcc -o mywisdom mywisdom.c -g

ok mari kita lihat line 2 berapa kira 2 yang mau di break point:
Code:
bt ~ # gdb -q mywisdom
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) l
1       //mywisdom.c
2       #include <stdio.h>
3       int main()
4       {
5       int mywisdom=123;
6       printf ("%d",mywisdom);
7       }
(gdb) l
Line number 8 out of range; mywisdom.c has 7 lines.

Ok kita akan pakai break point di line 5 dan display alamat memori dari variabel mywisdom:
Code:
(gdb) b 5
Breakpoint 1 at 0x8048365: file mywisdom.c, line 5.
(gdb) r
Starting program: /root/mywisdom

Breakpoint 1, main () at mywisdom.c:5
5       int mywisdom=123;
(gdb) disp mywisdom
1: mywisdom = -1208009840
(gdb)

yup atau bisa juga dengan perintah p:
Code:
(gdb) p mywisdom
$1 = -1208009840

untuk menampilkan dalam mode hex kita menggunakan opsi /x seperti ini:
Code:
(gdb) p /x mywisdom
$2 = 0xb7ff3b90
(gdb)

Examine stack??
Code:
(gdb) s
6       printf ("%d",mywisdom);
(gdb)

so mywisdomen what???

catatan:
break bisa juga dilakukan di nama fungsi

Sementara sekian dulu untuk gdb karena penulisnya mao kerja dulu. see u muacch :-*
Find all posts by this user
Quote this message in a reply
07-18-2010, 10:23 PM
Post: #2
Sudden_death Away
0r4ng 94nt3ng
Posts: 412
Joined: Feb 2010
Reputation: 7
RE: Debugging ELF dengan GDB
mantap kk dom2,, ajrin ane donk
Visit this user's website Find all posts by this user
Quote this message in a reply
07-18-2010, 10:38 PM
Post: #3
ian182 Offline
DC Senior
***
Posts: 425
Joined: Dec 2009
Reputation: 14
RE: Debugging ELF dengan GDB
sip bro.keren nih ketawa
Visit this user's website Find all posts by this user
Quote this message in a reply
08-22-2011, 12:47 AM
Post: #4
kebijaksanaanku Offline
./Devilz Officer
Posts: 57
Joined: Jan 2011
Reputation: 2
RE: Debugging ELF dengan GDB
cadas nih kembarang ane wawa komplit banget tutorialnya hore
Find all posts by this user
Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Topic Tools
Topic Link :
BBCode :
HTML Code :
View a Printable Version Send Thread to a Friend Subscribe to this thread
Submit Google Submit Face book Submit to Digg Submit to Reddit Submit to Furl Submit to Del.icio.us Submit to Jeqq

Possibly Related Threads...
Thread: Author Replies: Views: Last Post
  Pemrograman Assembly di Windows dengan masm32+ debugging dg ollydbg mywisdom 6 1,436 01-24-2013 08:21 PM
Last Post: Jehuda
  pemrograman di ms dos dengan assembly 16 bit+ analisa beberapa virus asm mywisdom 8 1,768 01-21-2012 04:04 AM
Last Post: oootrxooo
  [ASK] beda register ah dengan al (register 8-bit) syn_attack 4 950 10-19-2011 07:58 AM
Last Post: syn_attack

Users Browsing
1 Guest(s)

  • Contact Us
  • devilzc0de
  • Return to Top
  • Mobile Version
  • RSS Syndication
  • Help
Current time: 05-23-2013, 04:03 AM Powered By MyBB, © 2002-2013 MyBB Group. Theme created by Justin S. | Mixed By Chaer.Newbie | Fixed By Aditya

USING THIS SITE INDICATES THAT YOU HAVE READ AND ACCEPT OUR TERMS. IF YOU DO NOT ACCEPT THESE TERMS, YOU ARE NOT AUTHORIZED TO USE THIS SITE