[문제 다운로드]
문제에 동봉된 client.exe를 열어보면 위와 같은 프로그램이 나온다. 불가리아어로 되어있는데 해석해보면 정품 인증 관련 프로그램이다. 2번은 시리얼 키를 뱉고 3번은 종료, 그리고 1번은 문제 서버가 열려있을 당시에는 인증을 시도하고 실패했다는 메시지를 출력하였다. 지금은 서버가 닫혀있어서인지 서버에 연결할 수 없다는 메시지가 나오던 것 같았다.
IDA로 열어보면 위와 같이 SUB_411450 부분이 프로그램의 메인인 것을 알 수 있게 된다.
Psudocode로 해당 함수를 살펴보면 맨 처음에 위와 같은 준비 단계를 확인할 수 있다. WSAStartup함수를 부르는 것을 볼 수 있는데 이것은 소켓 통신을 하기 위한 것이다.
종합하자면 211.222.58.18:8080에 접속하여 소켓 통신을 하는 것이다.
1번 메뉴를 선택했을 때의 코드 초반 부분이다. 저기서 sprintf 함수를 보면 v8 변수가 인자값으로 쓰이는 것을 확인할 수 있다.
위에서 v8을 확인해보면 sub_411B20(&Time);의 반환값을 가져오는데 sub_411B20은 시간을 반환하는 함수인 것을 확인할 수 있었다.
그리고 코드를 조금 더 분석해보면 서버에 GET 메시지를 보내는데 끝에 월, 일, 시를 붙여서 보내는 것을 알 수 있다. 결국 이 문제는 브루트포싱 문제이다.
위와 같은 Python 코드를 짜서 돌리니 특정 월,일,시에서 아래와 같은 메시지를 받았다.