第二十二章 DLL 注入和API钩(DLL Injection and API Hooking)
1.概览
每个进程都有自已独立的地址空间,一个进程不可能创建一个指向其它进程地址空间的指针。
然而如果我们把自已的DLL注射到另一个进程的地址空间去,我们就可以在那个被注入的进程里为所欲为了。
Subclass同一进程中的窗体:http://msdn2.microsoft.com/en-us/library/ms649784.aspx.
2.用注册表注入DLL
该方法适用于给GUI的程序注入DLL
所有的GUI应用程序在启动时都会加载User32.dll,而在User32.dll的DLL_PROCESS_ATTACH代码根据注册表中的信息
来注入用户指定的DLL
注册表项 HKEY_LOCAL_MACHINE"Software"Microsoft"Windows NT"CurrentVersion"Windows"
中有两个值:
LoadAppInit_Dlls:键值中指定要注入的DLL 如:c:"inject.dll
AppInit_Dlls:若其键值为1,则注入LoadAppInit_Dlls中指定的DLL,否则若为0则不注入。
注:
(1)LoadAppInit_Dlls中的值是以空格或分号分隔的,所以DLL的路径中最好不要有空格,最后不指定路径,直接将DLL放到windows系统目录中。
(2) 用注册表注入DLL的方式有很大的局限性,Kernel32.dll和Ntdll.dll中有的函数才能调用