mgchem's log
Published 2023. 10. 8. 21:20
Lab2: Bomblab (secret phase) Study/CS

Finding secret phase

 

phase_defused

0x555555557089 : HelloKAIST

phase_3 input을 100 -1606 -1601 HelloKAIST 으로 입력하면 4개가 들어간 것으로 저장되지만 phase_3은 통과됨.
마지막 phase_6까지 정답을 입력하면 마지막 phase_defused 실행 중 카운터가 6이 되어 jump함. phase_3에서 넣어준 입력의 마지막 string과 HelloKAIST를 비교하여 같으면 secret phase로 들어감.

 


Overview

 

(gdb) disas secret_phase

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

 


Defusing secret phase

 

입력한 숫자 a가 hex로 rax에 저장됨
원본 rax ebx에 옮겨두고 eax에서 1 빼기
eax가 0x3e8 == 1000 이하여야 함 -> a는 1001 이하
esi에 ebx 저장
rdi에 0x204160 <n1> 저장
fun7으로.

{
rdi 0이면 57로 이동, eax 1로 채우기
아니면 (rdi)를 edx에 저장. 36으로 시작 -> 50 -> 107 -> 1001 이후 29로 이동. -> 0
esi == a보다 edx가 크면 29로 이동.
eax 0으로 만들고 edx와 esi 다르면 42로 이동.
같으면 return

29. rdi+0x8에 있던 값 rdi에 저장하고 fun7 다시 call.
eax 두 배로 만들고 return.

42. rdi+0x10에 있던 값(0x5555557581a0) rdi에 저장하고 fun7 다시 call.
eax에 2 * rax + 1 저장하고 return.
}

eax 0이면 refuse.

36 입력하면?
esi == 36. edx는 36으로 시작. 둘이 같으므로 eax 0으로 만들고 return.

 

0x5555557580f0 <n48>:   1001    0       0       0
0x555555758100 <n48+16>:        0       0       0       0
0x555555758160 <n1>:    36      0       1433764224      21845
0x555555758170 <n1+16>: 1433764256      21845   0       0
0x555555758180 <n21>:   8       0       1433764352      21845
0x555555758190 <n21+16>:        1433764288      21845   0       0
0x5555557581a0 <n22>:   50      0       1433764320      21845
0x5555557581b0 <n22+16>:        1433764384      21845   0       0
0x5555557581c0 <n32>:   22      0       1433764016      21845
0x5555557581d0 <n32+16>:        1433763952      21845   0       0
0x5555557581e0 <n33>:   45      0       1433763856      21845
0x5555557581f0 <n33+16>:        1433764048      21845   0       0
0x555555758200 <n31>:   6       0       1433763888      21845
0x555555758210 <n31+16>:        1433763984      21845   0       0
0x555555758220 <n34>:   107     0       1433763920      21845
0x555555758230 <n34+16>:        1433764080      21845   0       0

0x5555557580f0 <n48>:   0x000003e9      0x00000000      0x00000000      0x00000000
0x555555758100 <n48+16>:        0x00000000      0x00000000      0x00000000      0x00000000
0x555555758160 <n1>:    0x00000024      0x00000000      0x55758180      0x00005555
0x555555758170 <n1+16>: 0x557581a0      0x00005555      0x00000000      0x00000000
0x555555758180 <n21>:   0x00000008      0x00000000      0x55758200      0x00005555
0x555555758190 <n21+16>:        0x557581c0      0x00005555      0x00000000      0x00000000
0x5555557581a0 <n22>:   0x00000032      0x00000000      0x557581e0      0x00005555
0x5555557581b0 <n22+16>:        0x55758220      0x00005555      0x00000000      0x00000000
0x5555557581c0 <n32>:   0x00000016      0x00000000      0x557580b0      0x00005555
0x5555557581d0 <n32+16>:        0x55758070      0x00005555      0x00000000      0x00000000
0x5555557581e0 <n33>:   0x0000002d      0x00000000      0x55758010      0x00005555
0x5555557581f0 <n33+16>:        0x557580d0      0x00005555      0x00000000      0x00000000
0x555555758200 <n31>:   0x00000006      0x00000000      0x55758030      0x00005555
0x555555758210 <n31+16>:        0x55758090      0x00005555      0x00000000      0x00000000
0x555555758220 <n34>:   0x0000006b      0x00000000      0x55758050      0x00005555
0x555555758230 <n34+16>:        0x557580f0      0x00005555      0x00000000      0x00000000

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

Lab3: Attacklab (phase 2)  (1) 2023.10.30
Lab3: Attacklab (phase 1)  (0) 2023.10.29
Lab2: Bomblab (phase 6)  (1) 2023.10.08
Lab2: Bomblab (phase 5)  (0) 2023.10.08
Lab2: Bomblab (phase 4)  (0) 2023.10.08
profile

mgchem's log

@mgchem

뱁새의 다리찣기