게시판홈 / 나만의팁 / MultiArc 애드온새글쓰기 답글쓰기

저자 MultiArc 애드온
salm2000 (205)
OS/2(18)
2006-03-21


  게시일: 2009-03-18 23:32|||
TC/UPX 압축 풀기에 나온 UXPAddOn4TC.zip을 받아서 설치했어도 UPX로 압축된 파일을 제대로 인식하지 못하였다. MultiArc를 1.4.1로 업그레이드했어도 마찬가지였다.

UPX 압축 헤더 살펴보기를 바탕으로 한 가지 결론에 도달했다.
코드
UXPAddOn4TC.zip 안에 들어 있는 UPX 1.93.AddOn 파일에는 ID 값이 적절하지 않다.

그 원인은 아무래도 UPX 1.93.AddOn 파일이 멀티아크의 옛 버전에 맞추어져 있었기 때문으로 보이며, 그렇다 하더라도 ID 값이 적절하지 않았다.
UPX 실행에는 굳이 버전 정보가 필요하지 않았기 때문이다. 오히려 그것이 오류의 한 원인이 되었다.

(1) UPX로 압축하면 파일 안에 "UPX!"라는 문자열이 생긴다. (16진 값은 55 50 58 21 이다.)
(2) 도스용 UPX이든 윈도용 UPX이든 같은 파일을 만든다.
(3) UPX로 도스용 프로그램을 압축하면 일반적으로 버전 번호를 남기지 않았다.
(4) UPX로 도스용 프로그램을 압축하면 예외적으로 "$Id: UPX 3.03"과 같은 버전 번호를 남겼다. (dos32 등의 도스확장이 적용된 파일에서 나타났다.)
(5) UPX로 윈도용 프로그램을 압축하면 일반적으로 버전 번호를 남겼다. (아직까지 예외를 찾지 못했다.)

위와 같은 결과가 나왔는데, (3)번부터 (5)번까지는 멀티아크 애드온을 만들 때 그다지 쓸모는 없었다.

한편 "Format0"의 값도 수정하였다. 1.2x 버전부터 3.0x 버전까지 동일한 화면을 보여 주고 있고, MultiArc 1.4 버전에서는 "공백"을 "무시해라"라는 뜻으로 받아들였다.
코드
221184 -> 94208 42.59% win32/pe upx.exe

위와 같은 경우 중간에 압축률이나 실행환경 등은 쓸모없는 정보이기 때문이다.
코드
;DoA 님이 만든 파일에서 발췌
Format0="* zzzzzzzzzzzzzzzzzzzzzz -> * pppppppppppppppppppppp nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"

코드
;수정본
Format0=" zzzzzzzzz -> ppppppppp nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"

위 Format0은 UPX가 1기가바이트 이상의 파일을 지원하지 않기 때문에 정상 작동한다. ("zzzzzzzzz"의 앞에 공백이 한 칸 있음에 주의하자.)

여기에 1.3.x부터 지원된 "<SEEKID>"라는 것을 이용하였다.

마지막에 붙은 "SkipSfxHeader"은 제대로 동작하지 않아서 주석으로 처리했다. UPX는 자동 압축 해제 파일도 압축할 수 있으나, 토털 커맨더에서는 UPX 압축파일로 인식하지 않았다. UPX로 압축한 파일도 일종의 자동 압축 해제 파일이지만, 아무튼 UPX로 압축한 파일이라고 인식하지 못하였다.

코드
; ---
; TC MultiArc config addon for UPX compressed files (Ver 0.1.1)
; UPX 1.93 Higher.AddOn
; Packer: upx v1.93 or Higher
; Unpacker: upx v3.03 or Higher
; Author: adapted for MultiArc by koc2000/SALM
; Website: http://koc2000.tistory.com/
; ---

;Common Setting : ID = "UPX!"
[UPX]
ID=55 50 58 21
IDPos=0, <SEEKID>
Extension=EXE,DLL,OCX,BPL,CPL,SYS,AX,ACM,DRV,TLB
Archiver="%COMMANDER_PATH%\Tools\UniExtract\bin\upx.exe"
List="%P -q -l --no-color %AQA"
Start=" --- ------ ----------- -----------"
Extract="%P -d %AQ -o%FQAW"
Test="%P -t -q --no-color %FQ"
Add="%P -9 --best -q --compress-icons=1 --all-methods %FQ -o%AQ"
Format0=" zzzzzzzzz -> ppppppppp nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
IgnoreErrors=0
Debug=0
UnixPath=0
SkipDirsInFileList=0
SkipEmptyNames=1
BatchUnpack=0
SearchForUglyDirs=0
;SkipSfxHeader=1

;Some DOS Extention : ID = "$Info: This file is packed with the UPX executable packer"
;[UPX DOS-Ex]
;ID=24 49 6E 66 6F 3A 20 54 68 69 73 20 66 69 6C 65 20 69 73 20 70 61 63 6B 65 64 20 77 69 74 68 20 74 68 65 20 55 50 58 20 65 78 65 63 75 74 61 62 6C 65 20 70 61 63 6B 65 72
;IDPos=0, <SEEKID>
;Extension=EXE,COM,SYS
;Archiver="%COMMANDER_PATH%\Tools\UniExtract\bin\upx.exe"
;List="%P -q -l --no-color %AQA"
;Start=" --- ------ ----------- -----------"
;Extract="%P -d %AQ -o%FQAW"
;Test="%P -t -q --no-color %FQ"
;Add="%P -9 --best -q --compress-icons=1 --all-methods %FQ -o%AQ"
;Format0=" zzzzzzzzz -> ppppppppp nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
;IgnoreErrors=0
;Debug=0
;UnixPath=0
;SkipDirsInFileList=0
;SkipEmptyNames=1
;BatchUnpack=0
;SearchForUglyDirs=0
;SkipSfxHeader=1


위에서 packer/Unpacker가 다른 까닭은 실제로 이용하는 파일은 upx v3.03 이상이기 때문이다. 오해 없기를 바란다.


[ 메시지수정: salm2000 일시: 2009-03-18 23:34 ]
서명 koc/SALM
koc is meant the King of the Crazy.
SALM stood for SALM Ain't a Life Model.
SALM is not the life model, but SALM is just the life.
다음글: 영문 윈도우에서 파일 정렬이 이상합니다. (8)5549yoonchang22009-03-20
이전글: XP, Vista간 공유시 확인해 봐야할 부분 (1)7641joohee2009-03-03

새글쓰기 답글쓰기
이동:

세상사는 이야기

  • 장난(?)으로 시작한 여 >
  • 탈옥의 필수, QuickDo >
  • 윈도 10, 한영 전환도 >
  • 바보도 할 수 있는 War >
  • 북마크에도 확장 아이 >
  • 크롬은 가라, 비발디가 >
  • 감히 아이폰 관리의 최 >
  • 디지털 노마드의 편집 >
  • [블로그 복귀 알림] 새 >
  • 오타도 즐거운 안드로 >


  • RSS 구독 (익명 | 회원 | 강좌 | 포럼)
    (C) 1996 ~ 2014 QAOS.com All rights reserved.