Windows注入与拦截(2) -- 使用注册表方式完成DLL注入

Windows核心编程 专栏收录该内容
38 篇文章 7 订阅

一. 如何做?

如题,通过注册表的方式来实现DLL注入,我们只需要针对特定的注册表项进行修改即可,有一点需要注意的是:如果被注入的进程是64位进程,则注入的DLL也需要是64位的,同理,注入32位的进程也需要是32位的DLL。

另外,根据被注入进程的位数(32或64)不同,注册表的位置也不同。

1.1 注入64位系统上的32位进程

1) 将被注入的DLL名称填入到AppInit_DLLs注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs

AppInit_DLLs中的文件名通过逗号或空格来分割,所以我们在文件名中要避免使用空格。另外AppInit_DLLs中的第一个文件可以包含路径,而后面的文件的路径则将被忽略。出于这个原因,我们最好将DLL文件放到Windows的系统目录中。

2) 并将LoadAppInit_DLLs注册表项的值修改为1

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs

1.2 注入64位进程

“注入到64位进程”和“注入64位系统上的32位进程”的步骤类似,区别在于:

1). 注册表位置不一样,注入64位进程的注册表分别位于:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs

2). 被注入DLL需要是64位版本。

二. 为什么可以这么做?

当系统的User32.dll被加载到一个新的进程时,会收到DLL_PROCESS_ATTACH通知,User32.dll在该通知处理过程中读取AppInit_DLLs注册表值,并调用LoadLibrary来加载该项中指定的每个dll。

三. 这么做有什么弊端?

从上面一节我们知道被注入的DLL是通过User32.dll加载到目标进程中去的,这也就要求被注入的目标进程必须使用了User32.dll,基于GUI的程序都会使用这个DLL文件,而命令行程序一般不会加载User32.dll,所以无法通过这种方式被注入。

系统上所有使用了User32.dll的程序都会被注入,很多时候这也并不是我们想要的。

  • 3
    点赞
  • 1
    评论
  • 7
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

前言 1 引言 1 1.1 什么是操作系统? 3 1.1.1 所有延长机器的作业系统 4 1.1.2 作为一个资源管理器的作业系统 6 1.2 操作系统的历史 7 1.2.1 第一代(1945年至1955年)真空管 7 1.22第二代(1955年至1965年)晶体管和批处理系统 8 1.2.3 第三代(1965年至1980年)的集成电路 10 1.2 4 第四代(1980年至今)个人电脑 15 1.3计算机硬件检查 19 l.3.1处理器 19 1.3.2内存 23 1.3.3 磁盘 26 1.3.4 胶带 27 1.3.5 I/O设备 27 (I/O即输入输出) 1.3.6总线 30 1 3.7启动计算机 33 1.4 操作系统动物园 33 1.4.1大型机操作系统 34 1.4.2 服务器操作系统34 1.4.3多处理器的操作系统 34 1.4.4个人电脑操作系统 35 1.4.5掌上电脑操作系统 35 1.4.6 嵌入式操作系统. 35 1.4.7 传感器节点的操作系统 36 1.4.8 实时操作系统 36 1.4.9 智能卡操作系统 37 1.5操作系统的概念 37 1.5.1 流程 38 1.5.2 地址空间 40 1.5.3文件 40 1.5.4输入/输出 43 1.5.5保护 44 1.5.6 壳牌 44 1.5.7系统发育个体发育重演 46 1.6 系统调用 49 1.6.1 流程管理系统调用 52 1.6.2文件管理系统调用 56 1.6.3 目录管理系统调用 57 1.6.4杂项系统调用 58 1.6.5 在WindowsWin32 API 59 1.7 操作系统结构 62 1.7.1单片系统 62 1.7.2分层系统 63 1.7.3微内核 64 1.7.4 客户 - 服务器模型 67 1.7.5 虚拟机 67 1.7.6 出的内核 71 1.8 根据C的WORLD 72 1.8.1 C语言 72 1.8.2头文件 73 1.8.3大的编程项目 74 1.8.4运行时模型75 1.9操作系统上的研究 76 1.10 本书的其余部分的概要 77 1.11 公制单位 78 1.12 概要 79 2进程和线程 2.1工序83 2.1.1 过程模型 84 2.1.2 进程创建 86 2.1.3 进程终止 88 2.1.4 流程层次结构 89 2.1.5 进程国家 90 2.1.6实施流程 91 2.1.7多多建模的建模 93 22 螺纹 95 22.1线程使用情况 95 222古典的线程模型 100 22.3POSIX线程 104 22.4在用户空间中实现的线程 106 22.5在内核中实现的线程 109 22.6混合实现 110 22.7调度激活 111 22.8 弹出式线程 112 22.9 使单线程代码中使用多线程技术 114 2.3 进程间通信 117 2.3.1静态条件 117 2.3.2关键区域 119 2.3.3忙等待的互斥 120 2.3.4 睡眠和唤醒 125 2.3.5 信号灯 128 2.3.6互斥 130 2.3.7显示器 134 2.3.8消息传递 140 2.3.9 壁垒 144 2.4 调度 145 2.4.1调度 145 2.4.2 批处理系统的调度 152 2.4.3 调度互动系统 154 2.4.4 调度实时系统 160 2.4.5政策机制 161 2.4.6 线程调度 162 2.5经典的IPC问题 163 2.5.1 哲学家就餐问题 164 2.5.2读者和作者的问题 167 2.6 进程和线程的研究 168 2.7概要169 习题95   第3章 存储管理99   3.1 无存储器抽象99   3.2 一种存储器抽象:地址空间101   3.2.1 地址空间的概念101   3.2.2 交换技术103   3.2.3 空闲内存管理104   3.3 虚拟内存106   3.3.1 分页107   3.3.2 页表108   3.3.3 加速分页过程109   3.3.4 针对大内存的页表111   3.4 页面置换算法113   3.4.1 最优页面置换算法114   3.4.2 最近未使用页面置换算法114   3.4.3 先进先出页面置换算法115   3.4.4 第二次机会页面置换算法115   3.4.5 时钟页面置换算法116   3.4.6 最近最少使用页面置换算法116   3.4.7 用软件模拟lru 117   3.4.8 工作集
©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值