Baby Artist

Adult Artist

문제 파일을 다운로드받고, 리눅스 환경에서 실행시켰다.

Untitled

입력 한 개 받고, 그냥 끝나는 프로그램이였다.

분석하기 위해 IDA로 파일을 열어보았다.

Untitled

보면 Assembly로 이루어진 것을 알 수 있다.

입력을 받고 4바이트씩 입력된 문자열을 끊어서 총 100번 확인하는 코드였는데, 가장 중요해 보이는 call sub_80491F6 의 함수로 들어가보았다. 뭔가 심오한 부분이 있어 바로 디컴파일을 하려고 시도해 보았다.

Untitled

함수가 너무 커서 디컴파일을 할 수 없었다. 하지만 얼추 알 수 있는데, 100개의 경우에 대해 점프 테이블에서 조건 분기를 하는 것을 알 수 있었다. 이를 바탕으로 100개의 블록에 대해 각각 역연산을 돌리면 되는데, 총 약 95만번의 역연산을 손으로 돌리기엔 무리가 있어 오토리버싱 코드를 짰다.