! 디버거 사용법
- 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언어로 구현했다.
'System Hacking' 카테고리의 다른 글
3일차] 보안가이드[파일 및 디렉터리 관리] (2) | 2018.04.12 |
---|---|
1~2일차] 보안 가이드[계정관리] (0) | 2018.04.11 |
정보보안5 (13,14,15) - 시스템 콜 (systemcall) (0) | 2017.11.06 |
정보보안5 (12) - main함수의 인자 (0) | 2017.10.30 |
정보보안5 (10,11) - call, 스택메모리의 함수표현 (0) | 2017.10.26 |