Bomblab
bomb-quiet를 해결했으니 이제 본게임으로.
Bomblab은 phase 1 ~ phase 6 (+secret phase?) 로 구성되어 있다.
전체 코드를 disassemble하여 읽어보기에는 너무 길기에,
gdb를 실행하고 disas phase_1처럼 특정 함수 부분만 disassemble하여 살펴보는 편이 효율적이다.
Defusing phase 1
phase_1 처음부터 한 줄씩 실행시키기 위해 phase_1에 breakpoint를 설정한다.
phase 1을 해결하면 바로 phase 2로 넘어갈테니 혹시나 실수로 터뜨리는 일을 방지하기 위해 phase_2와 explode_bomb에도 break를 걸어준다.
strings_not_equal로 가기 전 0x12f8에서는 %rsi에 0x2cd0라는 수상한 값을 넣어준다.
%rdi에는 우리의 입력값이 들어있을테고, strings_not_equal에서는 %rdi와 (%rsi)의 data를 비교할 것이라는 추측 하에,
bomb를 실행하고 phase_1에서 한 줄씩 실행시키다가
0x12ff, 즉 strings_not_equal로 가기 직전의 (%rsi)값을 string으로 출력해본다.
입력값은 임의로 hello를 넣어주었다.
설정한 대로 phase_1에서 break가 걸리는 것을 확인하였고, si로 한 줄씩 실행시킨다.
%rip가 0x12ff일 때 x/s $rsi로 (%rsi)값을 string으로 출력하면 시적인 문구가 한 줄 나온다.
밑져야 본전이니 해당 문구를 넣어보자.
quit로 실행을 종료하고, 혹시 모르니 breakpoint를 explode_bomb에 걸어두고 bomb을 재실행한다.
phase 1은 bomb-quiet와 같이 간단하다. phase 2는 점심먹고 해보자.
'Study > CS' 카테고리의 다른 글
Lab2: Bomblab (phase 5) (0) | 2023.10.08 |
---|---|
Lab2: Bomblab (phase 4) (0) | 2023.10.08 |
Lab2: Bomblab (phase 3) (1) | 2023.10.08 |
Lab2: Bomblab (phase 2) (0) | 2023.10.08 |
Lab2: Bomblab (bomb-quiet) (0) | 2023.10.07 |