안녕하세요. 오늘은 notepad.exe 후킹 2편입니다.
그 동안 notepad의 동작 방식에 대해 여러생각을 했었는데, 연구실에 와서 또 열어보니까 실행도 다르게 되고.. 함수도 다르고 해서 찾아보니까 저번에 실행한게 32비트 버전인줄 알았는데 64비트 버전이었더라고요.
32비트버전 notepad는 Windows\SysWOW64안에 있었습니다.
오늘은 notepad의 구동 방식에 대해 좀 더 자세히 알아보도록 하겠습니다. 먼저 구동 방식을 세세히 알아야 원하는 지점에서 원하는 방식의 후킹을 할 수 있을 것 같기 때문입니다.
먼저 메모장의 핵심 구성 요소는 Edit 컨트롤입니다.
Edit 크래스는 Windows GUI 시스템이 제공하는 기본 텍스트 입력 위젯으로, user32.dll에 내장되어 있습니다.
먼저 CreateWindowExA함수를 살펴보겠습니다.
https://learn.microsoft.com/ko-kr/windows/win32/api/winuser/nf-winuser-createwindowexa

CreateWindowExA 함수(winuser.h) - Win32 apps
확장 창 스타일을 사용하여 겹치는, 팝업 또는 자식 창을 만듭니다. 그렇지 않으면 이 함수는 CreateWindow 함수와 동일합니다. (ANSI)
learn.microsoft.com
여기서 첫번째 인자 값에는 만들 윈도우 창의 스타일입니다.

따라서 다음과 같은 코드가 있다면 Edit컨트롤이 생성됩니다.
CreateWindowEx(
0,
L"EDIT", // ← Edit 클래스
L"", // 초기 텍스트
WS_CHILD | WS_VISIBLE | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,
x, y, w, h,
hWndParent,
NULL,
hInstance,
NULL
);
Edit 클래스는 자체적으로 텍스트 버퍼를 가지고 있는데, EM_REPLACESEL 메세지를 받으면 버퍼에 문자열을 삽입하는 형식으로 문자열 입력이 이루어집니다.
주 메세지/함수 정리는 다음과 같습니다.

이러한 동작 메세지들을 SendMessageW의 인자로 넣어서 전송하게 됩니다.

notepad에서 입력했을 때의 API호출입니다.
여기서 Edit컨트롤의 HWND(창 핸들)은 SendMessageW의 첫번째 인자인 0x005908ca입니다.
SendMessage의 2번째 인자(uMSG)로 들어가는 5394,5395,5396,14,184중에서 5394~5396은 표준 Win32에서 정의되지 않은 값이고 notepad내부에서만 정의된 인자값입니다.
3923,3033에서 인자값(uMsg)에 14와 184가 들어가는 것은 WM_ERASEBKGND와 EM_GETMODIFY로 각가 화면을 갱신하고 , 수정이 됐는지 확인하는 역할입니다.


저희가 메모장을 사용할 때 내용이 수정되면 제목 앞에 *가붙는데 그걸 확인하는 역할입니다.
IDA를 관리자권한으로 실행 후 notepad를 킨 뒤 WinMain안의 NPInit를 확인해보았습니다.

다음과 같이 EDIT컨트롤을 생성하는 부분을 찾을수 있었습니다!
뭔가 제대로 찾아가고있는 것 같아서 뿌듯하네요..!

문자열 검색을 통해 아까 api 모니터에서 확인한 5394~5396 부분을 처리하는 SendMessageW부분도 확인했습니다.
이 메세지들은 사용자가 키보드를 눌러 텍스트 입력/편집시, 텍스트 클릭,선택,이동시 트리거됩니다.
즉, 사용자가 입력을 할 때마다 호출되는 함수입니다.

위 함수들은 입력을 직접 처리하는 함수들은 아니고 입력 후 상태표시를 해주는 보조 메세지라는데 방향이 아주 살짝 틀어진것같네요.
알바를 가야되서 오늘은 여기까지 포스팅을 하고 마치도록 하겠습니다.
새로운 지식도 많이 얻었고 어느정도 방향성이 맞아가는 것 같아서 좀 뿌듯하네요.
아직 실제로 후킹할때까지는 많은 시간이 필요할 것 같지만 천천히 해내보겠습니다.
읽어주셔서 감사합니다~

'취약점분석 > Reversing' 카테고리의 다른 글
| [Reversing] Hooking - 9 (notepad.exe 후킹 ④) (4) | 2025.08.11 |
|---|---|
| [Reversing] Hooking - 8 ( notepad.exe 후킹 ③ ) (4) | 2025.08.08 |
| [Reversing] Hooking - 6 (notepad.exe 후킹 ①) (2) | 2025.07.26 |
| [Reversing]DLL injection ( injector 스켈레톤 코드 분석 ) (5) | 2025.07.21 |
| [Reversing] Hooking - 5 (Inline Hooking ①) (0) | 2025.07.19 |