Level 01 이 프로그램은 몇 밀리세컨드 후에 종료 되는가 |
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 |
---|