Ollydbg로 열었을 때 나오는 내용입니다. PUSHAD 는 모든 범용 레지스터들(EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI)를 스택에 올리는 명령어입니다. 저기서 조금 내려가다 보면 아래와 같이 POPAD와 JMP라는 무조건 분기하는 곳이 있습니다.
프로그램이 제대로 동작하기 위해서는 자신도 또한 Packing을 풀어 원래 자신의 코드로 돌아가야 하므로 JMP 05.00441270 과 같이 원래 코드로 이동하는 부분이 있으며 이동한 곳이 바로 OEP 가 됩니다.
참고로, POPAD 명령어는 PUSHAD와는 반대로 스택에 존재하는 값들을 레지스터로 POP 하는 역할을 합니다.
다음은, OEP로 이동하여 원래 코드가 보이는 화면이며 OllyDump 플러그인을 이용해 Dump를 뜨는 모습입니다.
다른 것은 특별한 경우가 아니면 건들 필요가 없지만, 아래의 Rebuild Import 같은 경우는 제대로 동작을 안해서 체크를 해제한 후 Dump를 뜨시기 바랍니다. 이후에 나오는 창에서 파일이름을 적고 저장을 하시면 됩니다.
언팩의 결과물로 생성된 파일을 바로 실행하면 오류가 날 겁니다. 이는 IAT를 복구하지 않아서 이며 LordPE 프로그램을 이용해 복구할 수 있습니다. 방법은 그냥 Drag & Drop!!!
다시 파일을 실행하면 정상적으로 실행되는 모습을 볼 수 있다. 문제 풀이는 간단하다. 저번에 했던 거 처럼
All referenced text strings로 들어와서 전체 문자열은 본 후 틀렸을 떄나 맞았을 경우 보게될 문자열이 있는 곳으로 가서 거꾸로
올라가 조건분기점을 찾고 그 위에서 비교하는 값을 찾으면 된다. 프로그램에서는 Name을 요구하지만 CodeEngn 문제에서는 그냥 시리얼만 찾으면 되므로 문자열을 검색했을 때 나오는 시리얼처럼 생긴 문자열을 그대로 입력하면 인증이 된다.