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
gef
에서 heap 관련 플러그인: gef-plugin
Ref
[1] Pwndbg + GEF + Peda — One for all, and all for one
[2] Pwndbg
[3] GEF