NOTICE



 오늘은 CPL 파일에 대해 알아보도록 하겠습니다.



1. CPL 파일


 CPL은 Control Panel의 약자로 윈도우 시스템에서 제어판에 있는 기능을 추가할 때 사용하는 설정 항목 파일입니다. 제어판을 열어보면 시스템과 관련된 여러 파일들이 있는데 해당 파일 하나하나의 확장자가 .cpl 입니다. 파일 구조는 DLL과 동일하지만 EXE와 같이 실행 가능하기 때문에 악성코드에 많이 사용되고 있습니다.


 각 제어판의 항목과 해당 cpl 파일의 이름은 다음과 같습니다.


[표 1.1.] 제어판 항목 별 .cpl 파일 이름


 앞서 .cpl 확장자를 가진 파일은 EXE 파일과 같이 더블 클릭만으로 실행 가능하다고 했습니다. 그러나 실제로 실행하면 DllLoader(rundll32.exe)가 먼저 실행되고 .cpl 파일이 로드됩니다.



2. 실행 방법


 물론 EXE와 같이 더블 클릭만으로도 동작을 하지만 그 외에 다양한 방법을 사용할 수 있습니다.


1. control.exe

 사실 이 방법을 사용하면 control.exe에서 rundll32.exe를 호출하고 rundll32.exe이 .cpl 파일을 로드합니다. 즉 control.exe 내부에서 두 번째 방법을 사용하는 것 입니다.


control.exe <contrl>,<applet>,<page>

> control.exe main.cpl, ,1

 

2. rundll32.exe


rundll32.exe shell32.dll,Control_RunDLL <contrl>,<applet>,<page>

> rundll32.exe shell32.dll,Control_RunDLL file.cpl, ,1


3. vbscript

 vbscript로 .cpl 파일을 Import해서 실행할 수 있습니다. 그 방법은 다음과 같습니다.


Dim obj

Set obj = CreateObject("Shell.Application")

obj.ControlPanelItem("CPL파일.cpl")



3. 내부 구조


 .cpl은 DLL 파일과 동일한 내부 구조를 가지고 있습니다. 단 .cpl 파일을 실행하면 CPlApplet 함수가 호출 됩니다. CPlApplet은 Export 함수로 등록되어 있습니다. 샘플 파일의 EXPORT Address Table을 살펴보면 CPlApplet 함수의 주소를 확인할 수 있습니다.


[그림 3.1.] .cpl 파일 Export 함수 확인


 CPlApplet은 CALLBACK 함수로 CPlApplet Caller가 보내는 message를 처리합니다. message는 다음과 같은 값을 가집니다.


[표 3.1.] CPlApplet 함수 message


 다음은 CPlApplet 함수의 일반적인 형태입니다. 최근 악성 .cpl의 경우 메일을 통해 유포되어 사용자가 실행하도록 유도합니다. 그리고 CPL_DBLCLK 메시지가 발생했을 때 MARICIOUS Code가 동작하게 구성합니다.


[그림 3.2.] CPlApplet 함수의 일반적인 형태


 이상으로 '[개념 이해] CPL 파일'에 대한 포스팅을 마치겠습니다.