정보보안/리버싱

reverse_assembly UPX packing/unpacking

오오렌지 2022. 9. 2. 14:01

32_패킹&언패킹

 - 분석 환경 : Windows7(32bit)
 - 분석 도구 : exeinfope, PEview, upx, OllyDbg


1. UPX 

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


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

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



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

UPX으로 패킹된것을 확인할 수 있음



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

 

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

 

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


_____________________________________________________________________________________

 

 

- 원본 파일(Packing_1_pack.exe)  : 섹션 5개

 

 - 패킹 파일(Packing_1_pack.exe)  : 섹션 3개

_________________________________________________________________________________________

 - 원본 파일(Packing_1.exe): EP - 0x1340

 

-패킹파일(Packing_1_pack.exe): EP - 0x7910

 

_______________________________________________________________________________________

// 참고

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



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

 

upx -d Packing_1_pack.exe -o Packing_1_unpack.exe




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

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

파란색 상자를 보면 UPX으로패킹된것을 확인할 수 있다.



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

섹션:3개, UPX으로 패킹된것을 확인할 수 있음
DLL/ 함수 전체 목록이 다 나와있지 않음. 섹션: 3개



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


 EP 지점에 'PUSHAD' 명령어를 확인할 수 있다.

            PUSHAD  :  범용 레지스터 EAX ~ EDI를 스택에 저장(백업)하는 동작이다.

            POPAD : 나중에 프로그램 내부에서 언패킹할때 명령어를 이용하여 스택에 저장된 레지스터 값을 복원한다.

 

 

          3-1)  EP = ImageBase + AddressOfEntryPoint  = 0x00400000 + 0x00007910 = 0x00407910

                    PEview에서 확인한 정보들로 EP를 계산했더니 0x00407910가 나왔다. 

EP지점에 PUSHAD가 있는걸 확이할 수 있다.

 

           3-2) 'F8'을 통해 'PUSHAD' 명령에 의해서 레지스터 값들이 스택에 저장되는지 확인한다.

PUSHAD직전 레지스터의 상태

                                                                                -----> PUSHAD (F8)

PUSHAD이후 스택에 레지스터값들이 저장된것을 확인할 수 있음

            3-3) Ctrl+S 를 통해 'POPAD' 명령어를 검색하고 해당 위치에 BP를 지정한다.

                     이때 주의할 점은 POPAD가 여러개 나올 수 있어서 F2 ->  Ctrl+L 으로 POPAD가 더 있나 찾아줘야 한다.

                     여러개 나온다면 제일 마지막 POPAD로 이동해서 BP지정 후 F9로 실행시키기! 



 4) 올리디버거 플러그인 기능을 이용하여 덤프를 실시한다.



 5) ImportREC를 이용하여 덤프된 파일에 IAT 정보를 연결한다.

importrec을 이용하면 아래와 같이 IAT가 연결된 파일이 한개 더 생성된다 

 

 IAT을 연결하기 전과 후의 차이점을 Peview를 통해 확인해보자.

 

 

-      Packing_2_dump.exe 파일 IAT 정보를 연결 전 IAT

-      Packing_2_dump.exe 파일 IAT 정보를 연결 후 IAT

IAT가 훨씬 많아졌음