경희대학교 장대희 교수님의 소프트웨어보안 수업을 기반으로 정리한 글입니다.
실습환경 구축
WSL
pwndbg
GDB란?
GDB는 GNU(그누) Debugger의 약자로, 표준 디버거이다. (동적 분석)
주요 기능
- Breakpoint: 원하는 코드 지점에서 실행을 멈추고 상태 확인
- 단계 실행(Step/next): 코드 한 줄씩 실행해 흐름 추적
- 메모리/레지스터 확인: 변수 값, 스택, 힙, CPU 레지스터 값 보기
- 메모리 수정: 변수나 메모리 값을 임의로 바꾸기 가능
- 코어덤프 분석: 프로그램이 크래시 났을 때 원인을 분석
⭐ 브레이크 포인트란 디버거가 제공하는 기능으로, 프로그램을 일시적으로 멈추는 것을 말한다.
이렇게 프로그램을 멈춰야 특정 시점의 메모리를 볼 수 있다. 때문에 브레이크 포인트를 거는 것은 매우 중요하다.
※ core dump: 컴퓨터 프로그램이 특정 시점에 작업 중이던 메모리 상태를 기록한 것으로, 보통 프로그램이 비정상적으로 종료했을 때 만들어진다.
특징
- CLI 기반
- C, C++, 어셈블리 기반 바이너리 분석에 특화
- pwndbg 등 다양한 확장 플러그인 존재 (그냥 GDB는 너무 CLI라 사용 어려움)
소프트웨어 보안에서 GDB
- 프로그램이 어떻게 메모리에 배치되는지 관찰 가능
- 익스플로잇 과정에서 스택/힙 덮어쓰기 효과를 실시간으로 확인 가능


GDB & Pwndbg Cheat Sheet

GDB 사용법




GDB 실습

리버싱이나 분석을 하기 전에는, 해당 프로그램이 무엇을 하는 프로그램인지 알기 위해 실행 시켜보는 게 좋다.

※ cd ~: 홈으로 이동

실습 1: 프로그램의 메모리 영역을 확인


실습 2: 각 변수들이 프로그램의 메모리 영역 범위 내에 있는지 확인







실습 3: num 변수의 최종 값을 확인

※ rbp, rsp
- rsp (stack pointer): 스택의 “현재 탑”을 가리킴. 함수 호출/리턴/푸시/팝에 의해 자주 변함.
- rbp (frame pointer): 함수 내에서 고정된 기준으로 사용되며, 디버깅/프레임 탐색에 안정적.



실습 4: secret 변수의 값을 디버거로 조작해 flag 획득







'CS > 소프트웨어보안' 카테고리의 다른 글
| 5-1. 소프트웨어 보안을 위한 리눅스 기초 (0) | 2025.10.17 |
|---|---|
| 4-3. 어셈블리 실습 (0) | 2025.10.17 |
| 4-1. 메모리 구조 (0) | 2025.10.15 |
| 3. IDA 활용 및 리버싱 방법 (0) | 2025.10.13 |
| 1. 소프트웨어 보안이슈 소개 (0) | 2025.10.12 |