Post

pwndbg, gef 디버거 동시 설치

GDB 플러그인에는 Peda, Pwndbg, GEF 등이 있다.

분석에 따라 사용하는 플러그인이 달라질 수 있기 때문에, 이번 포스팅에서는 해당 플러그인을 동시에 설치하는 방법에 대해 설명한다. 단, Peda는 사용하지 않을 예정이라서 Pwndbg와 GEF에 대해서만 설명할 것이다.

Install

디버거 플러그인을 설치할 때는 디버거의 버전과 파이썬 버전을 잘 살펴봐야한다.

  • 디버거 버전 확인: gdb --version
  • 파이썬 버전 확인: python3 --version

(Python 2.xx 버전을 사용할 수 있지만, 포스팅 시점에서는 Python 3.xx 버전을 보통 사용하기 때문에 Python 3.xx 버전 기준으로 작성되었다.)

또한, 디버거 플러그인 설치 방법은 개별로 설치할 때를 기준으로 설명한다.

Pwndbg

1
2
3
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh

만약 지원하지 않는 환경이면 여기를 참조하여 해당 소스코드를 받아서 설치하면 된다.

GEF

1
2
3
git clone https://github.com/hugsy/gef.git
cd gef
echo "source 설치경로/gef/gef.py" >> ~/.gdbinit

여기서 설치경로는 gef를 clone한 위치이고, gef.py를 ~/.gdbinit에 꼭 넣어야 한다.

Solution

Pwndbg와 GEF를 각각 설치했다면 ~/.gdbinit에 다음과 같이 나타날 것이다.

1
2
source ~/gdb/pwndbg-2023.07.17/gdbinit.py
source ~/gdb/gef-2024.06/gef.py

나는 $HOME에서 gdb 디렉토리를 만들어서 각 파일들을 저장해놓았다.

이제 가장 간단하게 분석에 따라 디버거 플러그인을 사용할 수 있는 방법은 두 플러그인 사이에 사용하고 싶지 않은 것에 #을 넣어주면 된다.

1
2
source ~/gdb/pwndbg-2023.07.17/gdbinit.py
#source ~/gdb/gef-2024.06/gef.py

이렇게 되면 pwndbg를 사용할 수 있게 된다.

하지만 매번 ~/.gdbinit을 수정하기 귀찮기 때문에 별칭으로 사용하고 싶은 플러그인을 선택할 수 있게 만들어 볼 것이다.

다시 ~/.gdbinit을 열고 저장되어 있는 내용들을 다 삭제한다.

그 다음 아래와 같은 스크립트를 ~/.gdbinit에 작성하면 된다.(pwndbg와 gef의 파일이 있는 경로는 $HOME의 gdb 디렉토리에 pwndbg-2023.07.17와 gef-2024.06라는 디렉토리에 저장되어 있다.)

1
2
3
4
5
6
7
8
9
10
11
12
13
define init-pwndbg
source ~/gdb/pwndbg-2023.07.17/gdbinit.py
end
document init-pwndbg
Initializes Pwndbg
end

define init-gef
source ~/gdb/gef-2024.06/gef.py
end
document init-gef
Initializes GEF
end

해당 작업이 다 끝났다면, /usr/bin에 다음과 같은 스크립트를 생성해야 한다.

/usr/bin/gdb-pwn를 생성하고 다음과 같은 내용을 작성하면 된다.

1
2
#!/bin/sh
exec gdb -q -ex init-pwndbg "$@"

/usr/bin/gdb-gef를 생성하고 다음과 같은 내용을 작성한다.

1
2
#!/bin/sh
exec gdb -q -ex init-gef "$@"

이제 마지막으로 /usr/bin/ 경로에서 다음과 같은 명령어를 작성한다.

1
sudo chmod +x /usr/bin/gdb-*

위 과정을 다 수행했다면 이제 pwndbg는 gdb-pwn으로 사용할 수 있고, gef는 gdb-gef로 사용할 수 있다.

여기서 해당 플러그인 별칭을 바꾸고 싶다면 /usr/bin/에서 생성한 해당 플러그인 파일 이름을 수정하면 된다.

plugin

Ref

[1] Pwndbg + GEF + Peda — One for all, and all for one

[2] Pwndbg

[3] GEF