UPX
1. 개요
UPX는 UCL 데이터 압축 알고리즘을 사용하여 다양한 실행 파일 형식을 압축하는 데 사용되는 오픈 소스 실행 파일 압축기이다. UCL은 압축 해제 코드가 작고 메모리 할당이 필요하지 않도록 설계되었으며, 대부분의 플랫폼에서 LZMA 알고리즘을 사용할 수도 있다. UPX는 인플레이스 방식과 임시 파일을 이용한 압축 해제를 지원하며, 윈도우, 리눅스, macOS, DOS 등 다양한 운영 체제와 실행 파일 형식을 지원한다.
이미지 준비중입니다.
| 출시일 | 1998년 5월 26일 |
|---|---|
| 최신 버전 | 4.2.2 |
| 최신 버전 출시일 | 2024년 1월 3일 |
| 프로그래밍 언어 | C++ 어셈블리어 |
| 운영 체제 | 윈도우 리눅스 macOS DOS Atari TOS |
| 플랫폼 | i386 MIPS AMD64 ARM PPC m68k |
| 언어 | 영어 |
| 장르 | 실행 압축 |
| 라이선스 | GPL (압축된 실행 파일은 제외) |
| 웹사이트 | UPX 공식 웹사이트 |
| 설명 | UPX (Ultimate Packer for eXecutables)는 실행 파일 압축 소프트웨어이다. |
|---|
-
압축 소프트웨어 -
WinRAR
WinRAR은 RAR 및 ZIP 등 다양한 파일 형식을 지원하며, 압축 파일 복구, 강력한 암호화 등의 기능을 제공하는 셰어웨어 압축 유틸리티이다. -
압축 소프트웨어 -
ARJ
ARJ는 다양한 소프트웨어 유틸리티에서 압축 해제가 가능한 파일 포맷으로, macOS에서는 독립 실행형 유틸리티를 통해 압축을 해제할 수 있다. -
자유 압축 소프트웨어 -
Gzip
gzip은 DEFLATE 알고리즘을 기반으로 데이터를 압축하는 파일 형식으로, 매직 넘버, 헤더, 압축된 페이로드 등을 포함하며, 단일 파일 압축에 주로 사용되고 HTTP 압축 및 다양한 응용 분야에서 활용된다. -
자유 압축 소프트웨어 -
Bzip2
Bzip2는 줄리안 세워드가 개발한 자유 소프트웨어로, 버로우즈-휠러 변환, MTF 변환, 허프만 부호화 등의 압축 기법을 사용하여 gzip이나 ZIP보다 높은 압축률을 제공하지만 압축 속도가 느린 블록 정렬 압축 알고리즘이다. -
공식 웹사이트에 알 수 없는 변수를 사용한 문서 -
브루클린 미술관
브루클린 미술관은 1823년 브루클린 견습생 도서관으로 시작하여 현재 약 50만 점의 소장품을 보유한 뉴욕 브루클린 소재의 미술관으로, 다양한 분야의 예술 작품을 전시하며 특히 아프리카 미술과 여성주의 미술에 대한 기여가 크다. -
공식 웹사이트에 알 수 없는 변수를 사용한 문서 -
광주지방기상청
광주지방기상청은 광주광역시와 전라남도 지역의 기상 예보, 특보, 관측, 기후 정보 제공 등의 업무를 수행하는 기상청 소속 기관으로, 1949년 광주측후소로 설치되어 1992년 광주지방기상청으로 개편되었으며, 기획운영과, 예보과, 관측과, 기후서비스과와 전주기상지청, 목포기상대를 두고 있다.
2. 압축
UPX는 주로 UCL이라는 데이터 압축 알고리즘을 사용하며, 이는 NRV(Not Really Vanished) 알고리즘의 일부를 오픈 소스로 구현한 것이다. 2.90 베타 버전부터 LZMA를 사용할 수 있으나, 16비트 구형 컴퓨터에서는 압축 해제 속도가 느려 기본적으로 비활성화되어 있다. (강제로 사용하려면 `--lzma` 옵션을 사용해야 한다.) 버전 3.91부터 UPX는 윈도우 플랫폼에서 64비트(x64) PE 파일도 지원하는데, 이 기능은 현재 "실험적"으로 선언되어 있다.
2.1. UCL (NRV) 알고리즘
UPX는 UCL이라는 데이터 압축 알고리즘을 사용하며, 이는 NRV(Not Really Vanished) 알고리즘의 일부를 오픈 소스로 구현한 것이다.
UCL은 압축 해제 프로그램(디컴프레서)이 수백 바이트의 코드로 구현될 수 있을 정도로 단순하게 설계되었다. UCL은 압축 해제를 위해 추가적인 메모리 할당이 필요하지 않다. 이는 UPX로 압축된 실행 파일이 일반적으로 추가 메모리를 필요로 하지 않는다는 상당한 이점을 제공한다.
2.2. LZMA 알고리즘
UPX는 2.90 베타 버전부터 LZMA를 지원한다. LZMA는 더 높은 압축률을 제공하지만, 16비트 구형 컴퓨터에서는 압축 해제 속도가 느려 기본적으로 비활성화되어 있다. 16비트 환경에서도 `--lzma` 옵션을 사용하여 LZMA 압축을 활성화할 수 있다.
3. 압축 해제
UPX는 인플레이스(in-place) 방식과 임시 파일을 이용한 압축 해제 방식을 모두 지원한다. 수정되지 않은 UPX 압축은 백신 소프트웨어 스캐너를 통해 압축이 해제되는 경우가 많다. UPX는 자체적으로 압축된 미수정 실행 파일의 압축을 해제할 수 있는 기능도 내장하고 있다.
3.1. 인플레이스(In-place) 방식
UPX는 실행 파일을 메모리에서 직접 압축 해제하는 인플레이스(in-place) 방식을 지원한다. 이 방식은 메모리 효율성이 높고 운영 체제 환경 설정을 유지할 수 있다는 장점이 있지만, 모든 플랫폼에서 지원되지는 않는다. 다른 플랫폼에서는 임시 파일로 압축을 해제하는 방식을 사용한다.
3.2. 임시 파일 방식
UPX는 실행 파일을 압축 해제하기 위해 두 가지 방식을 지원하는데, 그 중 하나가 임시 파일 방식이다. 이 방식은 인플레이스(in-place) 방식이 지원되지 않는 플랫폼에서 사용된다. 임시 파일 방식은 실행 파일을 임시 파일로 압축 해제한다. 이 방식은 추가적인 오버헤드와 다음과 같은 단점들을 수반하지만, 모든 실행 파일 형식을 압축할 수 있게 해준다.
* suid와 같은 특수 권한은 무시된다.
* `argv[0] `은 의미가 없어진다.
* 실행 파일의 여러 실행 인스턴스가 공통 세그먼트를 공유할 수 없다.
수정되지 않은 UPX 압축은 종종 백신 소프트웨어 스캐너에 의해 감지되어 압축 해제된다. UPX는 또한 자체적으로 압축된 수정되지 않은 실행 파일을 압축 해제하는 내장 기능을 가지고 있다.
4. 지원 포맷
4.1. 윈도우
UPX는 PE (EXE 및 동적 링크 라이브러리 파일) 형식을 지원하며, 지원 대상은 다음과 같다.
* ARM (Windows CE)
* 32비트 x86 (Windows 데스크톱)
* 64비트 x86-64 (Windows 데스크톱, 여전히 실험적)
* RTM32 (보랜드 C/파스칼 컴파일러에서 생성됨)
.NET Framework에서 실행되도록 설계된 CIL 코드가 포함된 PE 파일은 현재 지원하지 않는다.