Flag={C0MPU73R}

(리버싱) 밤랩 bomb - phase_6 본문

사이버 가디언즈

(리버싱) 밤랩 bomb - phase_6

땡관 2018. 8. 29. 23:13

#bomb 문제는 phase_1 부터 phase_6까지 6개의 문제로 이루어져있다

#1단계부터 6단계까지 모두 맞춰야 폭탄이 해체되는 형식이다


이번엔 문제의 마지막 phase_6이다


gdb로 열어본당



증말증말 너무 길다.. 


앞부분을 보니 이번에는 숫자 6개를 입력하는 문제같다


인자로 "1 2 3 4 5 6"을 넣고 분석해본다



첫번째 비교문을 돌려가며 보니 첫번째 인자에서 1을 빼고


eax와 비교하는데 그 값이 5와 같거나 작아야 통과된다


첫번째 인자 =< 6


첫번째 인자로 "1"을 넣었기 때문에 통과된다



다음 부분이다 r13d가 지금 "0"인데 1을 더하고


r13d가 6인지 비교해서 맞으면 점프한다


인자가 6개인 걸 보면 하나하나 다 비교해서 다 했을때 점프하는 것 같다



인자를 카운팅하는 r13d를 ebx에 넣는다


sxd는 뭐하는건지 모르겠고 ebx(1)을 rax에 넣는다


eax에 뭔가를 넣는다 2가 들어가는 걸 보니까 다음 인자값 인 것 같다 - eax(2)


첫번째 인자 rbp+0x0(1)과 eax(2)를 비교해서 틀리면 통과한다 


인자값이 다음 인자와 같으면 안되는 것 같다


값이 1~6이고 중복되면 안되면 답은 "1 2 3 4 5 6"을 특정 순서대로


넣어야하는 문제인 것 같다


--------------------스킵--------------------



증말 기나긴 인자 하나하나를 검사하는 감옥에서 탈출하고 왔다 허허


분석해본다


esi에 0을 넣는다 - esi(0)


ecx에 뭔가를 넣는다 들어간 값은 0x1이다 - ecx(1)


eax에 1을 넣는다 - eax(1)


edx에 뭔가 값을 넣는다 뭐가 들어갔는지 보니 0x79가 들어갔다 - edx(0x79)


ecx(1)와 1을 비교해서 더 크면 점프한다


그냥 +117로 점프한다


ecx가 첫번째 인자값(1)을 넣은 것 같다



rdx(0x79)를 어딘가에 넣는다


rsi(0)에 4를 더한다 - rsi(4)


rsi(4)을 0x18(26)과 비교해서 틀리면 +139로 점프


같으면 +159로 점프 


rsi에 4를 더하고 0x18(26)과 비교하려는거 보면


여기서도 인자 하나하나 돌리는 것 같다 인자 6개 딱맞음 ㅜㅜ (4*6=24)



또 돌아왔다 


ecx에 다음 인자값(2)를 넣는다 - ecx(2)


eax에 1을 넣는다 - eax(1)


edx에 뭔가 값을 넣는다 


ecx(2)를 1과 비교해서 더 크면 +106으로 점프


아니면 +117로 점프



rdx에 처음 rdx(0x79)의 다음 주소값에 있는 0x193를 넣는다


eax(1)에 1을 더한다 - eax(2)


eax(2)를 ecx(2)와 비교하여 틀리면 점프한다


인자가 바뀔 때 마다 rdx의 값이 바뀐다


인자가 "1"이었을 땐 0x79


인자가 "2"였을 땐 0x193


스킵해서 다 정리해보면


인자"1" - 0x79, 인자"2" - 0x193, 인자"3" - 0x96,

인자"4" - 0x88, 인자"5" - 0xd7, 인자"6" - 0x3a9


뒷부분까지 쭉 가보면 인자를 "A B C D E F"라고 보면


A > B > C > D > E > F 이렇게 되야 문제가 클리어된다


인자로 숫자 1부터 6까지 넣을 수 있는데 


그냥 순서대로 "6 5 4 3 2 1" 넣는게 아니고


각 숫자별 rdx값을 비교해서 큰 순서대로 넣는것이다



크기를 비교해보면 


937 > 403 > 215 > 150 > 136 > 121 이다 


그래서 답은 "6 2 5 3 4 1"이다


 

이렇게 bomb 문제를 phase_1 부터 phase_6까지 모두 해결했다


정말 정리하는게 너무 어렵다 허허 혼자 풀기는 쉽고 편한데


이제 secret_phase를 푸는 방법을 찾아봐야겠당