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이되어야 합니다.
<+36> cmp DWORD PTR [rsp + 0x4], 0x1
in[1]의 경우에는 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)