Codeengn Challenges = Basic 19 풀이.
19번이다.
음.............. 몇 밀리세컨트 후에 종료되는지 묻고 있다.
일단 밀리세컨트란 millisecond를 말하며 시간의 단위다.
ms라고 쓰고, 1ms는 1000분의 1초다.
즉 10ms = 100분의 1초. 100ms =10분의 1초. 1000ms = 1초.
다운로드를 해서 .exe 파일을 실행해본다.
??????????????????????? 이강석이란 사람이 CodeEngn.com을 만들었다는 메시지가 뜨고,
시간 지나니까 자동으로 닫힌다.
즉 창이 뜨고 닫히기까지의 시간을 ms 단위로 구해야 한다.
올리디버거를 실행한다.
첫 줄에 PUSHAD라는 명령어가 있는 것을 보아 UPX로 패킹되어 있을 확률이 높다.
PEID를 실행해본다.
박스친 곳을 유심히 보면 UPX로 패킹되어 있는 것을 볼 수 있다.
UPX패커를 이용해 언패킹해본다.
성공적으로 파일을 언패킹했고, 일단 파일을 열어본다.
정상적으로 패킹이 되었는지 실행해본다.
????????????????????????????????????????
실행을 하니까 위의 창이 뜨면서 프로그램이 강제종료된다.
문장들을 해석해보자면, 컴파일된 Autoit 스크립트다.
AV연구가들은 avsupport@autoitscript.com로 연락달라고 나와 있다.
일단 이 파일이 Autoit로 만들어졌다는 것이니, Autoit 전욕 디컴파일러를 써본다.
여러 Tool 중에 Exe2Aut라는 프로그램을 사용해본다.
실행하고 파일을 끌어다 놓으면, MsgBox함수의 소스가 등장한다.
Autoit에서 MsgBox는 msgbox(0,[창제목],[창 내용],옵션)의 형태로 존재한다.
옵션은 여러 옵션이 될 수 있는데, 아마 창이 닫히기까지의 시간인 거 같다.
일단 소스를 확인해보자. 메시지박스함수 다음의 코드를 보면 시간 관련 함수를 찾지 못한다.
즉 메시지박스함수 안에서 시간까지 처리하는 것으로 보인다.
즉 11.12는 닫히기까지의 시간이라고 볼 수 있다. 11.12ms는 너무 짧고, 11.12초인 거 같다.
ms으로 찾아야 하니 11.12 * 1000 = 11120ms
끝.................................................................Tool 사용이 처음에는 당황스러울 수 있지만,
그거 말고는 그럭저럭 나브지 않다.
'# Related site issues > CODEENGN' 카테고리의 다른 글
Codeengn Advance 1 (0) | 2018.05.17 |
---|---|
Codeengn Challenges = Basic 20. (0) | 2018.04.03 |
Codeengn Challenges = Basic 18. (0) | 2018.04.03 |
Codeengn Challenges = Basic 17. (0) | 2018.04.03 |
Codeengn Challenges = Basic 16. (0) | 2018.04.03 |