我们在写DLL的时候,需要在DLL项目里面加上window的API函数DllMain.然后DllMain函数里面写上你自己的函数, 这样,windows会在用LoadLibrary加载DLL后,调用DllMain函数来执行,而你把自己的函数已经先写在在DllMain里面了,那么你的函数也自然而然被间接调用了....
Add.
dll
(假设的要hook的
函数
所在
dll
)
Hook
Dll
.
dll
(包含要
注入
用的
函数
所在
dll
)
2个exe项目:One.exe(假设要Hook的程序)
Hook.exe(hook用的程序)
导包跟头文件我会发出来,但是
函数
修改的话,只会在修改部分发出
Add.
dll
可以使用Windows API
函数
CreateRemoteThread和WriteProcessMemory来实现向
进程
注入
dll
并传参。具体步骤如下:
1. 打开目标
进程
,获取
进程
句柄。
2. 在目标
进程
中申请一块内存,用于存放
dll
路径和参数。
3. 使用WriteProcessMemory
函数
将
dll
路径和参数写入目标
进程
的内存中。
4. 使用LoadLibrary
函数
加载
dll
,并获取
dll
的模块句柄。
5. 使用GetProcAddress
函数
获取
dll
中需要
调用
的
函数
地址。
6. 使用CreateRemoteThread
函数
在目标
进程
中创建
一个
远程线程,并将需要
调用
的
函数
地址作为线程
函数
。
7. 等待远程线程执行完毕,释放申请的内存。
如果不想
注入
dll
,可以使用VirtualAllocEx
函数
在目标
进程
中申请一块内存,将需要执行的汇编代码写入该内存中,然后使用CreateRemoteThread
函数
在目标
进程
中创建
一个
远程线程,并将该内存地址作为线程
函数
。