안녕하세요. 오늘은 basic rce level 19 문제를 풀어보겠습니다.

홈페이지로 들어가 basic rce level 19를 눌러주세요.

 

이 프로그램은 몇 밀리세컨드 후에 종료 되는지 묻고 있습니다.

여기서 밀리세컨드란 millisecond를 말하며 시간의 단위입니다. 줄여서 ms라고 쓰이며 1ms는 1000분의 1초입니다.

즉 10ms = 100분의 1초, 100ms = 10분의 1초 , 1000ms = 1초 입니다.

프로그램을 받아 실행시켜봅시다.

위와 같이 창이 뜨고 어느정도 시간이 흐르니 창이 자동으로 닫히는 것을 볼 수 있습니다. 즉 창이 뜨고 닫히기까지의 시간을 ms단위로 구해야하는 것이 문제인 것 같습니다. 올리디버그로 프로그램을 열어봅시다.

첫 줄에 PUSHAD명령어가 있는 것으로 보아 UPX로 패킹되어 있을 확률이 높습니다.

PEID로 확인해 봅시다.

예상대로 UPX로 패킹되어 있습니다. UPX패커를 이용해서 언패킹해줍시다.

성공적으로 파일을 언패킹 했습니다. 언패킹된 파일을 열어봅시다.

정상적으로 패킹이 되었는지 실행해 봅시다.

???? 실행을 하니까 위와 같은 창이 뜨면서 프로그램이 강제종료 됩니다. 해석을 해봅시다.

컴파일된 AutoIt 스크립트 입니다. AV 연구가들은 avsupport@autoitscript.com으로 연락주세요

라고 되어있는 것을 확인할 수 있습니다.  그러면 우리는 여기서 이 파일이 Autoit로 만들어졌다는 것을 알 수 있습니다. 그러면 간단합니다. Autoit 전용 디 컴파일러를 써 봅시다. Exe2Aut프로그램을 사용해봅시다.

실행하고 그대로 파일을 끌어다 놓으면 MsgBox함수의 소스가 나옵니다.

autoit에서 msgbox는

msgbox( 0, [창제목], [창 내용], 옵션) 입니다. 여기서 옵션은 여러 옵션이 될 수 있는데 제 생각엔 아마 창이 닫히기까지의 시간이라고 생각합니다. 그렇게 생각하는 이유는

소스를 보시면 아시다시피 메세지박스함수 다음의 코드를 보시면 시간 관련 함수를 찾지 못합니다. 즉 이 말은 메세지박스함수 안에서 시간까지 처리하는 것으로 볼 수 있습니다. 그렇기에 저기 나와있는 숫자 11.12는 닫히기까지의 시간이라고 볼수 있습니다.

11.12ms라고 하기엔 너무 짧으니 11.12초가 맞겠군요. 다만 ms로 찾아야 하니

11.12 * 1000 = 11120ms 가 되겠군요. 입력하러 가봅시다.

성공적으로 다음 문제가 뜹니다.

네 이것으로 문제풀이를 마치겠습니다.

 

'codeengn' 카테고리의 다른 글

codeengn - basic rce level 5  (0) 2016.08.02
codeengn - basic rce level 20  (0) 2015.10.02
codeengn - basic rce level 16  (0) 2015.10.02
codeengn - basic rce level 18  (0) 2015.09.25
codeengn - basic rce level 17  (0) 2015.09.25
Posted by englishmath
,