1. 패킹(Packing)

 

1) 정의

 

- 실행압축

- 실행(PE) 파일을 대상으로 파일 내부에 압축해제코드를 포함하고 있어 실행 시 메모리에서 압축을 해제 시킨 후 실행시키는 기술

- 코드 분석을 통한 프로그램의 악용을 막는 목적으로 활용

 

2) 종류

 

 Compressor

- 파일의 사이즈를 줄여 배포를 쉽게 하기 위해 사용하는 packer

- 악성코드에서 많이 활용

- Petite, ASPack, MEW, FSG, UPX 

 

 Protector

- 원본 코드를 보호하기 위해 사용하는 packer

- 주로 상용 프로그램이나 온라인 게임 파일을 패킹할 때 많이 활용

- 코드 가상화 기법과 코드 난독화 기법을 많이 활용

- Themida, Yoda, ASProtect, armadilo 

 

3) 패킹을 하는 이유

 

- 데이터 압축

- 악성코드에서는 작은 용량으로 빠르고 많이 퍼지게 하며 분석이 불가능하게 하기 위한 목적

- 데이터 보호

- 취약하게 나타날 수 있는 중요정보를 포함한 어플리케이션에 대한 노출 최소화

 

4) 패킹된 파일의 특징

 

- Section Name이 일반적이지 않거나 패커의 이름을 가짐

- Code Section은 보통 첫번째 Section이지만, 패킹 시 첫째가 아닐 수 있음

- Code Section은 보통 EP를 가리키므로 MEM_Excute권한을 가지지만, 패킹 시 그렇지 않을 수 있음

- Unpacking하면 Packing된 데이터가 저장되어 있던 세션이 비어있거나 Raw Size Virtual Size의 차이가 지나치게 큰 세션이 존재

 

2. UPX를 이용한 패킹 실습 (notepad.exe)

 

먼저 UPX(UPX307w) 패커를 이용했고, notepad(32bit).exe로 패킹을 진행했다. 

 

 

위와 같이 UPX가 실행되는 것을 확인할 수 있다.

 

 

위와 같은 명령어를 입력하여 notepad_org.exe (notepad 원본) 파일을 notepad_upx.exe라는 이름으로 패킹했다.

Packed 1 file 이라는 문구가 떴으므로 패킹에 성공한 것을 알 수 있다.

 

 

위와 같이 해당 파일에 잘 저장된 것을 확인할 수 있고, 원본에 비해 패킹된 파일의 용량이 적어진 것을 확인할 수 있다.

 

 

notepad_org.exe

 

notepad_upx.exe

 

PEiD라는 툴을 이용하여 두 파일을 비교해보면 section부터 다르다는 것을 확인할 수 있다.

원본 파일은 .text이고, 패킹된 파일은 UPX1으로 확인된다.

 

notepad_org.exe

 

notepad_upx.exe

 

PEview로도 두 파일을 비교해보면 위와 같이 역시 구조가 다른 것을 확인할 수 있다.

 

3. tool 없이 언패킹하기

 

 

툴 없이 언패킹을 진행하기 위해 x32dbg를 이용하여 패킹된 파일을 열어보았다.

 

 

Ctrl+F8을 눌러 step over을 하다보면 반복되는 LOOP 아래 코드를 찾을 수 있다.

메모리의 변화가 나타나는 것을 통해 무언가 압축을 해제하여 데이터를 쓰고 있다는 것을 알 수 있다.

 

 

위와 같이 010141A3을 보면 pop esi를 찾을 수 있고, 이곳에 breakpoint를 걸어준 후 F9를 누르면 압축 해제가 된다.

 

 

압축 해제 후 F8로 실행하다 보면 위와 같은 LOOP를 만나게 된다.

이는 cmp 명령어로 값을 계속 비교하며 무결성 체크를 해주는 역할을 한다.

 

 

다시 F8로 진행을 하다 보면 위와 같이 IAT 테이블을 만드는 작업을 하는 LOOP를 발견할 수 있다.

 

 

위의 LOOP를 탈출한 후 좀 더 진행시켜보면 popad 명령어를 통해 스택을 정리하고 jmp 하는 코드를 발견할 수 있다.

이는 UPX에서 사용하던 스택 정보를 원래대로 돌리기 위한 작업이다.

 

 

점프를 하고 난 후의 코드를 확인해보면 위와 같은 코드를 확인할 수 있는데, 이는 패킹 전의 코드와 똑같은 것을 확인할 수 있다.

 

notepad_upx.exe

 

notepad_org.exe

 

 

 

 

'2021-2 STUDY > Reversing Study' 카테고리의 다른 글

Week03_Dreamhack rev-basic-4, rev-basic-5, rev-basic-6  (0) 2021.10.02
Week03_IAT, EAT  (0) 2021.10.02
Week02_Dreamhack rev-basic-2, rev-basic-3  (0) 2021.09.25
Week02_PE 파일 구조  (0) 2021.09.25
Week01_abex' crackme #1  (0) 2021.09.11

+ Recent posts