CodeEngn Basci 19

Kail-KM
|2015. 6. 3. 18:22

문제 확인








풀이


프로그램을 실행하면 몇 초후에 종료가 되는지를 구하는 문제이다. 그렇다면 시간과 관련된 함수가 있을 것이고 바로 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