<Bomb Lab이란?>
https://studyforall.tistory.com/98
실습 환경에 대해서는 위의 게시물 하단에 적어놓았다.
phase2에 이어 이제 phase3를 시작해본다.
disassemble phase_3 명령어를 입력하여 phase_3 함수를 처음부터 끝까지 어셈블리 코드로 출력해보았다.
첫인상: 이번에도 많은 비교(cmp)와 분기(jmp)가 보인다.
그런데 분기가 거의 다 unconditional jump 즉, 해당 줄에 도달하기만 하면 무조건 jmp하는 명령어이다.
그리고 모두 <+123>으로 jmp한다.
안전지대를 찾아보자.
<+134>에 도달하면 explode_bomb이 해체된 시점이다.
<+127>에서 je를 통해 <+134>로 jump할지 폭탄이 터질지가 결정된다.
je는 앞선 cmp에서 ZF가 1이 되어야 즉, 두 피연산자의 값이 같아야 jump한다.
따라서 안전지대로 가려면 <+123>의 cmp에서 eax와 [rsp+0xc]에 들어있는 값이 같아야 함을 알 수 있다.
<+34>에 첫번째 explode_bomb이 있다.
일단 이걸 넘어서야 그 다음으로 갈 수 있다.
그 위의 세 줄<+24><+29><+32>를 동적분석해보자.
먼저 hello라는 문자열을 입력해봤다.
그랬더니 <+29>시점에 eax가 0이었다.
그렇다면 cmp와 jg를 지나서 eax가 0x1보다 크지 않으므로 explode_bomb으로 프로세스가 흘러갈 것이다.
다음으로 1을 입력해봤다.
이번에는 <+29>시점에 eax가 1이었다.
하지만 여전히 eax가 0x1보다 크지 않으므로 explode_bomb으로 프로세스가 흘러갈 것이다.
다음으로는 1 2를 입력해봤다.
이번에는 <+29>시점에 eax가 2이었다.
eax가 0x1보다 크므로 폭탄을 피해갈 수 있다.
eax에는 입력한 숫자의 개수가 저장되는 것일까?
시험삼아 1 2 3을 입력했을 때도 eax는 2였다.
입력한 숫자의 개수를 저장하는데, 최대로 입력받는 개수가 2인가보다.. 라고 추측하고 넘어가기로 했다.
2개 이상의 숫자를 입력하는 것으로 <+34>의 폭탄은 해체했다.
다음 폭탄은 어디있을까?
<+44>에서 <+106>으로 jump하는데 거기가 explode_bomb이다.
따라서 여기에 두번째 폭탄이 있다고 볼 수 있다.
ja는 전자가 후자보다 크면 jump하는 명령어이다.
따라서 <+39>에서 [rsp+0x8]이 0x7보다 크면 폭탄이 터진다.
<+39>지점에서 [rsp+0x8]에는 어떤 값이 들어있을까?
해당 지점에 bp를 걸고 쭉 실행했다.
2개의 숫자는 5와 6을 입력해보았다.
rip가 <+39>지점에 멈춘 상태에서 x/6d $rsp 명령어로 rsp+8 주변의 값을 출력해보았다.
rsp+8지점에 5가 있고 rsp+0xc 지점에 6이 있다.
그렇다면 <+39>의 cmp문은 첫번째로 입력한 숫자를 7과 비교하는 비교문이다.
폭탄이 터지지 않으려면 첫번째 숫자는 0, 1, 2, 3, 4, 5, 6, 7 중 하나여야 한다.
그럼 첫번째 숫자를 1로 고정하고 두번째 숫자는 무엇이어야 하는지 추적해보자.
<+44>의 explode_bomb을 넘어오면 첫번째 숫자를 eax에 넣고,
그 값과 0x402470이라는 값을 연산해서 해당 주소 지점으로 바로 jump한다.
즉 첫번재 숫자에 따라 jump하는 목적지가 달라진다고 볼 수 있다.
<+50>에 bp를 설정해놓고 해당 지점에서 $rax*8+0x402470 주소에 있는 값이 무엇인지 출력해보았다.
첫번째 숫자로 1을 입력했을 때 나온 결과이다.
목적지 주소는 0x400fb9이다.
여기에서는 eax에 0x137을 입력한다.
초반에 살펴본 바에 따르면 0x137과 두번째 숫자가 같아서 폭탄을 해체할 수 있다.
따라서 첫번째 숫자가 1인 경우 두번째 숫자는 0x137, 10진수로 변환하면 311이어야 한다.
3단계 폭탄을 해체했다.
공부삼아 가능한 모든 숫자 조합을 찾아보았다.
0 207
1 311
2 707
3 256
4 389
5 206
6 682
7 327
'Bomb Lab' 카테고리의 다른 글
[Bomb Lab] phase4 (0) | 2024.05.10 |
---|---|
[Bomb Lab] Phase2 (0) | 2024.03.24 |
[Bomb Lab] Phase1 (0) | 2024.03.24 |
[Bomb Lab]Bomb Lab이란? (1) | 2024.03.24 |