파일 생성 후 컴파일
nano debugee.c // nano 로 debugee.c 파일 생성
파일 안에 기본적인 코드를 넣어줌.
gcc -o debugee debugee.c -no-pie -g // debugee.c 파일 컴파일
Entry
$ readelf -h debugee // ELF(Executable and Linkable Format) 헤더 정보를 출력
ELF( Executable and Linkable Format) 은 리눅스 실행파일의 형식임.
ELF는 헤더와 여러 섹션으로 구성됨.
헤더를 보면 Entry point (EP)가 있다. 운영체제는 ELF를 실행할 때 EP 값부터 프로그램을 실행함.
여기서 EP는 0x401050 이다.
pwndbg> entry //현재 디버깅 중인 실행 파일의 엔트리 포인트(Entry Point) 주소를 출력
DISASM영역의 화살표(►)가 가리키는 주소는 현재 rip의 값이다.
아까 본 EP의 주소와 일치하다.
위에 4개의 영역으로 나뉘어 있는데
REGISTERS: 레지스터의 상태를 보여줌
DISASM: rip부터 여러 줄에 걸쳐 디스어셈블된 결과를 보여줌
STACK: rsp부터 여러 줄에 걸쳐 스택의 값들을 보여줌
BACKTRACE: 현재 rip에 도달할 때까지 어떤 함수들이 중첩되어 호출됐는지 보여줌
Break / Continue
break는 특정 주소에 중단점(breakpoint)을 설정하는 기능이고, continue는 중단된 프로그램을 계속 실행시키는 기능이다.
pwndbg> b *main // main까지 실행
pwndbg> c // 중단 후 계속 실행
Run
프로그램 처음부터 끝까지 단순 실행
pwndbg> r
disassembly
pwndbg> disassemble main // 메인함수 디스어셈블 u, nearpc, pdisass도 사용 가능
navigate
관찰하고자 하는 함수의 중단점에 도달했으면, 그 지점부터는 명령어를 한 줄씩 자세히 분석해야 함.
pwndbg> ni 5 // 다음 5개의 어셈블리 명령어 실행, 함수 내부로 들어가지 x
pwndbg> si 3 // 다음 3개의 어셈블리 명령어 실행, 함수 내부로 들어감
Examine
x를 이용하면 특정 주소에서 원하는 길이만큼의 데이터를 원하는 형식으로 인코딩하여 볼수 있음.
pwndbg> x/10gx $rsp // rsp부터 80바이트를 8바이트씩 hex형식으로 출력
pwndbg> x/5i $rip // rip부터 5줄의 어셈블리 명령어 출력
pwndbg> x/s 0x400000 // 특정 주소의 문자열 출력
Telescope
특정 주소의 메모리 값들을 보여주는 것에서 그치지 않고, 메모리가 참조하고 있는 주소를 재귀적으로 탐색하여 값을 보여줌.
pwndbg> tele // 메모리 덤프 기능
Vmmap
가상 메모리의 레이아웃을 보여줌.
pwndbg> vmmap // 어떤 파일이 매핑 된 영역일 경우, 해당 파일의 경로까지 보여줌
'System Hacking > Basics' 카테고리의 다른 글
[시스템 해킹] pwntools 사용법 (0) | 2025.03.07 |
---|---|
[시스템 해킹] pwntools 설치 방법 / Linux (0) | 2025.03.07 |
[시스템 해킹] pwndbg 설치방법 / Linux (0) | 2025.03.07 |
[시스템 해킹] 어셈블리어(assembly language) - 2/ 스택, 프로시저, 시스템콜 (0) | 2025.03.07 |
[시스템 해킹] 어셈블리어(assembly language) - 1/ 데이터이동, 산술연산, 논리연산, 비교, 분기 (0) | 2025.03.07 |