mgchem's log
Published 2023. 10. 8. 12:33
Lab2: Bomblab (phase 5) Study/CS

1. Overview

 

<shell />
(gdb) disas phase_5

phase_5 함수의 구성을 살펴보자.

 


2. Defusing phase 5

 

입력한 숫자 x y. x는 (%rsp), y는 0x4(%rsp)에 저장
test input : 2 3

rax는 x & 0xf. 0xf면 터짐
rdx에 eax 옮기고
eax에 rdi array에서 4 * rdx 위치의 값 넣는다. 14 -> 6 -> 15
esi에 r8 value에서 4 * rdx 위치의 값 더한다. esi는 0에서 시작 8 + 43 + 35 = 86
eax가 0xf가 될때까지 반복. 반복 횟수는 ecx = 3

0x555555556d60 rdi
0x555555556d60 <array.3429>:    10      2       14      7
0x555555556d70 <array.3429+16>: 8       12      15      11
0x555555556d80 <array.3429+32>: 0       4       1       13
0x555555556d90 <array.3429+48>: 3       9       6       5

0x555555556da0 r8
0x555555556da0 <value.3430>:    18      31      8       41
0x555555556db0 <value.3430+16>: 28      19      35      40
0x555555556dc0 <value.3430+32>: 37      27      61      4
0x555555556dd0 <value.3430+48>: 7       21      43      32

stack 가장 앞에 0xf 옮김
ecx가 5여야함 10 -> 2 -> 14 -> 6 -> 15 따라서 x & 0xf == 10
y와 esi 같아야함 61 + 31 + 8 + 43 + 35 = 178

10 178 입력하면 clear

'Study > CS' 카테고리의 다른 글

Lab2: Bomblab (secret phase)  (1) 2023.10.08
Lab2: Bomblab (phase 6)  (1) 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
profile

mgchem's log

@mgchem

뱁새의 다리찣기