CodeEngn Advance #1

2013. 10. 11. 22:32 from Wargame

Level 01

프로그램은 밀리세컨드 후에 종료 되는가 
정답인증은 MD5 해쉬값(대문자) 변환 인증하시오 

 

UPX패킹이 되었으므로 패킹으로 풀어주고 디버깅을 진행합니다.

몇 밀리세컨드 후에 종료 되냐고 물어봤으므로 시간관련 함수를 찾아보니 timeGetTime 함수가 있었습니다

BreakPoint를 걸어주고 실행해본 결과 다음과 같은 코드에서 브포가 걸렸습니다.

위 코드를 봐보면 우선 timeGetTime함수를 호출해서 반환된 eax값을 esi에 넣어줬습니다. 그리고 00444C5F call near edi timeGetTime 함수를 한번 더 호출해준뒤 그 값이 전에 호출한 timeGetTime 값보다 크거나 같을 경우 jnb 명령을 통해 00444D38로 분기하게 됩니다. jnb를 따라가보면 다음과 같은 코드가 나옵니다.

eax esi의 차이를 구해 그게 ebx+4(337B)값보다 크거나 같으면 분기하고 그렇지 않으면 push 0A를 해준뒤 sleep함수를 호출합니다. 아마 ebx+4의 값이 정답 될 거 같아 337B값을 10진수로 변환해준 뒤 그 값을 md5해주니 인증이 되었습니다.


'Wargame' 카테고리의 다른 글

CodeEngn Advance #2  (0) 2013.10.11
Posted by xer0s :