문제확인


안녕하세요. 대학 기말고사가 끝나고 방학이 시작하자마자 1주일동안 공부를 하지 않아 자책을 하다가 이제서야 다시 공부를 시작합니다. 이번엔 CodeEngn Advance문제 풀이를 시작하도록 하겠습니다. 역시 이전과 같이 질문은 받지않아요 >< 저도 모르는데 혹여나 질문하지마세요..그냥 직접해보거나 구글이 진리입니다.


문제를 확인하며 Basic에서도 같은 문제를 확인할 수가 있다. UPX로 패킹이 되어 있기에 언패킹을 실시한 후에 풀이를 시작하면 된다.



풀이


프로그램을 우선 실행 해보고 어떤 API가 사용되었을지를 유추하는 것도 하나의 중요한 실력이다. 그러므로 많은 분석을 해보아야 더 효율적인 분석이 가능해진다. 여기서 우리는 timeGetTime이 사용 된다는 것을 알고 있다. 따라서 timeGetTime을 따라가면 된다. 여기서 가장 수상한 CALL EDI가 우리에게 손짓하고 있다.


해당 지점으로 이동하면 아래와 같이 두번의 timeGetTime이 진행되는 것을 확인 할 수가 있다. 첫 호출을 통하여 EAX에 값을 반환받고 그 값을 ESI로 복사를 한 후에 두번째 호출을 통하여 그 반환값 EAX와 ESI를 비교 후에 점프문을 진행한다.


아래와 같이 해당 연산 값이 0x337B인지 확인을 한다. 이를 통하여 우리는 손 쉽게 값을 알 수가 있다. 




아래와 같이 Exe2Aut를 통하여 디컴파일을 한 후에 쉽게 확인을 할 수도 있다. 하지만 이러한 방법은 공부를 할 때는 사용하지 않는 것이 좋을 것 같다.




'Reversing > CodeEngn' 카테고리의 다른 글

CodeEngn Advance 04  (0) 2015.06.28
CodeEngn Advance 03  (0) 2015.06.28
CodeEngn Basic 20  (0) 2015.06.04
CodeEngn Basci 19  (0) 2015.06.03
CodeEngn Basic 18  (0) 2015.06.03