ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2022/03/11][짤막한 이야기 - UPX]
    짤막한 이야기 2022. 3. 11. 11:33
    728x90
    반응형

    [2022/03/11][짤막한 이야기 - UPX]
    UPX(Ultimate Packer for eXecutables)는 가장 대표적으로, 범용적으로 활용되는 실행파일(소프트웨어) 압축 프로그램(= 패커)이다.
    일반적인 개발자들은 압축 프로그램하면 보통 AlZip, 7zip, BandiZip 등 다수의 프로그램을 하나로 묶어주며 용량을 줄여주는 그러한 소프트웨어를 생각하기 쉽다.
    그러나 보안과 관련된 개발자들은 압축 프로그램을 그러한 관점에서만 바라보지 않는다. 이 압축 프로그램은 실행코드를 보이지 않게 감추어주는 역할을 한다.
    즉, 다수의 프로그램이 아닌 단일의 실행파일(예: .EXE파일)에 대하여 내부를 압축해주는 프로그램인 것이다.
    압축 해제는 프로그램이 실행될 때, 압축된 코드가 실행되기 직전에 알아서 압축이 해제된다. 즉, 압축 해제 루틴(= 언패킹 루틴)은 프로그램 내부에 자체적으로 내장되어 실행된다.
    (사람이 직접 .zip 파일을 압축해제 하는 것과 달리 UPX는 자동으로 언패킹 되는 것이다.)
    사실 패커와 언패킹 루틴에 대해서는 이전에도 몇번 포스트하였기 때문에 이런 기본적인 개념은 이미 익숙할 수 있다.
    UPX만의 이야기를 하자면, UPX는 여러 운영체제에서 활용 가능하며, 여러 타입의 실행파일을 패킹할 수 있는 무료 소프트웨어이다.
    그리고 UPX는 패킹 대상 실행파일의 용량을 극단적으로 줄여줄 수 있다.
    패킹이라는 행위 자체가 “코드를 감추는 용도 + 코드의 중복을 줄이는 용도”라고 패킹된 실행파일의 용량이 줄어드는 것은 이상한 일이 아니다.
    UPX는 UCL이라는 이름의 데이터 압축 알고리즘을 사용하기 때문에 용량을 줄일 수도 있을 것 같다.
    그러나 이 포스트에서 하고자 하는 이야기는 그런 단순한 압축률의 이야기가 아니다.
    UPX는 실행파일의 용량을 극단적으로 줄이기 위하여 파일 구조를 이용한 트릭을 사용한다.
    그 트릭은 무엇일까? 힌트는 이전 포스트에서 언급한 파일 상태와 프로세스 상태의 주소 체계가 다른 이유에 있다.
    [관련된 짤막한 이야기 - 코드 패킹(예시)[2021/08/31]]
    [관련된 짤막한 이야기 - 파일과 프로세스(=이미지)[2022/03/02]]
    [관련된 문서 - 핀툴 프로그래밍 기본서[제3부. 핀툴로 UPX 언패킹하기]]
    #이야기 #루니프 #핀 #핀툴 #패킹 #언패킹 #UPX #패킹된코드 #원본오브젝트 #해커 #개발자 #분석가 #코딩

    728x90
    반응형
Designed by Tistory.