应用层DLL注入

介绍

DLL(Dynamic-link library)注入,即,把一个DLL文件放到目标进程中。
当一个进程的程序不是自己编写的,而我们又需要该程序加载指定的dll,以便进行某些操作,这是就需要dll注入。当一个进程加载dll时,dll被映射到该进程的地址空间。dll注入的最大目的,进入目标进程的地址空间,这样就可以操作目标进程中的对象了。

在应用层中简单的跨进程DLL注入方法:
1、CreateRemoteThread + LoadLibraryA/W
2、SetWindowsHook/SetWindowsHookEx
3、QueueUserAPC + LoadLibraryA

注入方式

1.远程线程注入步骤(假设事先写好DLL文件)

OpenProcess() //获取已知进程的句柄;

VirtualAllocEx() //在进程中申请空间;

WriteProcessMemory() //向进程中写入东西;

GetProcAddress() (LoadLibrary())//取得函数在DLL中的地址,动态加载DLL;前为UNICODE版本

CreateRemoteThread() //在目标进程中创建远程线程;

CloseHandle() //关闭句柄;

2.利用hook注入。

Hook技术是基于windows消息机制的。如果 给某个消息安装了Hook,当该消息发生时,会先调用Hook函数。

1.进程B中的一个线程准备向一个窗口post一条消息。

2.系统检查该线程是否已经安装了WH_GETMESSAGE Hook,检查结果为确实安装了这种Hook。

3.进程B准备调用Hook函数,即GetMsgProc函数。但是该函数在MyDll.dll中,而MyDll.dll并没有加载到进程B。

  1. 进程B加载MyDll.dll。

5.调用GetMsgProc函数

3.APC(异步过程调用)

注入的原理是利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,其具体流程如下:

1)当EXE里某个线程执行到SleepEx()或者WaitForSingleObjectEx()时,系统就会产生一个软中断。

2)当线程再次被唤醒时,此线程会首先执行APC队列中的被注册的函数。

3)利用QueueUserAPC()这个API可以在软中断时向线程的APC队列插入一个函数指针,如果我们插入的是Loadlibrary()执行函数的话,就能达到注入DLL的目的。

参考文献

牛客网
【技术分享】10种常见的进程注入技术的总结

你可能感兴趣的:(应用层DLL注入)