CodeEngn advance 01
코드엔진 advance 01번 문제풀이
이 문제는 basic 19번 문제와 거의 비슷한 문제이다. UPX로 패킹되어있으며 안티 디버깅 기술을 사용하여 올리 디버거로 실행할 경우 에러 메시지를 띄운다. 이제 분석을 시작하기 전에 ida를 사용하여 안티 디버깅과 관련 된 함수가 있는지 찾아보면 아래와 같이 주소 0040E961에 IsDebuggerPresent가 있는 것을 확인 할 수 있다.
이제 올리디버거를 사용하여 패킹된 파일을 연 뒤 ida에서 찾은 주소로 가서 아래와 같이 주소 0040E969의 점프문을 점프하지 않도록 패치하고 저장하고 올리 디버거를 사용하여 패치된 파일을 연다. (원래 JNZ 이었지만 JZ로 변경하여 점프하지 않게 패치하였다.)
이제 파일 실행에는 문제가 없으므로 시간과 관련된 함수를 찾아보면 아래와 같이 timeGetTime이라는 함수를 찾을 수 있고 이 함수에 브레이크 포인트를 걸고 실행하면 주소 00444C44에서 멈추게 된다.
이제 f8을 사용해 천천히 실행해보면서 분석을 해보면 주소 00444D3A주소에서 값을 비교하는 것을 볼 수 있는데 값을 비교하여 eax값이 크거나 같으면 종료되는 것을 확인할 수 있기 때문에 종료되는 시간 값은 EBX+4에 있는 337Bh(13179)이고 13179를 md5로 암호화하면 DB59260CCE0B871C7B2BB780EEE305DB값이 되고 이 값이 플래그 값이다.