맨위로

이 글은 코드엔진(http://codeengn.com/) 에서 제공하는 리버스 엔지니어링 관련 다양한 문제들을 풀어보면서 리버스 엔지니어링을 공부하는 목적으로 작성되었습니다. 이글을 작성하는 필자도 리버스 엔지니어링에 흥미를 가지고 공부하는 입장이므로 잘못된 내용이 있을수도 있습니다. 잘못된 내용이 있다면 댓글이나 방명록에 알려주세요 :)

Challenges : Basic 06


Author : Raz0r

Korean : 

Unpack을 한 후 Serial을 찾으시오. 정답인증은 OEP + Serial 

Ex) 00400000PASSWORD 

English : 

Unpack, and find the serial. The solution should be in this format : OEP + Serial 

Ex) 00400000PASSWORD 

문제를 확인했으니 프로그램을 다운받아 실행해보도록 하겠습니다.

실행시켜보니 일반적인 시리얼 인증 프로그램과 같은 형태를 띠고있습니다. 혹시나 하고 임의의 값을 입력하고 Check Serial 을 눌러보니 역시나 "Wrong serial!!!" 이라는 메시지와 함께 에러를 발생시킵니다.

프로그램을 대충살펴봤으니 본격적으로 분석을 해보도록 하겠습니다. 분석하기전에 문제에서 말했듯이 이파일이 패킹되어있으므로 패킹에 대한 정보를 얻기위해 PEiD를 통해서 프로그램을 열어보겠습니다.

그 결과 UPX로 패킹되어있다는 정보를 알수있습니다. 05번 문제에서 올리디버거의 올리덤프를 이용한 언패킹 방법을 다루었으니 이번에는 UPX 를 간단하고 빠르게 해주는 도구를 이용해서 언패킹 해보도록 하겠습니다.

이 도구는 UPX 웹사이트(http://upx.sourceforge.net/)에서 다운로드 받을수있습니다.

많은 옵션들이 있지만 우리가 할것은 decompress 이기 때문에 우리는 -d 옵션을 통해서 언패킹 해주면된다.

혹시 옵션에 대해서 궁금해 하시는분들을 위해서 간단하게 알아보면 다음과 같습니다.

사용법 : upx [-123456789dlthVL] [-qvfk] [-o file] file..

Commands :

-1 ~ -9 : 압축을 빠르게 ~ 정확하게(높은 압축률)를 1 부터 9까지의 숫자로 선택한다. 

-d : 이 옵션을 주면 압축을 해제한다.

-l : 이 옵션을 주면 압축된 파일을 보여준다.

-t : 이 옵션을  주면 압축된 파일을 테스트한다. 

-V : 이 옵션을 주면 파일을 압축한 라이브러리에 버젼 정보를 알려준다.

-h : 이 옵션을 주면 더 자세한 도움말을 표시한다.

-L : 이 옵션을 주면 저작권 정보를 알려준다.

Options :

-q : 이 옵션을 주면 경고를 표시하지 않습니다.

-oFile : 이 옵션을 주면 패킹후에 파일을 다른이름으로 저장할수 있습니다. 

예)upx -d -o unpack.exe 06.exe -> 06.exe 파일이 언팩되어 unpack.exe로 저장

-f : 이 옵션을 주면 강제로 패킹합니다.

-k : 이 옵션을 주면 백업파일을 유지시킵니다.

file.. : (언)패킹할 파일이름 

위의 옵션을 이용해서 아래와 같이 입력하면 손쉽게 언패킹된 파일을 얻을수있습니다.

이제 언패킹을 했으니 본격적으로 분석하기 위해 올리디버거를 통해서 열어보도록 하겠습니다.

정확하게 언팩이 되었기때문에 OEP 주소(시작하는 위치)는 쉽게 찾을수 있습니다. 그럼이제 시리얼 주소를 찾아보겠습니다. 시리얼을 찾기위해서는 관련 코드가 있는 곳으로 이동해야되기때문에 저는 임의의 값을 입력하고 그값을 찾아 이동하는 방식으로 하겠습니다. 

먼저 위와 같이 ABCD 라는 임의의 값을 입력하겠습니다.

그후 Search For All Text Strings 를 이용해서 ABCD가 입력된 곳으로 이동해보도록 하겠습니다.

이동을 해보니 "ABCD" 라는 값과 "AD46DFS547" 이라는 값을 푸시한후 00401290 (비교 관련)를 호출하는것을 볼수있습니다. 확인을 위해 위의값을 시리얼에 입력해보니 아래와 같이 인증에 성공하는것을 볼수있습니다.


Posted by STIH

댓글을 달아 주세요