Bomblab - Phase 2

LONGNEW·2021년 10월 10일
1

Bomb

목록 보기
2/7

폭탄 출처 : Bomb from "Dr.Evil"

no. 1251056

<+30> cmp DWORD PTR [rsp], 0x0

"read_six_numbers"

<+39> sscanf 입력을 받음
그 전에 0x402683의 문자열을 열어보게 되면 정수 6개를 입력 받기 위해 문자열이 존재합니다.

입력받은 6개의 숫자는 $rsp에 4바이트 순서로 저장되어 있습니다.

<+30> cmp DWORD PTR [rsp], 0x0
둘이 다르다면 폭탄을 터뜨립니다. rsp의 경우에 입력값이 들어가 있기 때문에 첫 입력값은 0이되어야 합니다.

in[0] == 0

<+36> cmp DWORD PTR [rsp + 0x4], 0x1
in[1]의 경우에는 1과 동일해야 폭탄이 터지지 않습니다. 1과 동일해야 합니다.

in[1] == 1

<+51> 부터 rbp에다가 rsp + 16의 주소를 저장합니다. 즉, in[4]의 주소를 저장합니다.

그리고 [j + 1]을 넣고, [j]에 저장된 값을 더한 후에 [j + 2]의 값과 동일해야 합니다. 이러한 알고리즘으로 코드가 진행 됩니다.
in[6]의 값을 in[4], in[5]를 더해서 가져야 하니까 4번만 돌아서도 할 수 있습니다.

in[0] = 0
in[1] = 1
in[2] = (0 + 1)
in[3] = (0 + 1 + 1)
in[4] = (0 + 1 + 0 + 1 + 1)
in[5] = (0 + 1 + 1 + 0 + 1 + 0 + 1 + 1)

0개의 댓글