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 SizeVirtual Size의 차이가 지나치게 큰 세션이 존재

 

5) 패킹 방법

 

- 원본코드를 복원시켜주기 위한 Unpacking Routine이 먼저 동작을 해야 하기 때문에 EntryPointUnpacking Routine을 가리키고 Unpacking Routine부터 실행

- Unpacking Routine을 통해서 Decompressing/Decoding 작업을 수행하여 원본파일의 세션에 맞게 저장

원본파일이 가지고 있던 API를 원활하게 호출할 수 있게 수정

- 원본코드의 EntryPoint(OEP)로 점프

 

 

2. 언패킹(Unpacking)

 

1) 정의

 

- 패킹했던 파일을 푸는 것

- 압축이 해제된 상태의 코드를 덤프뜨는 것

- 강력한 패커일수록 언패킹이 어려움

 

2) 언패킹 방법

 

- Unpacking이 끝나고 나면 원본 코드를 동작시키기 위해 OEP로 분기하기 때문에 OEP로 분기하는 지점의 코드를 찾아야 함

- Unpacking된 데이터와 코드를 메모리에서 덤프하게 되면 파일로 저장할 수 있음

- 메모리 상에서 덤프를 하게 되면 IAT Table이 바인딩된 상태로 파일이 저장되므로 이것을 수정해주는 작업을 해야 함

- 언패킹을 했음에도 파일이 제대로 실행되지 않는 경우 패커가 패킹과정에서 엔트리 포인트 부분의 코드를 다른 부분으로 옮겨두기 때문에 이때 옮겨진 코드를 복구해야 함

 

'2020 WINTER STUDY > CTF Study' 카테고리의 다른 글

[Reversing] Day 6_Anti-Debugging  (0) 2021.02.22
[Reversing] Day 5_CodeEngn Basic RCE L06  (0) 2021.02.19
[Reversing] Day 4_abex' crackme #2  (0) 2021.02.18
[Reversing] Day 3_suninatas 9  (0) 2021.02.18
[Reversing] Day 3_xcz.kr prob 9  (0) 2021.02.18

+ Recent posts