Hacking/System Hacking

gdb 사용법 익히기

arisongeee 2022. 3. 28. 20:49
728x90
반응형

gdb는 리눅스의 대표적인 디버거중 하나! 

 

ELF

- 리눅스 실행 파일 형식 

- 크게 헤더와 여러 형식으로 이루어짐 

--> ELF 의 헤더에 진입점(EP) 필드 존재 (OS는 ELF를 실행할 때 EP부터 프로그램 실행) 

//해당 명령어를 통해 진입점 확인 가능 
//entry point address 
readelf -h debugee(파일명)

entry point address : 0x1060 

 

gdb에서 start 명령어를 입력하면 진입점 주소를 rip가 가리키고 있는 것을 볼 수 있다. 

gdb <실행파일>
(gdb) start

<context>

1. registers : 레지스터의 상태를 보여줌 

2. disasm : rip부터 여러줄에 걸쳐 디스어셈블(기계어 -> 어셈블리)된 결과를 보여줌 

3. stack : rsp부터 여러줄에 걸쳐 스택의 값들을 보여줌 

4. backtrace :  현재 rip에 도달할 때까지 어떤 함수들이 중첩되어 호출됐는지 보여줌 

 

break & continue 

break :  특정 주소에 중단점 설정 

continue : 중단된 프로그램을 계속 실행시킴 

 

b *main

 

+) pwndbg를 사용한다면 u 또는 nearpc 명령어를 통해 깔끔하게 출력 가능 

 

[GDB 명령어 정리]

disas 함수명 : 해당 함수의 어셈블리어를 보여준다. ex) disas main 

b *함수명+상수 or b *메모리주소 .. : 해당 영역에 breakpoint 

n(next) : 다음 코드 진행

c(continue) : 중단점 올때까지 멈추지않고 진행 

ni(next instruction): 어셈블리어 한줄 실행(함수 안으로 x)

si(step into): 어셈블리어 한줄 실행(함수 안으로)

finish : si로 함수안에 들어갔지만 그만 함수를 나오고 싶을 때 함수의 끝으로 이동시켜줌 

p $레지스터명 : 값을 프린트함 

p/[출력형식] 레지스터or변수 : 계산 결과 확인 가능 

x/d 주소 or $레지스터 : 주소 or 레지스터 값을 정수로 보여줌

x/s 주소 or $레지스터  : String으로 보여줌 

x/gx  주소 or $레지스터  : 8byte 만큼 보여줌 

x/wx 주소 or $레지스터 : 4byte만큼 보여줌 

x/10i : 예를 들어 10i 인 경우 rip부터 10줄의 명령어를 어셈블리로 보겠다. 

jump 함수 or 행 or 메모리 : 강제 점프 

info r : 레지스터 보기(전체) 

info r $레지스터 : 특정 레지스터 보기

 

tele(telescope): 강력한 메모리 덤프 기능 , 특정 주소의 메모리 값 뿐만 아니라 메모리가 참조하고 있는 주소를 재귀적으로 탐색하여 값을 보여준다.

vmmap : 가상 메모리의 레이아웃을 보여준다. 

 

 

** 입력값이 필요할 때 키보드를 통해 입력 불가능한 값인 경우

ex) 파이썬을 이용해 인자 2개 입력 예시 

r $(python -c 'print "\xff"*100') <<< $(python -c 'print "dreamhack"')

 

파이썬 입력이 안먹어서 구글링 결과 해결😭

https://stackoverflow.com/questions/15236832/how-do-i-reinstall-a-directory-in-usr-bin-python


[출처]

dreamhack systemhacking

ARGOS 시스템해킹 자료 

728x90
반응형