Linux 실행파일 형식 == ELF
ELF는 '헤더&섹션'으로 구성되어있다.
헤더: 실행에 필요한 여러 정보가 들어있음
섹션: 컴파일된 기계어&프로그램 문자열&여러 데이터가 들어있음
ELF가 실행될 때는 Entry Point(EP)부터 프로그램이 실행됨.(명령어: readelf -h "실행 프로그램 이름")
----------------------------------------------------------------------------------------------------------------------------------------
context
context는 크게 4개의 영역으로 구분된다.
1. registers: 레지스터의 상태를 보여줍니다.
2. disasm: rip부터 여러 줄에 걸쳐 디스어셈블된 결과를 보여줍니다.
3. stack: rsp부터 여러 줄에 걸쳐 스택의 값들을 보여줍니다.
4. backtrace: 현재 rip에 도달할 때까지 어떤 함수들이 중첩되어 호출됐는지 보여줍니다.
----------------------------------------------------------------------------------------------------------------------------------------
gdb 명령어
gdb "프로그램 이름" == debuging 시작
start == Entry Point(EP)부터 프로그램을 분석할 수 있게 해준다. (DISASM에서 가리키는 화살표 == 현재 rip의 값)
b: break (ex. b *main+48// b *main)
c: continue
r: run->
si: step into
ni: next instruction
i: info
k: kill
pd: pdisas
disassemble "함수 이름" == 해당 함수가 반환될 때까지를 디스어셈블 하여 보여줌
u, nearpc, pdisassemble == 가독성 좋게 디스어셈블 해줌
ni == 중단점(break point)부터 명령어를 한 줄씩 실행함//서브루틴 내부로 들어가지 않음(X)
si == 중단점(break point)부터 명령어를 한 줄씩 실행함//서브루틴의 내부로 들어감(O)
finish == 함수 끝까지 실행
###################################가상 메모리의 값 읽기#######################################
'x'라는 명령어 이용
---Format letters---
o(octal), x(hex), d(decimal), u(unsigned decimal), t(binary), f(float), a(address), i(instruction), c(char), s(string) and z(hex, zero padded on the left)
---Size letters---
b(byte), h(halfword), w(word), g(giant, 8 bytes)
ex) 1. rsp부터 80바이트를 8바이트씩 hex형식으로 출력 -> x/10gx $rsp
2. rip부터 5줄의 어셈블리 명령어 출력 -> x/5i $rip
3. 특정 주소의 문자열 출력 -> x/s 0x401173
tele == 특정 주소의 메모리 값을 보여줌&메모리가 참조하고 있는 주소값까지 보여줌
vmmap == 가상 메모리의 레이아웃을 보여줌
어떤 파일이 매핑된 영역일 경우, 해당 파일의 경로까지 보여줌
###################################### r $() 명령어 ############################################
r $() == ()안에 파이썬 코드 입력하면 값을 "전달"함
ex) 1. r $(python -c 'print("\xff"*100)')
r $(python -c '입력할 코드')
2. r $(python -c 'print("\xff"*100)') <<< $(python -c 'print("dreamhack")')
'<<<'이용하여 값을 입력할 수 있음
###################################최종 정리########################################
start: 진입점에 중단점을 설정하고, 실행
break(b): 중단점 설정
continue(c): 계속 실행
disassemble: 디스어셈블 결과 출력
u, nearpc, pd: 디스어셈블 결과 가독성 좋게 출력
x: 메모리 조회
run(r): 프로그램 처음부터 실행
context: 레지스터, 코드, 스택, 백트레이스의 상태 출력
nexti(ni): 명령어 실행, 함수 내부로는 들어가지 않음
stepi(si): 명령어 실행, 함수 내부로 들어감
telescope(tele): 메모리 조회, 메모리값이 포인터일 경우 재귀적으로 따라가며 모든 메모리값 출력
vmmap: 메모리 레이아웃 출력
'DreamHack: System Hacking > F Stage 3' 카테고리의 다른 글
Tool: pwntools (pwntools 사용법 및 명령어 정리) (0) | 2023.03.31 |
---|