일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Volatility
- InsecureBank
- 안드로이드
- SQL Injection
- NTFS
- Openstack
- base64
- Suninatas
- 2018
- kibana
- igoat
- Strings
- foremost
- elasticsearch
- ESXi
- frida
- vulnhub
- XSS
- lord of sql injection
- diva
- otter
- beebox
- 인시큐어뱅크
- Docker
- CTF-d
- logstash
- 파이썬
- MFT
- ctf
- Reflected XSS
- Today
- Total
Information Security
패킹 본문
패커?
- 실행 파일 압축기
사용목적
- PE 파일의 크기를 줄이고자 하는 목적
- PE 파일 내부 코드와 리소스(string, API)를 감추기 위한 목적
프로텍터?
- 패킹 기술
- 리버싱을 막기 위한 다양한 기법 추가
- 원본 파일보다 크기가 커질 수 있음
-
패킹을 하기 전에는 Original excutable before packing의 상태로 실행파일이 존재한다.
text seciton에는 어셈블리언어가 실행될 수 있는 코드가 들어가 있는 부분으로 일반적으로 text section에 EP가 지정된다. -
패킹을 하면 해당 형태는 사라지고 Packed original code, Unpacking stub의 형태로 변하게 된다. Unpacking stub는 프로그램이 실행될 때 Packed original code의 압축을 풀게 된다. 따라서 EP의 위치는 Unpacking stub로 변경된다.
-
실행파일을 실행하기 위해서 메모리에 로드하면 Unpacking stub에 의해서 Packed original code의 압축이 풀리게 되어 Unpacked executable Load in Memory의 형태로 변하게 된다. 하지만 EP는 여전히 Unpacking stub를 가리키고 있고, 이 단계에서 Imports는 구성되지 않았다.
-
Unpacked executable 의 상태는 완전히 언패킹 된 실행파일이다. Unpacking stub에 의해서 Imports를 새로 구성하였고, EP는 text section을 가리키도록 변경되었다. 일반적으로 Unpacking stub을 완료하고 OEP로 실행 단계를 이동하게 되는데 이 명령어를 tail 점프라고 한다.
upx.exe 프로그램의 사용할 수 있는 옵션을 확인했다.
notepad.exe 프로그램을 패킹했다.
notepad.exe와 packing된 notepad.exe 크기를 보면 차이가 나는 것을 알 수 있다.
-d 옵션을 주면 언 패킹되는 것을 알 수 있다.
size가 동일한 것을 알 수 있다.
Stud_PE 프로그램을 이용해 Sections 항목을 보면 패킹된 것을 알 수 있다.
Stud_PE 프로그램을 이용해 Sections 항목을 보면 패킹 되지 않은 것을 알 수 있다.
Stud_PE 프로그램을 이용해 Signature 항목을 보면 UPX 패킹된 것을 알 수 있다.
Stud_PE 프로그램을 이용해 Signature 항목을 보면 Micorsoft Visual C++ 패킹되지 않은 것을 알 수 있다.