'시스템 후킹'에 해당되는 글 1건

  1. 2009.07.28 키로거 분석

* 키로거

키로거(Keylogger)는 키입력 내용을 기록하는 프로그램이다.

키로거가 기업에서 직원이나 부모가 아이들을 모니터링하기 위해 사용되지만 누군가 개인 사생활을 파악하기 위해서 악용되기도 한다.

* 후킹

흔히 사용되는 키로깅 방식은 윈도우 API SetWindowsHookEx를 이용한 글로벌 메시지 훅과 드라이버를 이용한 키보드 후킹이 있다.

SetWindowsHookEx(

             Int idHook,                // 훅 종류

             HOOKPROC lpfn,          // 지정한 이벤트 발생시 처리하는 프로시저 주소

             HINSTANCE hMod,       // lpfn이 있는 DLL 의 시작 첫주소

             DWORD dwTreadID       // Thread ID

};


idHook 에 해당하는 내용은 다음과 같으며 악성코드는 보통 02(키보드), 07(마우스), 0D (키보드)를 후킹한다.

 

정의

내용

02

WH_KEYBOARD

키보드

03

WH_GETMESSAGE

 

04

WH_CALLWNDPROC

 

05

WH_CBT

 

06

WH_SYSMSGFILTER

 

07

WH_MOUSE

마우스

08

WH_HARDWARE

 

09

WH_DEBUG

 

10 (A)

WH_SHELL

 

11 (B)

WH_FOREGROUNDIDLE

 

12 (C)

WH_CALLWNDPROCRET

 

13 (D)

WH_KEYBOARD_LL

 저수준(Low-level) 키보드 입력 메시지 후킹

14 (E)

WH_MOUSE_LL

 

 

가로채는 키는 LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam) 형태가 된다.

 

LRESULT CALLBACK KeyboardProc(

Int code,                          // HC_ACTION(0), HC_NOREMOVE(3)

WPARAM wParam,                // virtual-key code

LPARAM lParam                  // extra information

);

 

다음 과정으로 키보드를 가로챈다.

1.       가로채는데 이용하는 DLL 로드

2.       SetWindowsHookExA 로 기능 가로채기

3.       입력 키 검사

4.       입력 키 내용 저장


후킹에 사용된 함수를 따라가면 키보드 입력을 가로채는 코드를 볼 수 있는데 이때 많이 사용되는 코드가 GetKeyboardState/GetKeyState와 ToAscii가 있다.

 

즉, 가장 널리 이용되는 기법은 GetKeyboardState를 통해 키 값을 얻고 ToAscii로 아스키코드로 변환하는 것이다.

 

1.       SetWindowsHookExA로 키보드 가로채기

2.       특수키 처리

3.       GetKeyboardState/GetKeyState ToAscii 존재

4.       키로그 내용 저장

 



* 키로거 판단

1.       Export 함수가 존재할 경우 함수를 분석

 

의외로 정직하게 API 이름을 사용하는 경우가 존재한다.


 




2. SetWindowsHookEx를 찾음

DLL 파일에서 SetWindowsHookEx를 이용하는 경우도 있지만
일부 키로거의 경우 EXE에서 DLL 주소를 얻어서 SetWindowsHookExA를 호출 하는 경우도 있다.

그림에서 보면 키보드(2)를 가로채며 후킹 주소는 0x01000100F 임을 알 수 있다.


3. SetWindowsHookExA로 가로챈 주소로 이동


4.       키보드 후킹 함수를 분석해 키로그 코드 찾음

GetKeyboardState ToAscii 는 가로챈 키 내용을 사람이 읽을 수 있는 텍스트 방식으로 변환할 때 사용된다. 아스키코드로 변환할 수 없는 코드들은 대체로 별도의 값으로 저장한다.




5.       키로그 내용을 저장하는 부분을 찾음




6.   이런 조건을 만족하면 키로거 가능성이 높으며 실제 테스트 해봄


SetWindowsHookEx 를 이용한 후킹은 키로거 외에 패스워드 탈취 프로그램, 게임 치팅 프로그램 등에서도 널리 이용된다.

Posted by mstoned7

댓글을 달아 주세요