안녕하세요. 엄청 오랜만에 포스팅으로 돌아왔습니다.
최근 본가다녀오느라 공부를 잘 못해서 좀 어색하네요...
먼저 하던 후킹을 마저 해보자면 먼저 목표를 두가지로 정했습니다.
먼저 로컬 메모장을 하나 만들어둔 뒤
①사용자가 영문을 입력할 때 로컬 메모장에 저장
②사용자가 불러오기를 할 때 어떤 메모장을 선택하든 관계없이 로컬에 저장해둔 메모장이 실행
여태껏 공부할 때 알아냈던 정보들을 한번 갈무리하고 가보겠습니다.
먼저 notepad는 EDIT 컨트롤을 사용합니다.
EDIT 컨트롤은 C++에서 제공하는 MFC인데 텍스트 입력창을 만들어줍니다.
CreateWindowExA에서 인자값에 'EDIT'이 들어갈 시 EDIT 컨트롤이 생성됩니다.
notepad를 IDA로 분석했을 때 다음과 같은 EDIT 컨트롤 생성 코드를 찾을 수 있었습니다.

저희가 문자를 후킹하기 위해서는 문자를 입력한 뒤 WM_CHAR 메세지가 어디서 어떻게 처리되는지 알아야 합니다.
api monitor에서 View - parameter를 켜주고, DispatchMessageW와 TraslateMessage와 SendMessageW를 모니터링해줬습니다.

174번 DispatchMessageW를 보면 WM_KEYDOWN으로 키보드 눌림 메세지와 함께 키코드를 담고 있습니다. (물리적인 키보드 이벤트)
그 후 TraslateMessage가 호출되는데 TranslateMessage()는 WM_KEYDOWN 메세지를 기반으로 WM_CHAR을 생성해서 메세지큐에 추가합니다. 그 후 호출된 DispatchMessage를 보겠습니다.

그 후 176번 메세지를 보면 WM_CHAR과 함께 97 (ASCII코드로 a)가 담겨있는걸 확인할 수 있었습니다.
안에 핸들을 보면 0x00400328이 담겨있는데 Edit Control의 핸들일 가능성이 높습니다. 이후에

SendMessageW를 보시면 첫번째 인자값으로 핸들값이 담겨있는데 5394~5396은 저희가 저번에 찾았던 텍스트 입력시마다 호출되는 EDIT 컨트롤 사용자 정의 함수였습니다.
여태까지 두개의 DispatchMessageW를 분석하여 WM_CHAR의 생성과 전달을 확인했습니다.
EDIT 컨트롤로 전달된 WM_CHAR이 어떻게 처리되는지는 핸들값이 0x00400328이 담겨있는 로그를 확인해보면 될 것 같습니다.
일단 저희가 원하는 첫번째 기능의 구현을 위해서는 DispatchMessageW의 message값이 WM_CHAR일 때 세번째 값을 훔쳐오는 방식으로 코드를 짜면 될 것 같습니다. 다른 방법도 찾을 수 있을 것 같은데 이번 notepad후킹에 시간을 너무 많이 쓰는것 같기도 하고, 언어 공부도 해야되서 좀 스피디하게 할 수 있는 방법은 바로바로 해보는게 나을 것 같습니다.
오늘 포스팅은 여기까지 하고 다음 포스팅 때 해당 후킹 코드를 작성해보도록 하겠습니다.
읽어주셔서 감사합니다

'취약점분석 > Reversing' 카테고리의 다른 글
| [Reversing] angr 사용 기초 분석 - 1 (설치 & 실습) (0) | 2025.12.31 |
|---|---|
| [Reversing] Hooking - 9 (notepad.exe 후킹 ④) (4) | 2025.08.11 |
| [Reversing] Hooking - 7 (notepad.exe 후킹 ②) (7) | 2025.07.30 |
| [Reversing] Hooking - 6 (notepad.exe 후킹 ①) (2) | 2025.07.26 |
| [Reversing]DLL injection ( injector 스켈레톤 코드 분석 ) (5) | 2025.07.21 |