-
lvl 16Wargame/CodeEngn Basic RCE 2019. 1. 4. 15:34
문제
Name이 CodeEngn일때 Serial을 구하시오
풀이
→ 프로그램을 실행한다. Name 값을 "CodeEngn" 값을 입력한 후 비밀번호는 임의의 값 "1234"를 입력한 후 확인한다.
→ PEiD 도구를 이용하여 프로그램을 확인한 결과, "Dev-C++4.9.9.2" 인 것을 확인할 수 있다.
→ IDA 도구를 이용하여 디스어셈블한다. 메인함수를 쉽게 찾을 수 있으며 분석을 진행한다.
→ 문제를 풀기 위해선 비밀번호를 입력받은 후 성공/실패 메시지를 출력하는 분기부터 집중적으로 봐야하는 것을 추측할 수 있다. 따라서, 해당 부분의 코드를 찾은 후 bp를 설정한다.
→ 디버깅을 시작한 후, Name에 "CodeEngn" 값을 입력하고 비밀번호는 임의의 값 "1234"를 입력하여 진행한다. cmp eax, [ebp+var_3C] 명령어에서 break 되며, EAX 레지스터에는 사용자 입력값 "1234"의 16진수 값인 "4D2"가 입력된 것을 확인할 수 있다.
→ 따라서, 사용자 입력 값과 비교될 [ebp+var_3C]의 값이 어떠한 값인지 확인해보았으며, 값은 아래와 같다.
→ 해당 값은 리틀엔디안 방식으로 저장되었으므로 값은 "E4C60D97" 값이다. 이 값을 10진수의 값으로 변환한다.
→ 확인한 값을 입력하면 정상적으로 문제가 풀리는 것을 확인할 수 있다.
댓글