profile image

L o a d i n g . . .

GDB

GDB(GNU debugger)는 GNU 소프트웨어 시스템을 위한 표준 debugger이다.

 

실행 방법

gdb [프로그램명]

 

 

종료 방법

q (quit_

Ctrl + d

 

 

소스 보기

( gdb 실행 시 소스 폴더에서 구동해야 가능함. )

l  : main 함수를 기점으로 소스 출력 

l 10 : 10행을 기준으로 출력 

l func : func 함수의 소스를 출력 

 

 

브레이크 포인트

( 프로그램을 브레이크 포인트에 멈춰서 그 때의 상황을 파악하면서 확인할 때 사용 )

b func : func 함수의 시작 부분에 브레이크 포인트 설정 

b 10 : 10행에 브레이크 포인트 설정 

 

 

프로그램 실행, 종료 ( run kill )

r : 프로그램 수행( 재시작 ) 

k : 프로그램 수행 종료

 

 

역추적 하기

bt : 오류가 발생한 함수를 역으로 찾아간다. 

 

 

디버깅 하기

s : 현재 출력된 행을 수행하고 멈추지만, 함수의 경우 함수의 내부로 들어가 수행 

n : 현재 행을 수행하고 멈추지만, 함수의 경우 함수를 수행하고 넘어간다. 

return 123 : 현재 함수를 수행하지 않고 빠져나감, 단, 리턴값은 123 

 

변수 정보 보기

info locals : 현재 상태에서 어떤 지역변수들이 있으며, 값은 어떠한지를 알 수 있다. 

p func : func 함수의 주소값을 확인한다.

 

 

출력 명령

p [변수명] : 변수 값을 출력 

p [변수명]@[배열크기] : 변수의 내용을 변수 배열의 크기 형태로 출력 

 

 

스택 프레임 관련 명령

frame [N] : n번 스택 프레임으로 변경 

info frame : 현재 스택 프레임 정보를 출력 

 

 

메모리 상태 검사

 x/[범위] [출력형식] [볌위의 단위] : 메모리의 특정 값들을 확인 할 수 있다. 

 

 

디스어셈블링

어셈블리 코드를 좀 보편적으로 보기 위한 명령어

disas func : func 함수 어셈블리 코드 보기

 

 

함수 호출

call func(arg1, arg2) :  특정 함수 func를 arg1, arg2 파라미터를 포함하여 호출하고, 반환값을 출력

 

 

점프

jump 10 : 무조건 10행으로 분기하여 수행 

 

 

시그널 전송

signal SIGKILL : 디버깅 대상의 프로세스에게 KILL 시그널을 보낼 수 있다. 

 

 

메모리 특정 영역에 값을 설정

set {타입} [주소] = [값] : p 명령 대신에 set을 통해 메모리의 특정 주소에 저장하는 것이 더 일반적이다. 

set {int}0x8048300 = 100 : 해당 주소에 100의 값을 입력

 

 

 

pwndbg

pwngdbgdb 의 plugin으로, heap 관련 문제를 풀 때 유용하다.

명령어의 실행마다 레지스터, 스택, 실행 중인 코드의 정보 등을 색깔과 함께 보여주며 exploit에 유용한 기능을 많이 포함하고 있다.

 

* hello world를 출력하는 hello를 이용해 pwndbg의 사용법을 익혀보겠다.

 

터미널에 gdb [프로그램명]를 입력한다.

 

disassemble 명령을 사용해 main을 디스어셈블한 모습이다.

 

main 함수의 끝에 break point를 건 모습니다. info 명령을 통해 어디 걸었는지 확인 가능하다.

 

run(r) 명령으로 실행시키니 정말 브레이크를 건 곳까지 실행이 되게 된다.

 

ni 명령어를 통해 한 줄 한 줄 수행하니 마침내 Hello workd!가 출력됨을 알 수 있다.

 

또한 print로 레지스터의 값들을 확인할 수 있다.

 

continue(c) : 프로세스가 멈추어있는 상태에서 프로세스를 이어서 실행시켜준다.

start : 프로그램을 실행시켜준다.

quit(q) : 디버거를 종료할 수 있다.

 

 

pwndbg 장점

실제 레지스터와 메모리 구조를 한 눈에 볼 수 있다.

레지스터를 하나씩 확인하면서 프로그램을 따라갈 수 있다.

프로그램 작동 원리, 오류 및 해결 방안에 대해서 훨씬 쉽게 접근할 수 있음.

 

 

참고

동빈나 - 시스템 해킹 강좌 10강 - 디버깅 시작하기(strace,pwndbg 활용법)
5log.tistory.com/148
jiravvit.tistory.com/entry/pwndbg%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-ELF-%EB%8F%99%EC%A0%81-%EB%B6%84%EC%84%9D-%EB%B0%A9%EB%B2%95

 

복사했습니다!