[Tool] pwndbg 설치 & 사용법
지난시간에는 디버그가 무엇인지, 그리고 gdb 사용법을 알아보았다.
이번시간에는 지난시간 내용에 이어서 gdb를 조금 더 편리하게 사용할 수 있도록 도와주는 gdb 플러그인인 pwndbg에 대해 알아보겠다.
설치 방법
https://github.com/pwndbg/pwndbg
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
코드를 차례대로 입력해주면 설치가 완료된다. 최근 pip 오류로 ./setup.sh에서 오류가 나는 사람들이 많다고 들었다. 그럼 pip 버전을 낮추는 등의 방법을 사용해서 설치하면 된다. 인터넷에 검색하면 친절하게 나오니 그 글들을 참고하자.
사용법
설치가 성공적으로 완료가 되었다면 아래 사진처럼 gdb라고 입력했을 때 예전과는 다르게 pwndbg라고 빨간색으로 뜨는 모습을 볼 수 있다.
그럼 지난번에 만들었던 debugger 프로그램을 다시 실행해보겠다.
//debugger.c
#include<stdio.h>
int main(void){
int val1 = 1;
int val2 = 2;
int val3;
val3 = val1 + val2;
printf("1+2=%d\n", val3);
return 0;
}
기본적인 사용 명령어는 gdb랑 똑같았다. 하지만, interface가 정말 사용자 친화적이라는 것을 실행하자마자 느낄 수 있었다.
pwndbg-> b * main
pwndbg-> start
실행했을 때의 모습이다. Register, disasm, stack, backtrace 총 4부분으로 나누어져 있었다. 이 네가지를 프로그램이 실행될 때의 문맥 즉, Context라고 부른다. context는 어셈블리를 실행할 때마다 갱신이 된다. 그래서 변화를 한 눈에 살펴볼 수 있다.
기본적인 명령어
기본적인 명령어는 gdb랑 똑같다.
1. break & continue (b & c)
break는 종단점을 설정하고 continue는 이어서 실행할 수 있도록 해준다.
우리는 사실 프로그램의 처음부터 끝까지 디버깅하는 일은 그리 많지 않다. 특정 함수가 잘 실행되는지, 코드의 일부분만 디버깅을 하기 때문에 종단점의 설정은 매우 중요하다. 물론 이번 프로그램은 짧아서 main함수 전체를 살펴보고 있는 중이다.
2. next instruction(ni)
명령을 한 줄 실행시켜준다.
3. step into(si)
명령을 한 줄 실행시켜준다. 이 때, ni와는 다르게 서브루틴의 내부로 들어간다.
예를 들어 printf함수를 불렀을 때에는 printf함수의 내부도 분석을 할 수 있다.
만약, 서브루틴을 벗어나고 싶으면 finish를 입력하면 된다.
4. run(r)
프로그램을 실행시켜준다. 단, 종단점이 설정되어 있으면 종단점까지 실행을 시켜준다.
5. disassemble(disass)
디스어셈블리 한 결과를 알려준다.
gdb랑 비교하면 pwndbg가 훨씬 가독성이 높은 것을 알 수 있다.
6. x
프로그램을 사용하다보면 가상 메모리의 값에 접근을 해야하는 상황이 올 수 있다. 이때 사용할 수 있는 명령어이다.
Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal), t(binary), f(float), a(address), i(instruction), c(char), s(string) and z(hex, zero padded on the left). Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).
ex1) x/10gx &rsp
rsp부터 80바이트를 8바이트씩 hex로 출력
ex2) x/s 0x400000
0x400000번지가 가리키는 문자열 출력
이 외에도 다양하게 사용 할 수 있고, 용도에 따라 검색해서 사용하면 될 것이다.
7. telescope (tele)
메모리 덤프 기능이다. 메모리의 값을 재귀적으로 보여준다.
8. vmmap
가상 메모리의 레이아웃을 보여준다.
pwndbg를 사용하면서 더 중요한 기능이 발견되면 계속 포스팅을 수정하여 내용을 추가하겠다.
[소감]
아직, vmmap이나 tele의 기능을 정확하게는 모르겠지만, 기본적인 사용방법을 학습할 수 있어서 좋았다. 처음에 pwndbg 설치 오류때문에 힘들었지만 한 걸음 드디어 나아간 것 같아서 좋다.
'Linux' 카테고리의 다른 글
[Linux] 3. 셸을 능숙하게 다루는 방법 (0) | 2022.08.10 |
---|---|
[Linux] 2. 셸이란 무엇인가? (0) | 2022.08.10 |
[Linux] 1장. 리눅스 설치하기 (0) | 2022.08.09 |
[Tool] Pwntool 설치 및 사용법 (0) | 2022.02.07 |
[Tool] DBG(디버거) 사용법 (0) | 2022.02.07 |