开始DLL注入章节的学习。
知识点学习
消息钩子
这里主要是要弄明白Windows GUI程序的工作模式/流程。
GUI以事件驱动方式工作。核心概念:message queue
最具代表性的:MS提供的spy++
SetWindowsHookEX()
SetWindowsHookExA 函数 (winuser.h) - Win32 apps | Microsoft Learn
HHOOK SetWindowsHookExA(
[in] int idHook, // hook type
[in] HOOKPROC lpfn, // hook procedure
[in] HINSTANCE hmod, // hook procedure所属的DLL句柄 (Handle)
[in] DWORD dwThreadId // 待hook的线程ID
);
像这样,使用
SetWindowsHookEX()
设置好钩子后,
运行钩取示例 HookMain.exe
附件给的:
经测试,要在win7环境跑。
运行HookMain后打开notepad,再开Process Explorer。
选中notepad.exe CTRL+D
说明KeyHook.dll已经注入notepad.exe进程了。
然后HookMain.exe中输入q
后就退出,KeyHook.dll也不在notepad.exe中了。
源码分析/书写
这一章的逆向都很简单,主要关注的是怎么自己写dll inject。
HookMain.cpp
// HookMain.cpp
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<Windows.h>
#define DLL_NAME "KeyHook.dll" // dll's name
#define HOOKSTART "HookStart" // start function in DLL
#def