Bomb LAB 보고서 풀이과정(이미지첨부) 설명, 플로우차트, C언어표현, secert까지
- 최초 등록일
- 2016.02.02
- 최종 저작일
- 2015.02
- 40페이지/
한컴오피스
- 가격 5,000원
![할인쿠폰받기](/images/v4/document/ico_det_coupon.gif)
소개글
Bomb LAB 완벽 보고서
이미지 첨부된 풀이과정 설명과 플로우차트, C언어 표현까지
Phase1~Phase6 까지 그리고 Secret phase 까지 완벽 해결
목차
1. 개요
2. Phase_1
3. Phase_2
4. Phase_3
5. Phase_4
6. Phase_5
7. Phase_6
8. Secret_phase
본문내용
1. 개요
BombLab은 오브젝트 파일의 어셈블리 코드를 보아 함수의 흐름과 변수를 파악하여 문제를 풀어가는 것이다. C로 구현한 파일을 gcc로 컴파일 하여 어셈블리어로 표현한 파일을 해독하는 것이기 때문에 먼저 어셈블리어를 objump명령어를 이용하여 메모장에 옮긴 후 한글에 옮겨 한 줄 한 줄 읽어가는 식으로 시작을 하였다.
<중 략>
5. Phase_4
- 코드
<그 림>
- 해결방법
위의 코드를 보면 0x8049c2e에 있는 것이 esp+4로 넣어지는 것을 알 수 있다. 0x8049c2e에 무엇이 있는지 보면
<그 림>
숫자 하나를 입력 받음을 알 수 있다.
다음으로 isoc99_sscanf@plt함수는 앞에서 알아본 함수와 같음을 알 수 있다. 카운트 함수로써 1과 다르면 폭탄을 call하는 것을 알 수 있다. 다음을 보면 입력한 수와 0과 비교하는 것을 알 수 있다. 0보다 크면 폭탄을 피해가는 것을 보아 양수를 입력해야 한다는 것을 알 수 있다. 다음으로 입력 받은 값을 esp에 옮긴 후 func4함수를 호출한다.
func4함수를 알아보자.
<그 림>
func4 함수를 보면 함수 안에서 함수를 또 부르는 것으로 보아 재귀 함수임을 알 수 있다.
먼저 입력된 수가 1보다 작거나 같으면 +51로 점프를 하여 리턴을 하는 것을 알 수 있다. 만약 1보다 크면 lea "-0x1(%ebx),%eax"를 보면 ebx메모리에 있는 값에서 1을 뺀 후 그 주소를 eax로 보내고, "mov %eax,(%esp)“ 로 입력값-1을 스택에 탑에 넣은 후 func4를 호출 한다. 그리고 리턴 받은 값을 esi에 저장해 놓는다. 다음으로 ebx, 입력값에서 2를 뺀 후 또다시 func4를 호출한다. 그리고 리턴으로 받은 값과 앞에서 받은 리턴인 esi에 있는 값을 더하여 리턴 하는 것을 알 수 있다.
즉 func4(k)=func4(k-1)+func4(k-2) k>1 임을 알 수 있다. 만약 k가 1보다 작거나 같으면 1을 리턴 하는 것을 보아 이 함수는 피보나치 함수임을 알 수 있다.
몇가지 예를 들어보면
func4(1)=1
참고 자료
없음