在windows下,把DLL插件注入到一个进程的方法有很多,比较常用的比如用远程线程(CreateRemoteThread)注入,或者用windows的API:SetWindowsHookEx,如下图,可以用RemoteDll这个注入工具进行注入操作:
当然常规的注入方法存在着注入的时间延后性,即程序已经运行一段时间后才进行后续的注入操作,如果注入的dll需要对目标进程进行hook操作,而目标进程调用的api就在程序刚刚启动的时候进行调用的,这个时候再进行注入和hook就无效了,因为目标进程已经完成了对目标api的调用,后续再进行拦截已经没意义了,下面介绍一种利用修改目标进程导入表的方法来对目标进程的注入,从而达到目标程序启动的时候就能第一时间加载到目标插件从而达到第一时间注入目标进程的目的。
这里就介绍一款软件:CFF Explorer:
下面介绍如何利用这款来修改目标程序的导入表:
- 菜单File->Open打开目标程序(我这里目标程序是WebSocket.exe):
选中左边的Import Adder菜单项,然后点击右边的Add按钮,选中目标需要注入的DLL插件,注意这个DLL必须包含至少一个导出函数。- 怎么导出DLL的函数,可以用如下代码:
extern "C" {
declspec(dllexport) DWORD dummy_debug_proc()
{
return 0;
}
} - 选中DLL的一个导出函数,然后点击上面的“Import By Name”或者“Imprt By Ordinal“按钮,即完成将DLL的导出函数导入到了目标进程的导入表中了,然后点击“Rebuild Import Table”按钮,最后保存或者另存到一个目录下既可以:
- 怎么验证修改导入表成功了呢,打开目标进程,选择左边的“Import Directory”菜单,就可以发现目标进程依赖我们的DLL插件了,当启动目标进程的时候,就会第一时间加载我们的DLL: