목록분류 전체보기 (347)
Hacking Arts
-메시지 루프를 통해서 윈도우 프로시저로 전달된 메시지는 윈도우 프로시저가 구분하여 작업을 처리하게 된다. LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; switch(iMessage) { case WM_CREAT: return 0; case WM_PAINT: hdc=BeginPaint(hWnd, &ps); EndPaint(hWnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return(DefWindowProc(hWnd, iMessage, wParam, lParam)); } -WndPro..
-WinMain의 마지막 메시지 루프돌리기 입니다. 윈도우를 나타내는 것까지는 다 완성했습니다. 그 다음 이젠 윈도우에 명령이 들어왔을 때 처리해주는 부분을 완성 시켜야 됩니다. 그 부분이 WndProc윈도우 프로시져 부분입니다. 1.이벤트 처리 방식 : 임의의 이벤트가 발생하면 즉시 처리되는 방식이며 이벤트는 키보드나 마우스의 입력을 말합니다. 메세지 내용 1) 이벤트가 발생한 윈도우 핸들 2) 이벤트의 종류 3)이벤트가 접수된 시간 4) 이벤트가 발생한 위치(좌표)위와 같은 메시지가 들어오게 되면 윈도우는 다음의 내용을 처리하게 됩니다. 2.메시지 루프 일단 메세지를 받으면 윈도우 프로시저로 보내줘야되는데 이때 메시지 루프가 그 역할을 하게 됩니다. [그림 1 이벤트 발생시 처리 과정] 1)어떤 이벤..
-윈도우 클래스를 생성하고 윈도우 객체를 생성하는 것까지 했다. 그다음은 윈도우 객체 화면에 띄우기 이다. 윈도우 존재를 띄어주는 함수로 ShowWindow를 사용한다. -ShowWindow() [그림 1 ShowWindow 정의] 첫번째 인수는 hWnd 화면에 보여줄 윈도우 객체의 핸들이고, 두번째 인수 nCmdShow는 화면에 보여줄 윈도우 형태이다. 설정 값 설명 SW_FORCEMINIMIZE 2000 이후에만 쓸 수 있는 플래그로 윈도우를 소유한 스레드가 차단된 상태에서도 윈도우를 최소화 시킨다. SW_HIDE 윈도우를 숨긴다. SW_MAXIMIZE 윈도우를 최대화 시킨다. SW_MINIMIZE 윈도우를 최소화 시킨다. SW_RESTORE 최대화나 최소화된 윈도우를 이전 상태로 복구한다. SW_S..
-클래스를 생성했다고 윈도우가 만들어지는 것이 아니다. 두번째 단계인 윈도우 객체를 생성해야된다.생성에 이용하는 함수는 CreateWindow라는 함수이다. LPWSTR lpszClass = L"ApiBase"; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { HWND hWnd; MSG Message; WNDCLASS WndClass; WndClass.cbClsExtra = 0;//클래스 여분 바이트수 WndClass.cbWndExtra = 0;//윈도우 여분 바이트수 WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRU..
-윈도우 클래스 만들기 이전에 설명한 윈도우 클래스 4단계 중 첫번째 단계이다. 윈도우 클래스를 만들때는 일단 WNDCLASS라는 구조체를 선언하고 내용을 추가 해준다음 RegisterClass라는 함수를 이용하여 구조체를 등록해준다. 이러면 과정은 끝이난다.아래는 WNDCLASS 구조체 내용이다. 전부 채워주면 된다. typedef struct tagWNDCLASSW { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCWSTR lpszMenuName; LPCWSTR lpszClassName; } WND..
-윈도우에서 메세지란?일단 메세지 후킹에 대해 작성하기전에 메세지에 대해 알아보자.어떤 책에서 읽은 내용인데 윈도우는 이벤트 지향,메세지 기반 운영체제이다. 여기서 말하는 메세지란 마우스를 움직이거나 키보드로 입력하는 행위라고 할 수 있다. 윈도우의 메시지 처리 과정은 1 이벤트 발생 2 메세지 전송 3 메세지 처리 4 화면 출력 이런식으로 이루어진다고 생각하면 된다.이벤트는 주로 입력장치(키보드,마우스)에서 발생되면 이를 CPU에 알리기 위해 메세지를 생성후 전송하고 이를 처리하여 다시 출력장치(모니터,프린터)로 결과 값을 보여주는 등의 과정이 윈도우에서 메세지 처리 방식이다. 메세지 처리하는 두가지 방법1.에플리케이션이 가지고 있는 메시지 큐에 메세지를 추가하는 방법2.에플리케이션의 윈도우 프로시저에..
-윈도우 프로그램은 기본적으로 WinMain함수와 WndProc 함수로 구성된다. 두 함수는 필수 함수이다. WndProc는 다른 이름으로 수정 가능하다. WinMain() { 윈도우_클래스_만들기 윈도우_객체_생성하기 윈도우_객체_화면에_띄우기 메시지_루프_돌리기 } WndProc() { 전달된_메시지_처리하기 } 위와 같은 기본 구조를 나타낼 수 있다. WinMain()함수는 윈도우 생성을 담당한다. WndProc()함수는 윈도우 메시지가 발생하면 처리하는 부분을 담당한다고 생각하면 된다. WinMain함수는 그림1과 같은 일을 하게된다. [그림1] 다음 WndProc는 메시지루프를 돌면서 들어오는 메시지들을 처리하게 된다.WndProc는 윈도우 프로시져 윈프록등으로 불린다. 인수 설명 hInstan..
- Windows Hook : 훅이라는 단어는 사전적으로는 낚시바늘이나 갈고리 같이 낚다라는 뜻을 가지고 있다. 그러므로 Windows Hook이라고 하면 Windows OS에서 무언가를 낚아챈다라고 이해 할 수 있다. - Windows Hook 종류 - Code Project의 Three Ways to Inject Your Code into Another Process에서의 Windows Hook 종류1.Local hooks : 자신의 프로세스에 구성된 스레드들의 메시지 트래픽을 감시2.Remote hooks : 다른 프로세스에 속해진 스레드들의 메시지 트래픽을 감시3.Remote hooks : 현재 시스템에서 동작하는 모든 스레드들의 메시지 트래픽을 감시 Local hooks의 경우를 제외하고는 수행..