물론 UPX압축형태는 UPX Uncompressor로 풀수 있다. (당연한이야기지만;)
하지만 우리는 손으로 직접풀기를 원한다.

손으로 직접푸는 압축을 MUC라고 부른다. (Manually UnPack)

OllyDBG로 타깃프로그램을 불러왔다. 경고가 뜬다. 내용을 읽어보니 타깃프로그램이 압축되어서 잘못된 정보가 보여질수 있다 라고 한다. 이런경우 100% 압축이다.

압축이 되어 있을경우 우선 PEID툴로 해당 타깃프로그램을 불러온다. 여기서 PEID 아래쪽 설명을 보면 압축방식이 나오는데 UPX 샬라샬라 라는 글자가 보인다.!! 자 이런경우 우리는 압축방식이 UPX로 되어 있는것임을 알수 있다.

이제 압축을 풀기위해 도구가 필요하다. OllyDBG, OllyDump, Lord PE, 그리고 방금 사용한 PEID

우선 OllyDBG로 타깃을 연다. 그러면 오류가 뜨고 계속 할래 말래 물어본다. 여기서 계속 진행함을 선택하면, 잘못된 코드 정보가 보인다. 그 이유는 압축된 코드를 다시 어셈블리어로 번역한것이라 잘못된 정보라는것이다. 여기에서 스크롤을 내려 가장 아래쪽 코드를 보자. 00,00,00,00 ........
무수히 많은 00이 보인다. 그럼 00이 시작되는 곳의 경계를 찾아보자.

UPX방식은 압축후에 압축전 진입포인트를 파일 마지막에 기록하는것 같다. 00은 파일에서 데이터가 없는부분이다. 자 그럼 파일 마지막의 00이 아닌곳을 찾고 코드를 보자.

JMP 명령이 보이는가? 00이 아닌코드들 위로 3줄만 훑어보면 바로 JMP명령이 보일것이다. UPX형태의 압축은 압축을 풀고나서 파일 마지막의 JMP문을 통해 압축푼 프로그램으로 접근한다. 그렇기에 JMP구문의 주소를 따라가면 되는것이다.

우선 파일 마지막의 JMP구문에 F2를 눌러 브레이크포인트(앞으로 브포)를 걸어준다. F9키를 누르면 브포 영역까지 순차적으로 진행한다. 진행중에 브레이크포인트로 잡아놓은 부분에 멈췄다.

우선 JMP루틴에서 멈췄으므로 따라가보자. F8 키를 누르면 한단계 진행할 수 있다. F7은 함수가 있을때 함수 안으로 따라 들어가기, F8은 함수를 따라 들어가진 않고 현재 블락에서 한단계 진행을 의미한다.

방금전 JMP루틴에서 한단계를 진행하고 나면 어떤 코드와 맞닥들이게 된다. 여기에서 마우스 오른쪽 클릭을 하자. 그러면 ADD-IN 항목을 찾을수 있는데 그곳에서 OllyDump를 선택한다. OllyDump 는 Tool 설명에서 이미 설명했다. 새로 뜨는 창에서 Rebuild Import 체크를 없애준다. 그리고 바로 덤프 시작.

설명을 하자면 우리는 압축루틴을 그냥 F9로 다 스킵해버리고 압축이 메모리에 풀린 어느 시점에 JMP명령을 브포걸어서 잡아놓고, 그 JMP명령을 따라 시작되는 압축풀린 프로그램의 첫 코드부터 쭈우우우욱 덤프해버린 것이다.

자 그럼 덤프해버린 프로그램을 exe파일로 저장했다면, 실행해보자. 띠딩! 오류가 난다. 물론이다. 프로그램 엔트리 포인트(진입점)을 찾지 못하기 때문이다. 그럼 이 진입점을 어떻게 찾아주느냐?

Lord PE 라는 프로그램을 사용하겠다. 이 프로그램역시 Tool 설명에서 설명했다.
이 프로그램으로 망가진 exe를 고쳐보자. 우선 Lord PE프로그램을 실행하고, Rebuild PE 버튼을 누르고, exe파일을 넣어보자. 메시지가 뜨면서. 완료..

exe파일을 실행해보자. 여기서 잘 실행된다면 우리는 압축된 프로그램을 압축 풀어버린것이다.



댓글을 달아 주세요

  1. Favicon of http://zweistar2.tistory.com BlogIcon BAB5  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 얻고 갑니다... 자료 퍼가도되죠??.. 출처남기겠습니다...

    2011.06.04 18:51

1 2 

글 보관함

카운터

Total : 1,733,625 / Today : 47 / Yesterday : 111
get rsstistory!