본문 바로가기

System Hacking

정보보안5 (16) - 디버거

! 디버거 사용법

- De + Bugger

 

- Bug : 벌레( 그레이스 호퍼 )

- 프로그램에 오류를 일으킬 수 있는 존재 (Bug)

 

- De Bug -> DeBugging -> DeBugger (벌레를 잡음 즉, 오류를 잡는다.)

 

- linux 에는 GDB가 있다.

 

gcc -o myshell myshell.c -g --->> -g명령어를 통해 디버거된 파일을 만든다.

 

 

! 디버거를 통한 프로그램의 실행

#> ./myshell -> execve -> 프로세스

- 일반적인 경우 프로세스 제어 불가능 (접근 불가능)

#> GDB -> ./myshell -> 프로세스

- 디버거를 통해 프로세스를 직접 제어 (접근)

 

1. 코드 확인

 - C로 작성된 -> main

 - assembly 작성된 -> _start

(gdb) disassembly 주소

 

2. 프로그램 실행 제어

1). 브레이크 포인트

    

continue는 중지된 부분부터 재시작

 

! 브레이크 포인터를 이용할때 주의할점

- 특정명령어에 break를 걸었을때 해당 명령이 실행이 되어야만 중지가된다. 즉 해당 명령어 부분이 실행되지않으면 break도 시행되지 않는다.

- 브레이크는 몇개든지 브레이크 포인트를 둘 수 있다.

- 그리고 프로그램을 실행할 때마다 브레이크는 계속 실행된다.

 

 

-enable or disable Num 을 통해서 해당 브레이크포인트를 활성/비활성 할 수 있다.

 

- breakpoints를 삭제를 원한다면 delete Num 을하면된다.

 

! 소프트웨어 브레이크 포인트

- 갯수의 제한없이 설정이 가능

- 해당 주소의 명령어가 실행되지 않으면 브레이크도 걸리지 않는다.

 

 

3. 출력 명령어 : x, print

- 메모리 덤프 : x/출력갯수/출력형태/출력단위 --> 기본적인 형태

 

- 기본형태

(gdb) x/1xh

 

- 출력행태: 10진수, 8진수, 16진수, 문자열, 명령어

d          o        h          s        i

 

- 출력단위: 1바이트, 2바이트, 4바이트

  b           h          w

 

! 바이트 오더

- CPU가 메모리에 저장하는 바이트의 순서

 

1). little-endian ( intel )

- 일반적으로 사람이 읽는 순서 왼쪽 -> 오른쪽 방식이 아닌 바이트 단위로 거꾸로 저장

- 0x12345678  --->>> 0x78563412

2). big-endian

- 0x12345678 - 0x12345678

 

 

 

 

 

 

 

1. 바이너리 분석 실습 ( gdb를 통해 c언어 구현 )

password1 파일을 gdb를 통해 디스어셈블리를하고 c언어로 구현했다.