반응형
pwndbg 설치 및 기본분석
1. pwndbg 설치
https://github.com/pwndbg/pwndbg
GitHub - pwndbg/pwndbg: Exploit Development and Reverse Engineering with GDB & LLDB Made Easy
Exploit Development and Reverse Engineering with GDB & LLDB Made Easy - pwndbg/pwndbg
github.com
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
간단한 C 프로그램을 만들고, 컴파일한다.
gcc -o sum sum1.c -no-pie
1 #include <stdio.h>
2
3 int main(void){
4
5 int var1 = 1;
6 int var2 = 2;
7
8 int sum = var1 + var2;
9
10 printf("%d + %d = %d", var1, var2, sum);
11
12 return 0;
13
14 }
gdb sum
ELF 프로그램은 크게 헤더와 섹션으로 구분된다. 헤더에 Entry Point 주소가 있고, readelf 명령어로 확인이 가능하다.
readelf -h sum
gdb를 켜고 entry 포인트로 이동해본다. 이중 DISASM이 현재 RIP 위치이다.
gdb sum
entry
b *main은 브레이크 포인트를 거는 것이고, r은 run이다.
b: break
c: continue
r: run
si: step into // 서브루틴 들어감
ni: next instruction // 서브루틴 들어가지 않음
i: info
k: kill
pd: pdisas
finish : si 등으로 함수 들어갔을 때, 끝으로 이동하는 방법
disassemble main
x를 가상 메모리에 특정 주소, 원하는 길이, 특정 인코딩으로 확인 가능하다.
x/10gx $rsp // rsp부터 80바이트를 8바이트씩 hex형식
x/5i $rip // rip부터 5줄
형식: x/[n][f] [address]
n: 출력할 항목의 개수
f: 형식 (옵션)
b: 바이트 (1바이트)
h: 하프워드 (2바이트)
w: 워드 (4바이트)
g: 쿼드워드 (8바이트, 64비트)
i: 명령어 (어셈블리 코드)
x: 16진수출력
d: 8바이트 형식
f: 4바이트 형식
디폴트는 10진수
example
1) x/10gx $rsp //examine으로 분석하는데, rsp현주소에서10개의 쿼드워드(8바이트(64bit))를 16진수로 표현
Telescope - 특정 주소에 메모리 값을 보여주며, 메모리가 참조하는 주소를 재귀적으로 탐색한다.
vmmap - 가상메모리의 레이아웃을 보여준다.
레퍼런스
728x90
'System (Pwnable)' 카테고리의 다른 글
basic_exploitation_001 Writeup (0) | 2025.03.04 |
---|---|
basic_exploitation_000 writeup (0) | 2025.03.02 |
Dreamhack Return Address Overwrite (0) | 2025.03.02 |
cdecl, SYSV 호출 규약 및 버퍼 오버 플로 (0) | 2025.03.02 |
Shell_basic - Pwnable 연습하기 (0) | 2025.03.01 |