CodeEngn advance 01

코드엔진 advance 01번 문제풀이

이 문제는 basic 19번 문제와 거의 비슷한 문제이다. UPX로 패킹되어있으며 안티 디버깅 기술을 사용하여 올리 디버거로 실행할 경우 에러 메시지를 띄운다. 이제 분석을 시작하기 전에 ida를 사용하여 안티 디버깅과 관련 된 함수가 있는지 찾아보면 아래와 같이 주소 0040E961에 IsDebuggerPresent가 있는 것을 확인 할 수 있다.

ad1

이제 올리디버거를 사용하여 패킹된 파일을 연 뒤 ida에서 찾은 주소로 가서 아래와 같이 주소 0040E969의 점프문을 점프하지 않도록 패치하고 저장하고 올리 디버거를 사용하여 패치된 파일을 연다. (원래 JNZ 이었지만 JZ로 변경하여 점프하지 않게 패치하였다.)

ad1-1

이제 파일 실행에는 문제가 없으므로 시간과 관련된 함수를 찾아보면 아래와 같이 timeGetTime이라는 함수를 찾을 수 있고 이 함수에 브레이크 포인트를 걸고 실행하면 주소 00444C44에서 멈추게 된다.

ad1-2 ad1-3

이제 f8을 사용해 천천히 실행해보면서 분석을 해보면 주소 00444D3A주소에서 값을 비교하는 것을 볼 수 있는데 값을 비교하여 eax값이 크거나 같으면 종료되는 것을 확인할 수 있기 때문에 종료되는 시간 값은 EBX+4에 있는 337Bh(13179)이고 13179를 md5로 암호화하면 DB59260CCE0B871C7B2BB780EEE305DB값이 되고 이 값이 플래그 값이다.