본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

패커(Packer)는 실행 파일을 압축하거나 암호화해 새 실행 파일로 감싸 두고, 실행할 때 메모리에서 원래 코드를 풀어 실행하게 만드는 프로그램이다. 이렇게 감싸는 일을 패킹(실행 압축), 원래 코드를 되살리는 일을 언패킹이라 한다.

패킹된 파일은 앞부분의 작은 풀기 루틴(스텁)과 압축·암호화된 원래 코드로 이루어진다. 실행하면 스텁이 먼저 돌아 원래 코드를 메모리에 풀어 놓고, 원래 프로그램의 시작 지점(OEP, Original Entry Point)으로 넘어간다. 사용자가 보기에는 원래 프로그램과 똑같이 동작한다.

원래는 배포 파일의 크기를 줄이려고 썼다. 지금은 코드를 보호하려는 정상 소프트웨어와, 백신 탐지와 분석을 피하려는 악성코드가 함께 쓴다.

구분 목적 예
압축 패커 파일 크기를 줄인다. 풀기만 하면 원래 코드가 그대로 나온다 UPX, ASPack
프로텍터 분석과 변조를 막는다. 암호화, 안티 디버깅, 가상화(원래 명령어를 전용 가상 머신 코드로 바꿈)를 더한다 Themida, VMProtect

악성코드 분석과 언패킹

편집 원본 편집

패킹된 파일을 디스어셈블러로 열면 풀기 루틴과 알아볼 수 없는 데이터만 보인다. 그래서 악성코드 분석은 패킹 여부부터 확인하고 언패킹한 뒤에 코드를 읽는다.

  • 패킹 여부 확인 : 섹션 이름(UPX0, UPX1), 높은 엔트로피(압축·암호화된 데이터는 무작위에 가깝다), 가져오는 API 가 몇 개뿐인 임포트 테이블, 파일 크기에 비해 작은 코드 영역. Detect It Easy 같은 탐지 도구를 쓴다
  • 자동 언패킹 : 알려진 패커는 전용 도구로 푼다(예: upx -d)
  • 수동 언패킹 : 디버거로 실행해 스텁이 원래 코드를 다 풀고 OEP 로 넘어가는 순간 멈춘 뒤, 메모리를 파일로 덤프하고 임포트 테이블을 복구한다

난독화와의 구분

편집 원본 편집

둘 다 분석을 어렵게 하지만 방법이 다르다.

구분 패킹 난독화
하는 일 원래 코드를 압축·암호화해 감춰 둔다 코드를 그대로 실행되는 다른 모양으로 바꿔 놓는다
실행 중 메모리에서 원래 코드가 풀린다 변형된 코드가 그대로 실행된다
대표 기법 실행 압축, 암호화 무의미한 코드 삽입, 실행 순서 섞기, 식별자 변경
대응 언패킹 역난독화, 동적 분석

무의미한 코드를 끼워 넣고 실행 순서를 섞는 것은 난독화이고, 언패킹은 그 반대로 분석가가 패킹을 푸는 작업이다.