远程线程注入DLL


    远线程注入原理是利用Windows 系统中CreateRemoteThread()这个API,其中第4个参数是准备运行的线程,我们可以将LoadLibrary()填入其中,这样就可以执行远程进程中的LoadLibrary()函数,进而将我们自己准备的DLL加载到远程进程空间中执行。
    选LoadLibrary 函数原因:  首先,它可以把一个Dll载入内存空间,并执行DLL初始化函数。  第二,LoadLibrary在Kernel32.dll中,Kernel32.dll的加载基址在每个进程中都是一样的所以,LoadLibrary在每个进程的地址就是一样的。
    注意事项:在DLL中,载入窗口命令中,必须用“对话框方式”!比如,载入(窗口1,,真)


消息钩子注入
    消息钩子注入原理是利用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文件

注册表注入
    注册表注入原理是利用在Windows 系统中,当注册表以下键值中存在有DLL文件路径时,会跟随EXE文件的启动加载这个DLL文件路径中的DLL文件。当如果遇到有多个DLL文件时,需要用逗号或者空格隔开多个DLL文件的路径。
    本注入器是采用的是Appinit_Dlls注册表项, 此注册表项下的每个dll文件都会随着User32.dll的加载而同样加载到进程中
    本注入器写入注册表的全路径为:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
    注意事项:注册表注入会对每一个进程都有效,针对某个进程的话需要在DLL中进行编写

EIP注入
    挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器码和数据拷贝到里面去,然后修改目标进程EIP使其强行跳转到我们拷贝进去的相关机器码位置,执行相关,然后跳转回来。
    修改EID实现代码注入的汇编思路如下 
    SuspendThread(); 
    get eip 
    push ad 
    push fd 
    push AddressDllFilePath 
    call LoadLibrary 
    pop fd 
    pop ad 
    jmp eip   //这个是为了让程序执行完我们的代码之后自己跳转回去继续执行 
    ResumeThread(); 

APC注入(应用层)
    APC注入的原理是利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,其具体流程如下:
    1)当EXE里某个线程执行到SleepEx()或者WaitForSingleObjectEx()时,系统就会产生一个软中断(或者是Messagebox弹窗的时候不点OK的时候也能注入)。
    2)当线程再次被唤醒时,此线程会首先执行APC队列中的被注册的函数。
    3)利用QueueUserAPC()这个API可以在软中断时向线程的APC队列插入一个函数指针,如果我们插入的是Loadlibrary()执行函数的话,就能达到注入DLL的目的。
    注意事项:目标程序必须有执行SleepEx()或者WaitForSingleObjectEx(),否则DLL不会加载

内存注入
     内存注入和远程线程注入差不多,不同地方在于这里将DLL整个文件都写进了目标进程内存中,采用了汇编指令加载DLL,调用DLL函数,但是核心还是使用VirtualAllocEx、WriteProcessMemory、CreateRemoteThread 
     注意事项:自己调试了几次DLL需要黑月编译


IAT永久注入
    通过添加一个新节注入,改变PE文件的大小,将原有的导入表复制到新节中,并添加自己的导入表描述符,最后将数据目录项中指向的导入表的入口指向新节,生成新的文件
    注意事项:无法注入一些加壳的文件和自校验文件,会生成一个新的文件,DLL需要黑月编译
内存永久注入
    高配版IAT永久注入,不仅添加了区段,把DLL也写进了内存,采用汇编装载DLL
    注意事项:无法注入一些加壳的文件和自校验文件,会生成一个新的文件

猜你喜欢

转载自blog.csdn.net/l198738655/article/details/79321174