일단 문제를 보면 언패킹을 한 후 serial 값을 찾아내는 것이다.

 

 

먼저 실행파일을 그냥 실행시킨 후 아무 값이나 입력해봤더니 위와 같이 에러 메시지창이 뜨는 것을 확인할 수 있었다.

 

 

Immunity Debugger로 해당 파일을 열어 보았더니 위와 같은 코드로 시작되었다.

여기서 PUSHAD라는 명령어는 EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP 레지스터의 값을 스택에 PUSH해주는 명령어로 레지스터들의 값을 보관해야할 때 사용한다.

즉, 레지스터의 값을 백업하는 용도로 사용하며 스택의 데이터를 범용 레지스터에 채운다.

이 문제에서 PUSHAD 명령어의 의미는 패킹되어있음을 의미한다.

즉, 프로그램을 실행할 때 정상적으로 동작하기 위해 패킹을 풀어야 하기때문에 레지스터의 값을 스택에 저장해놓고 복구해주는 알고리즘이라고 생각하면 될 것 같다.

 

 

패킹을 풀기 전에 Exeinfo PE라는 툴을 이용해서 해당 파일을 열어봤더니 UPX라는 것을 확인할 수 있다.

 

 

언패킹을 해주는 툴을 다운로드 한 후 위와 같이 cmd 창에서 언패킹을 해주는 명령어 upx -d 실행파일을 입력해주었더니 파일을 언패킹할 수 있었다.

 

 

다시 Immunity Debugger로 파일을 열어보았더니 위와 같이 아까와는 다르게 시작하는 것을 확인할 수 있다.

이때 코드가 처음 시작되는 주소가 00401360이므로 이 값이 OEP라는 것을 알 수 있다.

OEP는 Original Entry Point로 암호화되거나 압축되어 있는 실행파일을 다시 원본 바이너리 상태로 되돌린 후 실행된 첫번째 명령어의 주소이다.

 

 

단축키를 이용하여 코드를 진행시켜보다가 위와 같이 두 개의 값을 비교하여 다른 메세지창을 띄워 주는 분기문을 발견할 수 있었고, 이때 주석 부분을 통해 시리얼 값으로 예상되는 AD46DFS547을 볼 수 있었다.

 

 

그래서 위와 같이 시리얼키를 입력해보았더니 성공 메세지 창이 뜨는 것을 확인할 수 있었다.

+ Recent posts