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 |