UPX로 압축된 ELF 식별 및 압축 해제 방법

UPX로 압축된 ELF 식별 및 압축 해제 방법

in

개요

UPX는 여러 실행 파일 형식을 위한 실행 파일 패커로, UPX 설치, UPX로 압축된 파일 식별 및 압축 해제 방법을 정리했습니다.

image 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