CodeEngn basic 12
코드엔진 basic 12번 문제풀이
프로그램을 실행하면 키를 입력하는 창이 나오고 check 버튼이 있으므로 올바른 키를 입력하면 성공 메시지 창이 뜨는 구조인 것 같다. 올리디버거를 사용하여 파일을 열고 실행하다 보면 EP주소인 401000에서 멈추는 것을 볼 수 있다.
아래로 내리면서 확인해 보면 성공 메시지를 띄우는 MessageBoxA함수가 보이고 그 위에는 알 수 없는 문자열이 보이고 그아래 40107D주소에 eax를 7A2896BF와 비교하여 점프하는 분기점이 있음을 확인할 수 있다.
위에서 7A2896BF를 키 값으로 입력한 뒤 Check를 눌렀지만 아무런 반응이 없기에 다시 한번 확인을 해보니 GetDlgItemInt함수에 의해 정수 값이 아닌 문자 형태는 eax 0 값을 반환하는 것을 확인할 수 있었다. 그럼 키 값이 전부 정수 형태라는 소리니까 다시 돌아가서 숫자 하나하나 입력해보며 확인한 결과 입력 값 10을 받으면 eax A를 반환하는 것을 알 수 있었다. 그러니 생각해보면 10진수 숫자를 입력하면 16진수로 변환한다는 것이다. 그러니 위의 키 값인 7A2896BF를 10진수 정수로 변환한 2049480383 값이 키 값인 것을 확인했고 다시 프로그램을 실행시켜 입력해보니 정확히 맞았다. 이제 성공 메시지에 키 값이 나타나게 수정을 해보자.
HxD를 사용해서 프로그램을 연 뒤 밑으로 내려보면 아래와 같이 성공 시 출력되는 메시지 문자열을 볼 수 있는데 이곳을 키 값으로 바꿔주면 키 값 입력 성공 시 키 값이 나타나게 할 수 있다.
플래그 값은 키값 + 수정된 주소 값(0D3B ~ 0D45(문자열 끝을 의미하는 0포함)) 이니 20494803830D3B0D45 값이 플래그인 것을 알 수 있다.