개요
UPX는 여러 실행 파일 형식을 위한 실행 파일 패커로, UPX 설치, UPX로 압축된 파일 식별 및 압축 해제 방법을 정리했습니다.
upx
UPX Tool Install
- UPX 툴은 debian 및 ubuntu 환경에서 아래 명령어를 통해 간단하게 설치 가능합니다.
apt-get install upx
UPX Pack 식별방법
UPX Pack 유무는 아래 두가지 방법으로 확인 가능합니다.
- xxd 명령어를 통해 바이너리 헤더 내 “UPX!” 시그니처 존재 여부로 판별합니다.
- UPX Tool 의
-l
옵션을 사용하여 Pack 유무를 확인합니다.
xxd 명령어를 통한 확인
바이너리 헤더 내 “UPX!” 시그니쳐가 존재하는지 확인합니다.
UPX 압축 시 생성되는 UPX! 시그니처를 “XXX!” 처럼 임의 문자로 변경해도 정상적으로 실행 및 동작하지만, 기존 UPX Tool을 이용한 UnPack이 불가하도록 하거나 악성코드 탐지가 우회되는 경우도 있다고 합니다.
$ xxd flag | head
00000000: 7f45 4c46 0201 0103 0000 0000 0000 0000 .ELF............
00000010: 0200 3e00 0100 0000 f0a4 4400 0000 0000 ..>.......D.....
00000020: 4000 0000 0000 0000 0000 0000 0000 0000 @...............
00000030: 0000 0000 4000 3800 0200 4000 0000 0000 ....@.8...@.....
00000040: 0100 0000 0500 0000 0000 0000 0000 0000 ................
00000050: 0000 4000 0000 0000 0000 4000 0000 0000 ..@.......@.....
00000060: 04ad 0400 0000 0000 04ad 0400 0000 0000 ................
00000070: 0000 2000 0000 0000 0100 0000 0600 0000 .. .............
00000080: d862 0c00 0000 0000 d862 6c00 0000 0000 .b.......bl.....
00000090: d862 6c00 0000 0000 0000 0000 0000 0000 .bl.............
000000a0: 0000 0000 0000 0000 0000 2000 0000 0000 .......... .....
000000b0: fcac e0a1 5550 5821 1c08 0d16 0000 0000 ....UPX!........
해당 ELF 바이너리는 UPX로 패킹된 바이너리 데이터를 포함하고 있음을 나타냅니다.
upx -l 옵션으로 확인
-l
옵션을 통해 압축 효율 및 포맷 상태를 확인할 수 있습니다.
$ upx -l ./flag
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2017
UPX 3.94 Markus Oberhumer, Laszlo Molnar & John Reiser May 12th 2017
File size Ratio Format Name
-------------------- ------ ----------- -----------
883745 -> 335288 37.94% linux/amd64 ./flag
마찬가지로 해당 ELF 바이너리는 UPX로 패킹된 바이너리 데이터를 포함하고 있음을 나타냅니다.
upx -d 옵션을 이용한 UnPack
-d
옵션을 통해 UPX UnPack이 가능합니다.-o
옵션을 통해 UnPack 후 생성될 파일명을 설정합니다.
$ upx -d flag -o flag.elf
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2017
UPX 3.94 Markus Oberhumer, Laszlo Molnar & John Reiser May 12th 2017
File size Ratio Format Name
-------------------- ------ ----------- -----------
883745 <- 335288 37.94% linux/amd64 flag.elf
Unpacked 1 file.
$ ls
bof bof.c flag flag.elf test.py
$ upx -l ./flag.elf
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2017
UPX 3.94 Markus Oberhumer, Laszlo Molnar & John Reiser May 12th 2017
File size Ratio Format Name
-------------------- ------ ----------- -----------
upx: ./flag.elf: NotPackedException: not packed by UPX