메시지 후킹

 - 메시지후킹은 user32.dll의 SetWindowsHookExA()메서드를 이용한다. 윈도우는 키보드, 마우스 등에서 부터 들어오는 메시지를 훅 체인(Hook Chain)을 통해 처리한다.

* 훅체인 : 메시지를 처리하는 일련의 함수 포인터를 모아놓은 리스트

 - 메시지 후킹의 대표적인 해킹기법은 키 로커(Key Logger)가 방식을 이용하여, 키보드의 입력 메시지를 중간에 가로채 해커에게 전송하는것.

 

*메시지 후킹

 

ctypes을 활용한 메시지 후킹

1.파이썬에서 윈도우 Win32 API활용하기

- 파이썬에서 윈도우 운영체제에서 제공하는 강력한 기능을 활용하려면 Win32 API를 활용해야 한다.

 

*외부 라이브러리 사용하는 파이썬

 

2. ctypes모듈의 기본개념

- ctypes는 동적 라이브러리 호출 절차를 단순화 하고, 복잡한 C데이터형을 지원하며, 로우레벨 함수를 제공하는 장점이 있다. ctypes활용해서 함수 호출 규약만 준수 하면 MSDN에서 제공하는 API직접호출 할 수 있다.

*ctypes 모듈

 

변수형 매핑 테이블

 ctypes 형

C언어 

 python

 c_char

char 

1-character string 

 c_wchar

wchar_t

1-character unicode string

 c_byte

char 

int / long 

 c_ubyte

unsigned char

 c_short

short 

 c_ushort

unsigned short

 c_int

int 

 c_uint

unsigned int

 c_long

long 

 c_ulong

unsigned long

 c_longlong

 _int64혹은 long long

 c_float

float 

float 

 c_double

double

float

 c_char_p

char * (NULL terminated) 

string 혹은 None 

 c_wchar_p

wchar_t * (NULL terminated)

unicoe 혹은 None 

 c_void_p

void * 

int / long 혹은 None 

     

 

 

3.키보드 후킹

- user32.dll에서 제공하는 SetWindowsHookExA()함수를 사용하여 훅(Hook)을 설정할수 있다.

*훅(Hook) : 운영체제에서 메시지나 마우스 클릭, 키보드 입력과 같은 이벤트를 중간 가로채는 매커니즘을 제공

① 훅설정 : user32.dll의 SetWindowsHookExA() 함수를 통해 훅을 설정할 수 있고 메시지를 처리할 프로시저(콜백함수)를 등록 할 수 있다.

 

② 훅체인 등록 : 등록된 후 프로시저는 훅체인으로 관리되며 훅체인 의 맨 앞자리에 훅 프로시저의 포인터가 등록된다. 이제 키보드 입력 타입의 메시지가 해당 스레드 큐에 입력되기를 기다린다.

 

③ 키보드 입력 : 사용자는 키보드를 사용해서 원하는 메시지를 컴퓨터에 입력한다. 키보드에 컨트롤러가 컴퓨터가 인식할 수 있는 신호로 변환해서 키보드 드라이버로 전달한다.

 

④ 시스템 큐 : 키보드에서 들어온 메시지는 운영체제에서 관리하는 시스템큐로 입력되고 메시지처리를 담당하는 스레드 큐로 입력되는것을 기다린다.

 

⑤ 스레드 큐 : 메시지를 처리할 스레드 큐로 입력된 메시지는 해당 윈도우로 보내지 않고 훅 체인에서 관리되는 첫 번째 포인터에 해당하는 훅 프로시저로 보내진다.

 

⑥ 메시지 후킹 : 스레드 큐로부터 온 메시지는 훅 체인의 첫번째 항목에 있는 포인터로 전달 된다.

 

⑦ 훅 프로시저 : 훅 프로시저는 메시지를 받아 프로그래머가 지정한 동작을 수행한다. 대부분의 해킹 코드가 훅 프로시저에 기술된다. 작업이 종료되면 메시지를 훅 체인의 다음 포인터로 전달 한다. 콜백 함수라고도 불리기도 함.

 

⑧ 훅체인 포인터 : 훅 체인에 연결된 포인터에 해당하는 훅 프로시저에 차례대로 메시지를 전달한다. 마지막 훅 프로시저가 메시지를 처리한 후 최종적으로 원래 지정된 윈도우로 메시지를 전달 한다.

 

 

+ Recent posts

티스토리 친구하기