DLL注入方法:在进程创建阶段加载输入表中的DLL(静态输入);通过调用LoadLibrary(Ex)主动加载(动态加载);由于系统机制的要求们必须加载系统预设的一些基础服务模块。
1、静态修改PE输入表法
准备工作:dll,导出Msg()函数
修改对象:notepad.exe
修改目标:启动NOTEPAD.EXE时能够加载MsgDLL.DLL
MsgDLL.dll的主要功能是在Dllmain中弹出一个MessageBox展示自己的存在
备份原IID结构
粘贴到10400
在原IID区域结构构造新IID的OriginalFirstThunk、Name和FirstThunk结构
DLLName RawOffset=0x6A14 RVA = 0x6a14 - 0x400 + 0x1000 = 0x7614
IMPORT_BY_NAME RawOffset = 0x6A20 RVA = 0X7620
手动修改数据
填充新输入表项的IID结构
修正PE文件头的信息
进程创建期修改PE输入表法:原理与静态修改PE输入表法完全相同
(1)以挂起方式创建目标进程
(2)获取目标进程中的PE结构信息
(3)获取原IID大小,增加一项,搜索可用节空隙。
(4)构造新的IID及与其相关的OriginalFirstThunk、Name、FirstThunk结构
(5)修正PE映像头
(6)更新目标进程的内容
(7)继续运行主线程
改变程序运行流程使其主动加载目标DLL:
程序运行的容器是进程,整整活动的是其中的线程。改变程序流程的通常做法是改变线程EIP、创建新线程或者修改目标进程内的某些代码,使其执行LoadLibrary(Ex)来加载目标DLL
方法:1、CreateRemoteThread法;2、RtlCreateUserThread法;3、QueueUserApc/NtQueueAPCThread APC注入法等等
利用系统机制加载DLL:1、SETwindowHookEx消息钩子注入:消息钩子是Window提供的一种消息过滤和预处理机制,可以通过API SetWindowHookEx安装一个用于过滤特定类型消息的钩子函数。
HOOK
WINAPI
SetWindowsHookExW(
__in int idHook, //HookType
__in HOOKPROC lpfn, //HOOkProcedure 钩子程序
__in_opt HINSTANCE hmod, //
__in DWORD dwThreadId); //挂钩线程的ID
最后一个参数指定了要Hook的线程ID。如果这个参数设置为0,那么安装的就是一个全局消息钩子,要求HOOKPROC必须在DLL中,并且要指定第三个参数hMod。