CodeEngn basic 17
코드엔진 basic 17번 문제풀이
일단 PEiD로 프로그램을 보면 패킹은 되어있지 않은 것을 확인할 수 있다.
이제 프로그램을 한번 실행해보면 name과 시리얼을 입력하는 창이 하나 뜨는 것을 볼 수 있고 키 값에 관한 name을 찾는 문제이고 알파벳 또는 숫자인 한자리 문자라는 것을 힌트로 알려 줬으므로 키 값을 입력하고 1을 입력해보니 Please Enter More Chars…이라는 문자가 뜨는 것을 볼 수 있다.
이제 올리디버거로 프로그램을 실행한 뒤 F9로 프로그램을 계속 실행하고 EP인 0045C714에서 멈춘 뒤 All referenced Strings를 사용해 위에서 확인한 문자열들을 찾으면 아래와 같이 확인할 수 있다.
이제 문자열을 클릭하여 해당 구간으로 가서 분석을 해보면 아래와 같이 입력한 name의 글자 수를 계산해 3자리 보다 작으면 Please Enter More Chars… 문자열을문자열을 1E(30) 보다 크면 Please Enter Not More Then 30 Chares…를 나타내는 것을 확인할 수 있었다.
우리가 원하는 name 값은 한자리 이므로 0045BB27주소의 JGE문을 JMP문으로 변경하여 건너뛰게 변경한 뒤 진행하였다. 다시 분석해가면서 아래로 내려오면 주소 0045BB9B의 call 0045B850에서 name입력값을 키 값과 동일한 형태로 변경하는 것을 알 수 있고 주소 0045BBD4의 call 00404C3C에서 변경된 name값과 키 값을 비교하는 것을 알 수 있었다.
원래라면 CALL 0045B850의 내용을 분석하여 입력된 값이 어떻게 변하는지 알아야 풀 수 있겠지만 시간이 너무 많이 걸리고 복잡하므로 힌트로 제공받은 내용에서 알파벳 또는 숫자 한 문자가 정답이라고 하였으므로 0-9, a-z, A-Z까지 문자를 대입하면서 찾아보면 F를 입력하였을 때 성공 메시지가 나오는 것을 볼 수 있었고 MD5로 변환하여 제출하라고 하였으므로 정답은 F를 MD5 암호화한 800618943025315F869E4E1F09471012가 플래그 값임을 알 수 있었다.