Dll注入技术之驱动注入

发布于 2020-06-02  64 次阅读


0x0 技术简介
实现环境

系统:Windows 7 64bit

工具:VS+WDK

驱动注入

我这里驱动注入的技术是:采用驱动向目标进程插入APC执行LdrLoadDll函数加载Dll模块。

可以注入64位Dll到64位进程或注入32位Dll到32位进程。暂时没有实现跨位数。

APC(异步过程调用)是一种内核机制,它提供了一种在特定线程上下文中执行定制例程的方法。一旦被分派,APC将异步转移目标线程的执行流以调用所选的例程。

apc可分为两大类:

1. 内核模式`APCs: APC`例程最终将执行内核模式代码。这些被进一步分为特殊的内核模式的apc和普通的内核模式的apc,但是我们不会详细讨论 [它们之间的细微差别]

2. 用户模式`APCs: APC`例程最终将执行用户模式代码。只有当拥有apc的线程变得可警报时,才会发出用户模式apc。这是我们将在本节其余部分中讨论的APC类型。

apc主要用于系统级组件,用于执行各种任务(例如促进I/O完成),但也可以用于DLL注入目的。从安全产品的角度来看,内核空间的APC注入提供了一种方便可靠的方法,可以确保特定模块被加载到(几乎)整个系统所需的每个进程中。

0x1 主要思路
R3:加载驱动,打开驱动,控制驱动(发送需要注入的进程Pid和要注入的Dll模块路径给驱动)。

R0:1,通过进程Pid获取EProcess并判断是否为64位进程。

        2,附加到目标进程获取其ntdll.dll模块基址及模块中LdrLoadDll函数地址

        3,初始化ShellCode,赋值其中的参数和函数地址,申请空间拷贝代码

        4,执行ShellCode,查找可用线程插入执行代码APC,插入警醒线程APC

0x2 主要代码
整体流程部分

初始化ShellCode

查找执行线程

插入APC代码部分

0x3 实现效果

注入x64dll到X64进程

注入x86dll到wow64进程

下载地址:http://down.8u18.com/down/inject.rar