먼저 문제를 보면 Serial 값을 찾는 문제이다.
주어진 파일을 실행시켜보면 위와 같은 창이 뜨는 것을 확인할 수 있다.
Name이 CodeEngn이라고 했으니 그렇게 입력해주고 Serial 값은 아무거나 입력했더니 위와 같이 Try Again!이라는 메세지창이 뜨는 것을 확인할 수 있었다.
Immunity Debugger로 파일을 열어준 후 코드를 실행시킨 후 아까 위에서 실행했던 것처럼 Name에는 CodeEngn, Serial에는 1234를 입력한 상태이다.
위의 코드를 보면 00458831 부분에 EAX레지스터의 값과 스택에서 45B844 부분에 저장된 값을 비교하여 정답 여부를 확인해 주는 코드를 볼 수 있다.
여기서 두 값이 같다면 You cracked the ~~ 부분으로 넘어갈 것이고 다르다면 Try Again 부분으로 넘어갈 것이다.
먼저 EAX 레지스터를 확인해보면 위와 같이 1234라고 입력한 값이 저장된 것을 확인할 수 있다.
입력한 1234를 16진수로 변환한 수는 4D2이기 때문에 위와 같이 EAX레지스터에 4D2가 저장된 것을 확인할 수 있다.
또한 아까 EAX 레지스터와 비교하는 주소의 값을 확인하기 위해 Hex Dump 창에서 해당 주소(0045B844)로 이동해봤고 위와 같은 값을 확인할 수 있었다.
이때 덤프주소 값은 little endian 방식으로 읽어주어야 하고 이 방식은 낮은 주소에 데이터의 낮은 바이트부터 저장하는 방식을 의미한다. 이는 평소 숫자를 사용하는 선형 방식과는 반대로 거꾸로 값을 읽어주어야 한다.
또한, 아까 자료형이 DWORD였고 이는 4byte를 의미하므로 위의 값을 읽어보면 00 00 61 60이 된다.
즉, 위에서 본 값을 10진수로 바꿔준 값을 Serial에 입력하면 EAX레지스터에는 그 값이 16진수로 바뀌어 저장될 것이므로 CMP를 해주었을때 점프하지 않고 바로 다음 코드를 실행시킬 것이다.
위와 같이 계산기로 6160을 10진수로 바꿔주면 24928이라는 것을 확인할 수 있다.
프로그램을 다시 실행한 후 위와 같이 Serial 값을 입력해주었더니 성공창이 뜨는 것을 확인할 수 있다.
'2020 WINTER STUDY > CTF Study' 카테고리의 다른 글
[Reversing] Day 9_레지스터 (0) | 2021.02.25 |
---|---|
[Reversing] Day 9_CodeEngn Basic RCE L07 (0) | 2021.02.25 |
[Reversing] Day 7_CodeEngn Basic RCE L09 (0) | 2021.02.24 |
[Reversing] Day 7_CodeEngn Basic RCE L04 (0) | 2021.02.24 |
[Reversing] Day 6_CodeEngn Basic RCE L02 (0) | 2021.02.22 |