촉촉한초코칩
(**) BombLab 4 본문
4번
phase_4 분석
cmp eax, 0x2
$0x2와 %eax를 비교해서 같지 않으면 phase_4+41 실행
phase_4+41 = explode_bome
즉, 두 값이 같아야 함
cmp DWORD PTR[rsp+0x8], 0xe
jbe : a가 b보다 작거나 같을 때
두 값을 비교해서 두 값이 같거나 앞이 더 작을 때 넘어간다. 아니면 46번째 줄로 이동
즉, a가 더 커야 한다?
cmp eax, 0x2
입력을 받고 cmp하는 부분에서 bp를 걸어서 eax에 어떤 값이 들어있는지 확인한다.
gdb에서 entry가 안 돼서 pwndbg로 다시 설치... https://github.com/pwndbg/pwndbg
일단 0을 입력하고 eax에 어떤 값이 있는지 확인해봤는데
그러면 입력값은 1???
10을 입력하고 ni로 진행해도 explode_bomb로 이동하게 됨....
> 라업을 보니... eax와 비교하는 2는 입력값의 개수였다. ㅎ
cmp DWORD PTR[rsp+0x8], 0xe
cmp부분에 bp 걸어서 rsp의 값을 확인해본다.
rsp에 8을 더하는 걸 보니 그냥 입력값을 뜻하는 것 같다.
e는 14이므로, 입력값은 14보다 작거나 같아야 한다.
call 0x400fc3 <func4>
test eax, eax
jne 0x401058 <phase_4+76>
func4를 실행한 후 test를 실행하는데, jne는 두개의 값이 같지 않을 때, 0이 아닐 때 해당 주소로 점프한다.
그렇다면 test의 값은 0이 되어야 한다.
일단 func4를 분석해본다. > 0 ~ 15 해석,,
- rsp = rsp - 8
- eax = edx
- eax = eax - esi
- ecx = eax
- ecx << 0x1f (31)
- eax = eax + ecx
- eax >> 1
32번째
eax = eax + eax
func4에서 한줄씩 실행해본다.
일단 아무 값(1,2) 이나 입력하고 func4에서 위 연산들로 인해 값이 어떻게 변하는지 봤는데, 값이 점점 줄어들면서 0이 될 때 func4를 빠져나온다. > test 후 실행되는 폭탄은 피함!!
즉, func4는 0이 되어야 빠져나온다.
cmp dword ptr[rsp+0xc], 0
je phase_4+81
rsp와 0을 비교하고 만약 같으면 폭탄에서 넘어간다.
rsp는 입력값을 뜻하는데, 여기서 0xc인 12를 더하니까 두번째 입력값이 된다.
즉, 두번째 입력값은 0이 된다.
1, 0입력했는데 phase_4가 해제되었다...
첫번째 값을 모르겠어서 10을 입력했는데, 그러면 폭탄이 실행됐다.
func4의 첫번째 명령어가 rsp = rsp - 8인데, 이부분이 첫번째 값을 가리키는 것 같기도 하다...
그 부분은 나중에 더 해보자..
'Study > System' 카테고리의 다른 글
[Dreamhack] Canary 실습 동적 분석 (0) | 2024.05.19 |
---|---|
[Dreamhack] shell_basic (**다시 해보기...) (0) | 2024.05.13 |
[Dreamhack] basic_exploitation_001 (0) | 2024.03.31 |
[Dreamhack] basic_exploitation_000 (0) | 2024.03.31 |
[Dreamhack] Return Address Overwrite (1) | 2024.03.31 |