Key값을 구한 후, 성공메시지 부분을 HexEditor로 수정하는 문제입니다. 먼저 올리디버거를 이욯하여 Key값을
알아보겠습니다.
보통, 성공 메시지를 찾아서 분기점을 찾는 식으로 풀었는데 바로 보이네요…;;
그래도 찾는 방법을 알려드리겠습니다. 코드창 -> 마우스 우클릭 -> Search for -> All referenced text strings 를 클릭하시면
아래와 같이 문자열을 찾을 수 있습니다.
성공했을 경우의 문자열에서 흐름을 거꾸로 거슬러 올라가면 조건분기의 조건이 EAX의 값이 7A2896BF이면 성공임을 알수 있습니다.
계속 거슬러 올라가면 어떠한 처리를 하는 것을 알 수 있으며, GetDlgItemInt 라는 함수를 불러오는 것을 볼 수 있습니다.
이 함수는 대화상자 컨트롤의 텍스트를 읽어 정수형으로 변환해 반환해주는 함수입니다. 오로지 정수형 숫자만 가능하며 실패하면 0을 반환합니다. 때문에 key 값에 문자열을 넣으시면 EAX의 값이 0인것을 볼 수 있고 숫자만 입력했을 때는 입력한 숫자가 EAX 레지스트리에 들어간 것을 볼 수 있습니다.
이제 입력해야하는 키값을 찾아보겠습니다. 정석대로라면 코드를 분석하겠지만. 일단 어떻게 변하는지 보기 위해 비교문까지 실행했습니다.
그랬더니 EAX의 값이 그대로인 것을 볼 수가 있습니다. 이것으로 인해 입력한 값이 그대로 비교에 쓰인다는 것을 알 수 있습니다. 즉 키값은 비교값의 10진수 임을 알 수 있습니다. 이제 이 키값을 출력하도록 프로그램을 수정해보겠습니다.
우선 파일을 HexEditor 로 엽니다. 연 후에 올리디비거에서 확인한 Congratulation 부분을 검색하여 해당 위치로 이동합니다.
이제 이 부분을 수정하시면 되는데 출력했을 때 키값만 출력되도록 수정하셔야합니다. 즉, 키값을 적으신 후에 그 뒤에 데이터가 끝났다는 표시로 x00을 더 써줘야 합니다. 따라서 아래와 같이 변경하시면 됩니다.
앞에서 구한 키값과 이 수정한 부분의 주소를 합친 것이 정답입니다