CodeEngn advance 04

코드엔진 advance 04번 문제풀이

프로그램을 실행해 보면 name과 시리얼 입력을 하는 창이 뜨고 name과 시리얼 값이 다르면 실패 메시지를 띄운다

ad4

PEiD로 프로그램을 확인한 결과 아래와 같이 아무것도 뜨지 않았다.

ad4-1

하지만 올리 디버거를 사용하여 파일을 열어보면 아래와 같이 구성되어 있었고 조금 더 분석을 진행해 보았다.

ad4-2

실행을 해보니 아래에서 주소 00401006으로 가는 점프문을 발견할 수 있었고 이 값이 OEP라는 것으로 파악하고 덤프를 사용해 EP값을 401000에서 401006으로 수정한 뒤 다시 파일을 실행 보았다.

ad4-3 ad4-4

EP를 수정하고 덤프 한 4_dump 파일을 열어보니 정상적으로 동작하는 것을 확인할 수 있었다.

이제 분석을 계속해서 하다 보면 주소 00401177에서 분기문 하나가 보이는데 이 분기문을 통하여 성공과 실패 메시지가 뜨는 것을 확인할 수 있었다. 이제 분기문을 찾았으니 분석을 해보면 분기문 바로 위의 lstrcmpA함수에서 내가 입력한 시리얼 값과 name에 관련된 시리얼 값을 비교하여 값이 같으면 eax에 0을 반환하고 분기문에서 cmp를 사용해 0과 같으면 성공 메시지를 띄우고 값이 다르면 실패 메시지를 띄우는 것을 확인했다. 분기문에 BP를 걸고 실행하게되면 위의 lstrcmp함수에서 내가 입력한 값과 name값이 CodeEngn일 때의 시리얼 값을 확인할 수 있다.

ad4-5

정답은 위에서 볼 수 있듯이 내가 입력한 12345와 비교하는 값인 LOD-59919-A0024900이다.

ad4-6