ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2022/03/14][짤막한 이야기 - UPX의 트릭]
    짤막한 이야기 2022. 3. 14. 10:41
    728x90
    반응형

    [2022/03/14][짤막한 이야기 - UPX의 트릭]
    UPX(Ultimate Packer for eXecutables)는 가장 대표적으로, 범용적으로 활용되는 실행파일(소프트웨어) 압축 프로그램(= 패커)이다.
    UPX는 실행파일의 용량을 극단적으로 줄이기 위하여 파일 구조를 이용한 트릭을 사용한다.
    일반적인 패킹과 언패킹을 생각해보면 패킹된 코드와 원본 코드의 사이즈가 같으며, 언패킹을 수행하기 위한 언패킹 루틴이 소프트웨어 내에 추가로 필요하다.
    따라서 일반적인 패킹 기술을 프로그램에 적용하는 경우에는 프로그램 용량이 더 증가할 수도 있다.
    그러나 코드 패킹 기술을 정말 압축률이 좋은 알고리즘을 이용한다면 원본 코드보다 훨씬 더 적은 양의 패킹된 코드가 생성될 것이고, 이는 용량을 감소시키는 역할을 한다.
    UPX는 더 나아가서 하나의 섹션(UPX0 Section Body)을 파일 상태에서 아예 없애버린다.
    즉, 파일 상태일 때는 하나의 섹션이 없는 상태이다가 이것이 메모리에 올라가면 섹션이 생성되는 방식이다.
    간단하게 파일 상태에서의 섹션 크기를 0으로 설정하고 이미지 상태에서의 섹션 크기를 원본 코드의 크기와 동일하게 설정함으로써 이러한 트릭이 완성된다.
    단, 파일 상태에서는 아무것도 없었기 때문에 이미지 상태에서는 0x00(Null)이라는 값만이 채워져 있다.
    이제 여기에 패킹된 코드를 언패킹하여 원본 코드를 만들어 내는 것이다.
    패킹된 코드는 UPX1 섹션에 압축된 채로 존재(용량이 원본 코드보다 훨씬 적음)하며, 위 트릭을 이용함으로써 단순히 원본 코드의 사이즈만큼 이득을 볼 뿐 아니라 앞선 포스트에서 이야기한 Alignment만큼의 용량도 파일 상태에서 제거해버리는 이득을 보기 때문에, 단순한 압축 알고리즘의 압축률보다 훨씬 더 큰 용량절감의 효과를 가져올 수 있게 되는 것이다.
    [관련된 짤막한 이야기 - 파일과 프로세스(=이미지)[2022/03/02]]
    [관련된 짤막한 이야기 - UPX[2022/03/11]]
    [관련된 문서 - 핀툴 프로그래밍 기본서[제3부. 핀툴로 UPX 언패킹하기]]
    #이야기 #루니프 #핀 #핀툴 #패킹 #언패킹 #UPX #압축 #패킹된코드 #원본오브젝트 #Alignment #트릭 #해커 #개발자 #분석가 #코딩

    728x90
    반응형
Designed by Tistory.