*함수를 Hook한다. = 주소를 바꾸어버린다~. 보안이냐 바이러스냐. 어차피 둘다 써먹는일이다.
*MFC에서 메시지 훅을 아주 대놓고 지원해준다. 바로..
1)SetWindowHookEx
2)APIHook - IATHook
- Hook(주소변경)
1)은 MS에서 지원하는 채널을 통한 훅이있다. 그러나 2)로가면 리눅스/윈도우 상관없이 다먹힌다.. -0-;;
지존은 PIC를 건드리는것을 후킹하는것. 방법이 아예없다. 즉, 로우레벨로 내려가버리면... ㅋ;;;
1) SetWindowHookEx의 치명적 보안결함은 무엇이든 다 후킹할 수 있다.
만약 내가 dll을 로드해놓았다. 현재 실행중인 어떠한 프로세스로 포커스를 옮겨서 후킹할 준비를 시켜버리면... 그 실행프로세스의 가상메모리공간에 MsgHook.dll이 올라간다.
///////////////////////////////////////////////////////////////////////////////////////
//간략한 소스
-DLL에 들어가는것
HANDLE g_hModule;
HANDLE g_hHook;
BOOL StartKeyLog(HWND hWndEdi){ //써줄 윈도우 핸들이 넘어온거다.
g_hHook = ::SetWindowsHookEX(WH_JOURNALRECORD, KeyRecordProc,(HINSTANCE)g_hModule,0);
// WH_JOURNALRECORD : Input을모조리후킹해라... ㄷㄷㄷ
//WH_CALLWNDPROC : 호출프로시저를 후킹
if(g_hHook == NULL){
error처리
return FALSE;
}
return TRUE;
}
BOOL APIENTRY DllMain(HANDLE hModule... ){ //이것은 StartKeyLog주소를 넘겨준다.
}
LRESULT CALLBACK KeyRecordProc(int nCode, WPARAM, LPARAM){ //메시지핸들러와비슷
if(nCode < 0) return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);
LPEVENTMSG lpEvent;
if(nCode == HC_ACTION){
lpEvent = (LPEVENTMSG) lParam;
if(lpEvent->message == WM_KEYDOWN){ //키보드눌렸음?
문자열 확인후
SetWindowText를 해주어라. 그러면 Write된다.(Edit에.. 윈도우 핸들로 넘어왔으니)
}
}
}
이 함수를 test App에서 호출한다. 그러면 이것이 메모리에 로딩된다.
-App에서
OnTimer에서{
::GetActiveWindow() << 누가 활성화되어있는가.
}
*OpenProcess 잘 건드려보자.
*DLL의 묵시적로딩은 다 정보가 남는다. 이거 보안상 매우.... ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
반응형
댓글