CodeEngn advance 03
코드엔진 advance 03번 문제풀이
프로그램을 실행하면 아래와 같이 name과 시리얼을 입력하는 칸이 있는 창이 나타난다.
Name에 관련된 시리얼 값이 틀릴 경우 실패 메시지를 띄우는 것도 확인하였다.
PEiD로 프로그램을 살펴본 결과 패킹은 되어있지 않았다. 이제 올리 디버거를 사용하여 프로그램을 열고 프로그램을 분석하다 보면 아래와 같이 주소 00401120의 GetDlgItemTextA에서 반환 받은 내가 입력한 name 값의 글자수를 3과 비교하여 크거나 같을 경우 점프하는 분기문을 볼 수 있는데 이를 통해 name의 글자수가 3보다 작을 경우 실패 메시지를 띄운다는 것을 확인할 수 있었다.
프로그램을 더 분석해보면 아래와 같이 주소 00401177에 있는 wsprintfA에서 00403284버퍼에 3265754874라는 값을 넣고 널 문자를 뺀 글자 수를 반환한 뒤 주소 00401196에서 내가 입력한 시리얼 값과 비교한 후 같으면 eax에 0을 반환하고 0040119C에 있는 IDIV EAX에서 0으로 나누는 오류가 발생하는데 오류를 처리할 때 발생하는 예외처리 메시지가 바로 성공 메시지임을 확인하였다.
플래그는 3265754874인 것을 확인하였다.