CodeEngn basic 10
코드엔진 basic 10번 문제풀이
일단 파일을 detect it easy를 사용하여 열어보면 ASpack으로 패킹된 것을 알 수 있다.
이제 언패킹을 해야 하는데 언패킹은 PUSHAD -> 정상코드 복구 -> POPAD -> RETN(OEP)로 실행되기 때문에 PUSHAD를 한 뒤 ESP값에 접근하는 지점에 하드웨어 bp를 걸어서 POPAD이후 OEP로 넘어가기 전에 멈추게 설정하였다.
위 사진을 보면 PUSHAD를 F8로 진행한 뒤 ESP 레지스터를 Follow Dump 하여하여 메모리 주소를 확인한 후 하드웨어 브레이크 포인트를 걸었다. 이제 다시 F9를 눌러 실행해보면 아래와 같이 멈추는 구간이 보인다.
이 구간이 POPAD이후에 OEP로 점프하는 것을 알 수 있으므로 계속 실행하여 도착한 00445834가 OEP 인 것을 알 수 있다.
이제 덤프를 사용해 OEP를 EP로 설정하고 덤프 한 뒤 다시 실행해 보면 제대로 된 코드가 나오게 된다.
이제 All reference String에서 관련된 문자열이 있는지 찾아보면 아래와 같이 여러 문자열이 있는 것을 확인할 수 있다.
이제 Registered … well done! 이란 문자열을 클릭하여 들어간 뒤 분석해 보면 주소 4454D4에서 등록 성공으로 가는 분기점을 확인할 수 있으므로 플래그는 (OEP + 등록 성공 분기점 OP코드) 004458347555 인 것을 알 수 있다.