EASY7

UPX 패킹 / 언패킹 방법 본문

보안 공부/리버싱

UPX 패킹 / 언패킹 방법

E.asiest 2019. 11. 17. 18:17

패킹이란...?

패킹은 "실행 압축"이라고 표현할 수 있다.

실행 파일 내부에 있는 코드를 압축하여 평소에는 코드를 압축한 상태로 저장하고 있다가

파일을 실행하면 메모리에서 압축을 해제 시킨 후 파일을 실행시키는 기술이다.

 

-장점

1. 파일의 크기를 줄일 수 있다.(전 후 3~4배의 차이가 있다)

2. 크래커의 리버싱으로부터 보호할 수 있다.

 

 

UPX 패킹에 대해서..

1. UPX 툴 다운로드

환경 변수 등록하기

(PATH 맨뒤에 ';' 추가하고 디렉터리 추가)->윈도우 다시 시작

 

2. 패킹하기

upx -1 원본파일 : 원본파일을 패킹하여 덮어씌운다.

 

 

UPX0, UPX1, .rsrc 로 구성된다.

* Section UPX0 : 메모리에 로드된 후 압축코드가 해제 될 공간

* Section UPX1 : 압축코드가 저장되는 공간

 

 

3. 언패킹하기

upx -d 패킹된파일 : 패킹된 파일을 언패킹하여 덮어씌운다.

 

UPX 다운로드 링크 :

https://github.com/upx/upx/releases/tag/v3.95

 

수동으로 언패킹하기 (소프트웨어 BP 이용)

1. 패킹된 파일을 올리디버거에서 열기

패킹된 파일이라고 친절하게 알려주는 올리

2. 커서를 아래로 내리면서 "POPAD"명령어를 찾는다.

POPAD 명령어를 찾음.

3. POPAD를 클릭 -> F2(breakpoint 설정) -> F9(breakpoint까지 실행)

 

 

4. JMP 00441270 :  점프될 주소(00441270)이 패킹되기전 원래 EP로 점프하라

F7 두번 입력

원래 EP로 왔음.

5. ollydbg plugin인 OllyDump->Dump debugged process 클릭

Entry Point 를 OEP의 RVA(Relative Virtual Address)로 변경.

Dump 클릭.

파일 저장.

자동으로 덤프 떠주고 파일을 지정한 자리에 던져줌!

 

 

 

수동으로 언패킹하기 (하드웨어 BP이용)

1. 파일을 올리디버거로 연다.

2. PUSHAD를 실행(F8)

-레지스터 값들을 스택에 저장하는 것을 볼 수 있다.

-아래에 POPAD에서 해당 스택 값에 접근할 것이다.

3. 덤프 창에서 오른쪽 마우스->Go to -> Expressiong 클릭

 

4. 스택의 마지막 주소 기입 후 검색

5. 실제 스택이 저장되어있는 메모리가 나온다.

첫 바이트를 클릭->오른쪽마우스->break point -> hardware on access-> byte 클릭.

 

6. F9를 누르면 POPAD명령어까지 실행하는 것을 볼 수 있다.

 

그 이후는 위에 소프트웨어 BP를 이용한 방법과 동일하다...!!!

 

 

**Break point의 종류

1. BP(하드웨어 브레이크포인트)

-메모리 break point

-명령어 관계 없이 그 주소에 대해 읽기/쓰기/실행에 대해 BP

-최대 설정 개수가 4개라는 단점(x86 기준)

 

2. SB (= F2 break point)
-F8, going to return address 등에 쓰임.

 

 

 

 

 

'보안 공부 > 리버싱' 카테고리의 다른 글

ASPACK 패킹 / 언패킹 (진행)  (0) 2019.11.17
Exeinfo PE/PEiD 툴 사용법  (0) 2019.11.17
스택과 레지스터 실습 (010 editor, OllyDbg, IDA 이용)  (0) 2019.10.28
msdn  (0) 2019.10.28
010 editor 툴  (0) 2019.10.28
Comments