본문으로 바로가기

[D+9] 패킹&언패킹 (1)

category 해킹&보안/리버싱 2017. 4. 11. 20:53
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


4. 패킹&언패킹


1) 패킹


▣ Packing (실행압축)?

- 1번째 압축 : 파일 형태가 바뀜. 용량도 바뀜. 여러 파일들을 한번에 묶는 용도로도 사용.

- 2번째 압축 : 실행파일 형태(PE구조)의 파일만 압축. 원본파일과 동일한 형태의 PE구조 파일이 나옴. 용량은 줄어든다.

☞ 압축을 풀 필요없이 압축된 상태 그대로 실행가능. 압축전과 동일한 동작을 함.

- Packing과 암호화 : 둘 다 내용을 바꾸긴 하지만 암호화는 완전 다르게 기능도 바꿔버림. Packing은 실행시 기능이 전과 동일.


▣ Packing 목적

- 파일 용량 압축

- 안티 디버깅 & 리버싱 : 코드 분석이 어렵도록..

☞ 요즘은 상용프로그램은 잘 쓰지 않음. 악성코드 프로그램이 많이 사용.


▣ Packing 원리

- Packing된 파일을 실행하면 복호화 코드를 실행하며 메모리에 상주시키도록 메모리에 원래 프로그램 코드를 작성한다.

☞ 디스크상에 기록하는게 아니라 실행시 마다 생겼다 없어짐.

☞ 메모리상에 필요로하는 원본 코드가 생기기때문에 원본 프로그램과 동일한 기능을 수행.

- Packing된 파일은 해제(복호화) 때문에 원본보다 실행시간이 오래걸림. 


- 실제 패킹된 파일을 PEview로 열어보면 UPX0 섹션에서 Virtual Size는 7000인데 Raw Data의 크기는 0임을 확인할 수 있다.

☞ 이는 이 부분이 메모리상에서 쓰일 부분 즉, 복호화되는 A의 프로그램 코드가 여기에 적힐 것임을 유추가능하다.

- 복호화 코드는 실행권한이 있는 섹션에 존재할 것이다. UPX0는 복호화된 코드의 섹션이니 UPX1에 복호화코드가 있을 것이다.

☞ NT 헤더를 보면 PEP가 AE50이다. UPX1 섹션에서 AE50 번지의 밑으로는 복호화 코드임을 알 수 있다.

☞ 그럼 UPX1 섹션에서 AE50 번지 위로는 압축된 코드일 것이다.


2) 언패킹


▣ Unpacking

- 우선 패킹이 되어있는 파일인지를 체크함. (PEid, ExeInfoPE 등 툴 사용)

1. 툴로 unpack : 제일 정확하고 간단하고 빠름.

2. 툴을 구할 수 없을 때.

☞ 수동으로 풀어야함. 그냥 실행시켜서 복호화 코드가 끝나는 지점을 찾는게 중요!

☞ 수동 언패킹에서 가장 중요한 것은 OEP를 찾는 것임!








i2sec 대구지점 23기 수료생.

'해킹&보안 > 리버싱' 카테고리의 다른 글

[D+11] 안티 디버깅  (0) 2017.04.17
[D+10] 패킹&언패킹 (2)  (0) 2017.04.12
[D+8] PE 구조  (0) 2017.04.10
[D+7] 함수호출규약  (0) 2017.03.30
[D+6] 리버싱 소개 (6)  (0) 2017.03.28