CodeEngn Advance 2
문제 : 정답은 무엇인가?
일단 파일을 실행해보니 그림 4처럼 도스창에 패스워드를 입력 받는다. 아무 값이나 입력하고 엔터를 눌렀더니 자동으로 종료가 되었다. 별다른 패킹은 되있지 않고, C++로 코딩된 프로그램이다. 패스워드 입력함수 직전에 브레이크포인트를 걸고 패스워드엔 임의로 12345를 넣었다.
패스워드를 입력 받고 아래 내용처럼 64번반복하며 이런저런 연산을 하는데 처음엔 이부분이 핵심일 꺼라 생각하고 자세히 확인해 봤지만 그림 5 의 내용만 64번 반복해서 넣고 별다른 일은 인행되지 않은 걸로 판단했다.
계속 진행하다 004013C5 함수를 실행하면 계속 리턴이 되었고, 해당 함수 내부를 확인해 봤다.
보면 12345의 아스키 값들이 그림 5처럼 64개가 들어있는데 그 중 한부분의 31(아스키 정수1) 값을 43과 비교하고있다. 43은 영어 대문자 C의 아스키 값이고 CMP결과로 같지 않으면 리턴 하는 부분으로 바로 점프 하게 된다.
아래로 총 10번을 이런 식으로 비교,점프를 반복하고있고 매번 반복하는 값들은 “CRAAACKED!” 이다. 앞부분의 64번 반복연산 등은 그냥 함정 정도였던 것 같고 결국 문제는 이 함수를 찾아내서 16진수 아스키 값을 확인하는 문제였다.
43 = C 52 = R 41 = A 41 = A 41 = A 43 = C 4b = K 45 = E 44 = D 21 = !
프로그램을 실행해서 CRAAACKED! 를 입력하면 처음에 임의의 수를 입력할 때 와 달리 종료되지 않고 WELL DONE!라는 메시지박스가 출력된다.