远程线程注入DLL
远线程注入原理是利用Windows系统中CreateRemoteThread()这个API,其中第4个参数是准备运行的线程,我们可以将LoadLibrary()填入其中,这样就可以执行远程进程中的LoadLibrary()函数,进而将我们自己准备的DLL加载到远程进程空间中执行。
选LoadLibrary函数原因:首先,它可以把一个Dll载入内存空间,并执行DLL初始化函数。第二,LoadLibrary在Kernel32.dll中,Kernel32.dll的加载基址在每个进程中都是一样的所以,LoadLibrary在每个进程的地址就是一样的。
注意事项:在DLL中,载入窗口命令中,必须用“对话框方式”!比如,载入(窗口1,,真)
注册表注入
注册表注入原理是利用在Windows系统中,当注册表以下键值中存在有DLL文件路径时,会跟随EXE文件的启动加载这个DLL文件路径中的DLL文件。当如果遇到有多个DLL文件时,需要用逗号或者空格隔开多个DLL文件的路径。
本注入器是采用的是Appinit_Dlls注册表项,此注册表项下的每个dll文件都会随着User32.dll的加载而同样加载到进程中
本注入器写入注册表的全路径为:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\WindowsNT\CurrentVersion\Windows\AppInit_DLLs
注意事项:注册表注入会对每一个进程都有效,针对某个进程的话需要在DLL中进行编写
EIP注入
挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器码和数据拷贝到里面去,然后修改目标进程EIP使其强行跳转到我们拷贝进去的相关机器码位置,执行相关,然后跳转回来。
消息钩子注入
消息钩子注入原理是利用Windows系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个特性,我们可以将DLL注入到指定进程中
使用SetWindowsHookEx()之前首先需要将HOOK的DLL加载到本身的进程中,以此得到DLL的模块句柄,再使用GetProcAddress()得到DLL中公开的函数XXX()的函数地址,最后遍历出待注入进程的线程ID,这样SetWindowsHookEx()就可以利用这些参数进行HOOK了。
注意事项:消息钩子注入需要有窗口
输入法注入
输入法注入原理是利用Windows系统中在切换输入法需要输入字符时,系统就会把这个输入法需要的ime文件装载到当前进程中,而由于这个Ime文件本质上只是个存放在C:\WINDOWS\system32目录下的特殊的DLL文件,因此我们可以利用这个特性,在Ime文件中使用IMESetPubString()注入DLL文件
也可以直接编写IME文件在其中使用oadLibrary()函数载入注入的DLL文件