본문 바로가기
프로그래밍/DB/WINAPI

[WINAPI] SetWindowsHookEx() 지역훅, 전역훅

by 아유카와 2010. 9. 20.
   이번에 심심해서 접해 본 WINAPI를 이용한 HOOK.. 참 간단한 API를 제공하면서 강력한거 같다. 이 HOOK를 잘 사용하는 사람은.. 뭐랄까.. 뭔가 해킹이나 게임 오토마우스, 오토키보드, 특정키 막기, 리버스엔지니어링등 뭐.. 가능성이 무궁무궁하게 보인다. 뭐 나야.. 그냥 기초만 ( 현 열려있는 창의 한글/영문 여부 알아오기 정도 ) 답습한 상태이긴 하지만.. 나름 연구하는 재미가 있다랄까.. C를 제대로 안배워둔게 조금 원망스럽고, C를 사용하는 업체에 처음 취업이 안되었던게 또 조금더 원망 스럽달까...^^

1. 현재 윈도우에 실행중인 또는 실행 하려는 프로그램에 잠입시킬 DLL를 코딩한다. DLL에 특정 함수를 만들어 이 함수를 윈도우의 모든 실행중인 프로그램에 올려 놓는다.

2. SetWindowsHookEx()를 이용하여 DLL의 특정함수를 전역훅( dll injection ) 할 수 있다.

3. 기본적으로 내가 했던 작업은 프로그램의 한글/영문 상태를 알아오는 것이였는데. 이 한글/영문 상태를 알려면 WINAPI를 사용해야 한다. 그러나 이 WINAPI를 사용 해서 얻어 올 수 있는것은 실행 되고 있는 자신의 프로그램의 상태만 얻어 올 수 있다.( 타 핸들의 프로그램의 상태는 얻어오지 못하고 NULL를 반환한다. )
자료를 검색하던중 전역훅/지역훅에 대해 알게 되었고, 여러가지 연구 끝에 DLL Injection에 성공.. 활성화 된 창에서 한영 변환이 일어나면 특정 프로그램(파워빌더나 VB, C 등으로 만든)으로 SendMessage 하도록 프로그래밍 하였다.

4. 한글과컴퓨터에서 나온 한글프로그램에서는 이게 제대로 작동이 안된다. 아무래도 한글은 IME를 사용하지를 않는듯 하다. ( 한글에서도 반응 하도록 만드려면 더 높은 레벨의 지식이 필요 하겠지..^^ 한글의 구조를 좀 알아야 하니 리버스엔지리어링도 알아야 할 터이고.. 허나 나는 그런수준의 능력자는 아니니 이쯤에서 불러섰다 )