문제 확인
풀이
프로그램을 실행하면 몇 초후에 종료가 되는지를 구하는 문제이다. 그렇다면 시간과 관련된 함수가 있을 것이고 바로 timeGetTime 함수이다. 하지만 저 여러개 중에서 어떠한 것을 봐야할지 난처하지만 명령어에 있어 CALL EDI라는 독특한 하나가 존재한다. 저 CALL EDI가 바로 중요한 포인트 인 것이다.
아래 사진과 같이 첫번째 timeGetTime을 통해서 EAX에 시간을 반환한다. 그리고 ESI에 그 값을 복사해주고 다시 timeGetTime 함수를 실행한다. 그리고 밑으로 쭉 내려가다 보면 SUB EAX, ESI 라는 부분이 있다. 바로 2번째-1번째시간인 것이다.
그리고 그 뺄셈을 한 값을 CMP EAX, DS:[EBX+4]와 비교를 하는 것으로, EBX+4의 값은 0x2B70으로 10진수로 변환 할 경우 11120으로 나타난다. 이번 문제와 같이 중요한 부분을 캐치 할 수 있도록 노력해야 할 것 같다.
쉬운 풀이
아래와 같이 Exeinfo PE를 통해서 프로그램을 열어보면 아래와 같이 11.12라는 시간이 쉽게 나와 있다. 하지만 이러한 방법은 리버싱 실력 향상에 도움이 되진 않을 것 같다.
'Reversing > CodeEngn' 카테고리의 다른 글
CodeEngn Advance 01 (0) | 2015.06.27 |
---|---|
CodeEngn Basic 20 (0) | 2015.06.04 |
CodeEngn Basic 18 (0) | 2015.06.03 |
CodeEngn Basic 17 (0) | 2015.06.02 |
CodeEngn Basic 16 (1) | 2015.06.02 |