Jeomxon's Tech Note

BombLab풀기 - <phase_2> 본문

System/BombLab

BombLab풀기 - <phase_2>

저문(jeomxon) 2020. 1. 16. 21:51

이번에는 bomb lab의 phase_2를 푸는 내용을 포스팅할 것이다. 먼저 gdb로 bomb를 들어가서 phase_2를 disassamble해보았다. 

 

 

일단 핵심이 되는 함수를 보니 read_six_numbers라는 함수임을 알 수 있다. 아마도 6개의 입력 값을 받을 것 같은 느낌이 든다.

그리고 다음 14번째 줄의 cmp명령어를 보면 스택에 첫번째 정수가 1인지 비교하고 있다.

그리고 52번째 줄로 넘어가서 rbx에 두번째 숫자가 담긴 스택의 주소를 저장하고

다시 27번째 줄로 점프해서 eax에 첫번째 입력값인 1을 복사한다.

그 후 30번째 줄에서 eax값을 두배해준다.

그 후 rbx의 값과 비교를 해서 같으면 rbx에 4만큼의 공간을 더 할당하여 준다.

이런 방식을 반복하다보면 처음에 1부터 시작해서 1 2 4 8 16 32라는 6개의 값까지 확인할 수 있게된다.

한번 실행을 시켜서 정답을 확인해보았다.

 

 

위 캡처화면처럼 1단계의 답을 입력한 후에 2단계의 답을 입력해보니 올바른 답을 입력했는지 3단계의 답을 요구하는 것처럼 보이는 메시지를 출력해준다. 

 

자 이제 마지막으로 read_six_numbers라는 함수를 보자. (사실 저 부분에서 보았지만 포스팅의 흐름상 마지막 부분에 적었다.)

 

 

대충보면 scanf로 값을 받고, 6개의 값을 받는 것을 볼 수 있다.

cmp명령어 부분에서 보면 6개 미만이면 explode_bomb으로 가는 것을 볼 수 있다.

 

이렇게해서 phase_2까지도 해결할 수 있었다. 

'System > BombLab' 카테고리의 다른 글

Docker에서 ubuntu이미지를 이용해 bomblab 환경설정 하기  (0) 2021.11.15
BombLab풀기 - <phase_1>  (0) 2020.01.02