본문 바로가기
리버싱/리버싱 걸음마

정보보안 SUA - [정보보안공부] 4주차 과제 - Windows 데스크톱 앱 개발

by Royal! 2021. 2. 26.
728x90
반응형

4주차 과제는 Windows 데스크톱 앱 개발로 5주차 과제에 선행하여 필요합니다.


- [필수 1] 직접 프로젝트를 생성하거나 샘플을 다운받아서 Windows 데스크톱 앱을 만듭니다. (Link 1, 2)
- [필수 2] 소스 코드를 설명합니다. 주석을 달아도 되고 소스코드와 별도로 각 요소들을 설명하는 글을 작성해도 좋습니다. 함수 정보는 Microsoft Docs에서 검색해주세요.
- [선택 1] Windows의 창에 대해 배우고 이를 응용하여 그림을 그리거나 창을 닫기 전 알림을 띄우는 등의 코드를 작성해봅니다.
- [선택 2] 작성한 Windows 데스크톱 앱을 x86-32 디버거(Visual Studio 내장 디버거, x64dbg 등)를 사용하여 소스코드와 비교하며 관찰합니다.
- [선택 3] Windows의 클래스, 프로시저, 메시지 등에 대해 공부합니다. 

 

Link 1 - 최소한의 Windows 데스크톱 프로그램 작성

docs.microsoft.com/en-us/windows/win32/learnwin32/your-first-windows-program

 

Module 1. Your First Windows Program - Win32 apps

.

docs.microsoft.com

Link 2 - Windows Hello World 샘플 다운로드 

docs.microsoft.com/en-us/windows/win32/learnwin32/windows-hello-world-sample

 

Windows Hello World Sample - Win32 apps

This sample application shows how to create a minimal Windows program.

docs.microsoft.com

Link 3 Win32 API 문서 (기능기준) 

docs.microsoft.com/en-us/windows/win32/apiindex/windows-api-list

 

Windows API index - Win32 apps

A list of the reference content for the Windows API.

docs.microsoft.com

Link 4 - Window 개요 

docs.microsoft.com/en-us/windows/win32/winmsg/windows

 

Windows (Windows and Messages) - Win32 apps

This section discusses windows in general.

docs.microsoft.com

 

[필수 1] 소스코드

 

[필수 2] 소스코드 설명

 

출처 - docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/ms633573%28v=vs.85%29

 

WindowProc callback function (Windows)

WindowProc callback function 03/30/2018 2 minutes to read In this article --> An application-defined function that processes messages sent to a window. The WNDPROC type defines a pointer to this callback function. WindowProc is a placeholder for the applic

docs.microsoft.com

윈도우로 전송 된 메세지를 처리하는 애플리케이션 정의 함수. WNDPROC 유형은 이 콜백 함수에 대한 포인터를 정의한다.(이해를 잘 못함) 또한 4개의 인자로 구성되어 있다.

 

  • hwnd [in]
    Type: HWND

    A handle to the window.

  • uMsg [in]
    Type: UINT

    The message.

    For lists of the system-provided messages, see System-Defined Messages.

  • wParam [in]
    Type: WPARAM

    Additional message information. The contents of this parameter depend on the value of the uMsg parameter.

  • lParam [in]
    Type: LPARAM

    Additional message information. The contents of this parameter depend on the value of the uMsg parameter.

인자 의미
HWND hwnd 윈도우의 핸들
UINT uMsg 메세지
WPARAM wParam 메세지의 추가 정보. 내용은 파라미터 값에 따라 달라진다.
LPARAM lParam 메세지의 추가 정보. 내용은 파라미터 값에 따라 달라진다.

 

메세지 결과를 리턴하는 함수이며, 메세지의 정보가 파라미터 값마다 달라지므로 리턴 값도(메세지 내용도 달라진다?) 정도로 이해했다.


출처 - docs.microsoft.com/en-us/windows/win32/learnwin32/winmain--the-application-entry-point

 

WinMain The Application Entry Point - Win32 apps

.

docs.microsoft.com

모든 Windows 프로그램에는 WinMain 또는 wWinMain이라는 이름을 가진 시작점 함수가 포함되어 있다.

