본문 바로가기

System (Pwnable)

pwndbg 설치 및 기본분석

반응형

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 - 가상메모리의 레이아웃을 보여준다.


레퍼런스

https://learn.dreamhack.io/55

728x90