일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- @Param
- Mock
- 우아한테크코스 블랙잭
- 배포스크립트
- 우분투
- 벌크연산
- BDDMockito
- 스프링부트배포
- Argos
- bomblab
- 우테코
- docker에 ubuntu
- 스프링 롬복
- clearAutomatically
- 검색api
- 밤랩
- unique result
- 레벨인터뷰
- 영속성컨텍스트
- SpringDataJPA
- 자바 롬복
- 우아한테크코스5기
- @Modifying
- NonUniqueResultException
- 우아한테크코스
- 회고
- ubuntu이미지
- @Query
- jpa
- ubuntu
- Today
- Total
Jeomxon's Tech Note
BombLab풀기 - <phase_1> 본문
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 |