또한 파라미터 값은 4개를 가진다.

 

  • hInstance is something called a "handle to an instance" or "handle to a module." The operating system uses this value to identify the executable (EXE) when it is loaded in memory. The instance handle is needed for certain Windows functions—for example, to load icons or bitmaps.                                                                      운영체제는 hInstance 값을 이용하여 실행파일이 메모리에 로드될때 식별한다.
  • hPrevInstance has no meaning. It was used in 16-bit Windows, but is now always zero.                                  16-bit Windows에서 사용됐지만 현재는 항상 0이다.
  • pCmdLine contains the command-line arguments as a Unicode string.                                                       pCmdLine은 명령어 라인 정의를 유니코드로 한다.
  • nCmdShow is a flag that says whether the main application window will be minimized, maximized, or shown normally                                                                                                                                       nCmdShow는 윈도우 기본 응용 프로그램(main application window)을 최소화, 최대화 또는 정상적으로 표시할지 말지를 나타내는 플래그다.

모든 Windows Program 시작시 시작점(Entry Point)이 되는 함수이며 이 함수로부터 프로그램이 시작된다로 이해했다.


출처 - docs.microsoft.com/en-us/windows/win32/winmsg/window-classes

 

Window Classes (Windows and Messages) - Win32 apps

This topic describes the types of window classes, how the system locates them, and the elements that define the default behavior of windows that belong to them.

docs.microsoft.com

출처 - docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-wndclassa

 

WNDCLASSA (winuser.h) - Win32 apps

Contains the window class attributes that are registered by the RegisterClass function.

docs.microsoft.com

Window Classes는 클래스 유형, 시스템의 위치 지정 방법 및 해당 클래스에 속한 윈도우 기본 동작을 정의하는 요소 설명. 윈도우 클래스는 시스템이 창을 만들기 위해 템플릿으로 사용하는 속성 집합. 

 

WNDCLASSA는 Window Class Structure다.(구조체)

인자 의미
UINT style 클래스 스타일.
WNDPROC lpfnWndProc 윈도우 프로시저에 대한 포인터. 
int cbClsExtra 클래스 구조에 따라 할당할 추가 바이트 수
int cbWndExtra 인스턴스 다음에 할당할 추가 바이트 수
HINSTANCE hInstance 클래스에 대한 윈도우 프로시저를 포함하는 인스턴스 핸들
HICON hIcon 클래스 아이콘에 대한 핸들
HCURSOR hCursor 클래스 커서의 핸들
HBRUSH hbrBackground  클래스 배경 브러시에 대한 핸들(색상 값 등)
LPCSTR lpszMenuName, ClassName 클래스 메뉴의 리소스 이름, 문자열에 대한 포인터.

윈도우 클래스 구조체에서 속성 값들을 지정후 Register Class를 사용하여 클래스를 등록 후 사용.

위의 예제로 예를들면 14번 라인으로 구조체 선언 후 16~18번 라인의 속성 값을 설정 후 20번 라인 Register로 등록 후 사용한다는 의미인것 같다.


출처 - docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-createwindowexw

 

CreateWindowExW function (winuser.h) - Win32 apps

Creates an overlapped, pop-up, or child window with an extended window style; otherwise, this function is identical to the CreateWindow function.

docs.microsoft.com

겹침, 팝업 또는 하위 창을 만든데 사용하는 함수이다. 

인자 의미
DWORD dwExStyle 작성 중인 윈도우의 확장 창 스타일.
LPCWSTR lpClassName, WindowName RegisterClass 또는 RegisterClassEx 함수에 대한 이전 호출에 의해 생성된 null 종료 문자열 또는 클래스 원자.

윈도우 창 이름.
DWORD dwStyle 작성 중인 창의 스타일
int X, Y, nWidth, nHeight X: 창초기 수평 위치. Y: 수직 위치 W: 너비 H: 높이
Hwnd hWndParent 작성 중인 창의 부모 또는 소유자의 창에 대한 핸들
HMENU hMenu 스타일에 따라 메뉴에 대한 핸들 또는 하위 창 식별자를 지정
HINSTANCE hInstance 창과 연결할 모듈의 인스턴스 핸들
LPVOID lpParam WM_CREATE 메세지의 IParam 매개 변수로 가리친 CREATESTROCATE 구조를 통해 창에 전달되는 값에 대한 포인터

CLASS_NAME 은 위의 "Sample Window Class"라고 설정했으며 창 이름은 "Learn to Program Window"라고 적었으며 나머지는 null 값으로 설정됐으며 hInstance도 설정되어 있다라고 생각했다.


 

728x90
반응형

최근댓글

최근글

Royal! © 2024