한님폐하 2022. 9. 13. 12:27
  • 분석 도구 : exeinfope, PEview, upx, OllyDbg

 

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


 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 -o Packing_1_unpack.exe

 




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


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

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