패킹&언패킹

2020. 1. 13. 00:02카테고리 없음

@ 패킹 & 언패킹

1. UPX 

 - 운영 체제에서 사용하는 실행 파일 압축/해지 프로그램
 - 대략 60% 정도의 압축율을 제공한다.


2. 'Packing_1.exe' 파일 UPX 패킹

 1) upx을 이용하여 'Packing_1.exe' 파일을 'Packing_1_pack.exe'으로 패킹한다.

upx Packing_1.exe -o Packing_1_pack.exe

                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2008
UPX 3.03w       Markus Oberhumer, Laszlo Molnar & John Reiser   Apr 27th 2008

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
      7680 ->      5120   66.67%    win32/pe     Packing_1_pack.exe

Packed 1 file.


 2) 'Exeinfope'를 이용하여 패킹/언패킹 유무를 확인한다.

 3) 'PEview'를 이용하여 패킹/언패킹 PE 구조를 확인한다.

 - 원본 파일 -> SECTION .rdata -> IAT
 - 패킹 파일 -> SECTION . rsrc -> IAT (DLL/함수 전체 목록 확인 불가능)

 - 원본 파일 : 섹션 5개
 - 패킹 파일 : 섹션 3개

 - 원본 파일 : EP는 0x1340
 - 패킹 파일 : EP는 0x7910

 - SECTION UPX0 : 메모리에 로드 된 우 압축 코드가 해제될 공간
 - SECTION UPX1 : 압축 코드가 저장되어 있는 공간


3. 'Packing_1_pack.exe' 파일 UPX 언패킹

upx -d Packing_1_pack.exe -oPacking_1_unpack.exe

                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2008
UPX 3.03w       Markus Oberhumer, Laszlo Molnar & John Reiser   Apr 27th 2008

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
      7680 <-      5120   66.67%    win32/pe     Packing_1_unpack.exe

Unpacked 1 file.

C:\리버싱\01_실습\04_패킹&언패킹\실습-1(UPX 패킹&언패킹)>


4. 올리디버거를 이용한 'Packing_2.exe' 언패킹

 1) 'Exeinfope'를 이용하여 패킹/언패킹 유무를 확인한다.

 2) 'PEview'를 이용하여 패킹/언패킹 PE 구조를 확인한다.

 3) 올리디버거로 확인시 'UPX' 패킹 특징

 - EP 지점에 'PUSHAD' 명령어를 확인할 수 있다.
 - 'PUSHAD' 명령어를 이용하여 범용 레지스터 EAX ~ EDI를 스택에 저장(백업)하는 동작이다.
 - 나중에 프로그램 내부에서 언패킹할때 'POPAD' 명령어를 이용하여 스택에 저장된 레지스터 값을 복원한다.
 - 'F8'를 실시하여 'PUSHAD' 명령에 의해서 레지스터 값들이 스택에 저장되는지 확인한다.

 - 'POPAD' 명령어를 검색하고 해당 위치에 BP를 지정한다.
 - 'Ctrl+S' -> 'POPAD' 검색 -> F2 -> 'Ctrl+L' -> 더이상 검색 X -> F9