1. 파이썬을 통한 메시지 후킹 코딩

이 코드를 현재 이코드를 돌리면 안돌아간다. 그 이유는 이코드는 파이썬2.7기준의 코드이다. 노트북에 파이썬3.5 깔려 있는대 어떻게 돌리지 고민하다.

파이썬"Tools\scripts" 있는 2to3.py을 통해서 코드를 변환 해보도록 했다.

 

2.코드 변환

파이썬은 2점대 버전 과 3점 버전이 호환이 되지를 않는다. 그래서 인지 변환 파일(?)존재 하는것 같다.

변환하는 방법은 컨맨드창으로 실행 하면된다.

커맨드창에 들어가서 2to3.py들어가있는 스트립트 폴더로 들어가야된다. 명령어는 다음과 같다.

 "cd C:\Users\doo\AppData\Local\Programs\Python\Python35\Tools\scripts"

 

이와 같이 변환이 된것을 알 수가 있다. 그럼 파일일 다시한번 실행 해보자.

 

3.파일 재실행 결과.

 

 로그인을 할때 아이디를 입력하였을때 파이썬 실행기입력되는것을 알수가있다. 굳이 인터넷 창이 아니어도 작동공간에서 동작을 한다.

*키보드 후킹 모습

 

이처럼 작동하는것을 알수가 있었다.

이거함으로써 한층더 파이썬의 재미를 붙이게 된것같아 더욱더 파이팅 넘치게 해봐야지~

메시지 후킹

 - 메시지후킹은 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() 함수를 통해 훅을 설정할 수 있고 메시지를 처리할 프로시저(콜백함수)를 등록 할 수 있다.

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

 

 윈도우 어플리케이션의 기본개념

 - 윈도우 어플리케이션을 파이썬으로 해킹하려면 윈도우 API에대한 기본지식이 필요.

 - 윈도우API는 마이크로 소프트에서 제공하는 응용 프로그래밍 인터페이스(Application Programming Interface,API)모음

 - 어플리케이션 개발을 하려면 윈도우API를 통해 운영체제(커널)에서 지원하는다양한 기능을 활용

* 일반적으로 많이 사용하는 32bit윈도우 환경에서는 win32라는 API를 지원.

 

*윈도우 API활용

 

  - 윈도우 어플리케이션을 개발할때는 lib와 DLL형태의 라이브러리 사용.

 - lib는 정직라이브러리이며, 윈도우 실행파일은 exe파일이 생성될때 같이 포함.

 - DLL(Dynamically Linked Libraries)는 동적 라이브러리로써 애플리케이션 실행시점에 기능이 호출되는 방식으로 사용.

 

*대표적인 DLL

종류

 특징

 kernel32.dll

파일 시스템.디바이스,프로세스,스레드와 같은 기초적인 리소스에 대한 접근 기능지원.

 user32.dll

사용자 인터페이스를 담당하는 기능을 지원. 윈도우 창의 생성 및 관리.

윈도우 메시지의 수신,화면에 덱스트 표현, 메시지박스 표현 

 advapi32.dll

레지스트리,시스템 종료와 재시작, 윈도우 서비스의 시작/종료/생성, 계정관리 등의 기능지원.

 gdi32.dll

모니터,프린터 그리고 기타 출력 장치에 대한 관리 기능 지원 

 comdlg32.dll

파일 열기,파일 저장,색상 및 폰트 선택과 관련된 표준 대화 창 관리 기능 지원 

 comctl32.dll

상태 바, 진행 바, 툴 바 등 과 같은 운영체제에서 지원하는 기능에 대한 응용 프로그램의 접근을 지원. 

 shell32.dll

운영체제의 셸(shell)에서 제공하는 기능을 응용프로그램이 접근 할 수 있도록 지원 

 netapi32.dll

 운영체제에서 지원하는 다양한 통신 기능을 응용프로그램이 접근 할 수 있도록 지원

 

 - 윈도우용 개발 언어(visual studio C++,C#등) Win32 API를 직접 호출해서 사용할수 있음.

 - win32 API는 저 수준의 운영체제기능을 제어 할 수 있는 다양한 인터페이스 제공. 이로써 어플리케이션 개발 및 해킹프로그램 개발에 많이 사용.

 

어플리케이션 해킹

 

 - 많은 어플리케이션은 C언어 기반으로 만들어짐. C언어는 커널에서 제공하는 강력한 API직접 호출할 수 있음. 이는 편의성을 제공하지만 해커에게는 공격기술을 제공하기도 함.

 - 디버거는 어플리케이션 개발할때 반드시 필요한 도구.

 - 프로그래머는 단계별로 어플리케이션을 실행하여 오류를 찾음.

 - 해커는 악성코드가 실행되도록 유도 할수 있음.

+ Recent posts

티스토리 친구하기