Jeomxon's Tech Note

BombLab풀기 - <phase_1> 본문

System/BombLab

BombLab풀기 - <phase_1>

저문(jeomxon) 2020. 1. 2. 22:17

2학년 2학기 때 배울 시스템 프로그래밍을 위해서 bomblab을 한번 끝까지 풀어보고 싶었다.

사실 원래 한번 풀어보고 싶기도 했고 복학을 했을 때 2학년 2학기를 대비하자는 그런 마음가짐으로 겸사겸사 시작해보려고 한다.

먼저 동아리 교육 서버에 미리 받아둔 bomblab을 실행시켜 보았다.

 

 

먼저 이렇게 인사말과 함께 반겨주는 모습을 볼 수 있다.(사실 숨겨진 내면은 무섭다^_^)

 

 

그리고 'abcd'라는 문자열을 주었더니 BOOM!!!이라는 메시지와 함께 실행이 종료되었다.

 

bomblab의 실행파일에는 phase가 6개에 hidden phase까지 총 7개의 단계가 있다고 들었는데 궁금해서 gdb로 들어가서 main함수를 disassamble 해보았다.

 

 

 

사실 더 길지만 phase 1~6까지의 일부를 가져와 보았다. 대충 이렇게 구성되어 있구나 하고 넘어갔다.  (사실 main이 핵심이라 중요하긴 한데 아직 시스템에 대한 이해도 부족하고 일단 phase를 푸는 게 우선이라고 생각해서 빨리 끝까지 풀어볼 생각이다.)

 

자 이제 본격적으로 가장 간단하고 쉬운 phase_1을 풀어보려고 한다.

먼저 phase_1을 disassamble해보았다.

 

 

phase_1에서의 핵심은 strings_not_equal이라는 함수에 있다는 것을 눈치챌 수 있었다.

explode_bomb을 제외한 유일한 함수였기 때문이다. 그래서 저 함수에 대해서 한번 생각을 해봤다. 

mov는 복사를 뜻하는 명령어이고 0x402400을 esi에 복사했으므로 저 부분을 유심히 볼 필요가 있었다.

 

 

x명령어를 통해서 0x402400을 보니 "Border relations with Canada have never been better."이라는 문자열을 확인할 수 있었다. strings_not_equal이라는 함수명처럼 실행을 시켜서 phase_1에 Border relations with Canada have never been better.이라는 문자열을 대입해보았다. 

 

먼저 phase_1이 있는 main+154에 breakpoint를 걸고 gdb에서 run을 시켜 위의 문자열을 대입해보았다.

 

phase_1을 해결했음을 알리는 문자열과 함께 다음 단계의 답을 요구하는 bomb을 볼 수 있었다.

 

-이어서 strings_not_equal 함수를 잠깐 파헤쳐볼 예정이다.

 

 

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

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