Windows Ring3层注入——注入相关知识(零)

ps:这个是本人整理的注入相关知识,根据一下几本书《Windows核心编程》、《加密与解密》、《游戏外挂攻防技术》以及网络上相关博客(具体忘了都参考什么了)纯自己理解消化后手打整理的知识,因为本身是个水平有限的刚入门C++程序员,所以写出来的也是比较适合入门的人阅读,转载注明出处就可以。

定义

注入就是迫使第三方进程非自愿加载某个模块(DLL)。

需要注入的几种情况

1.想要从另一个进程创建窗口派生子类窗口
2.需要一些手段来辅助调试
3.想给另一个进程安装挂钩

注入时机

静态输入

定义:通过干预输入表处理过程加载DLL。在进程创建阶段加载输入表中的DLL。

  • 进程创建阶段会处理并加载输入表中的DLL模块。当一个进程被创建后,不会直接到EXE本身的入口处执行,首先被执行的是ntdll.dll中的LdrInitializeThunk函数。
  • LdrInitializeThunk会调用LdrpInitializeProcess对进程的一些必要内容进行初始化,LdrpInitializeProcess会继续调用LdrpWalkImportDescriptor对输入表进行处理,即加载输入表中的模块,并填充应用程序的IAT(Import Address Table 导入地址表)
  • 所以,只要在输入表被处理之前进行干预,为输入表增加一个项目,使其只想要加载的目标DLL,或者替换原输入表中的DLL并对调用进行转发,那么新进程的主线程在输入表初始化阶段就会主动加载目标DLL。

动态加载

定义:改变程序运行流程使其主动加载目标DLL。调用LoadLibrary(Ex)主动加载。

  • 程序运行的容器是进程,真正活动的是其中的线程。因此, 改变程序流程的通常做法是改变线程EIP、创建新线程或修改目标进程内的某些代码,使其执行**LoadLibrary(Ex)**来加载目标DLL。

加载服务模块

定义:利用系统机制加载DLL。由于系统机制的要求,必须加载系统预设的一些基础服务模块。

  • 操作系统提供的某些系统机制是依赖一些基础服务模块(可能是操作系统本身提供的,也可能是第三方提供的)实现的,当进程主动或被动触发了这些系统机制时,就会在适当的时候主动加载这些模块。因此,可以定制一个符合该规范的DLL,将其注册为系统服务模块,这样就可以**“合法”**地进入目标进程了。

注入方法

概括说明注入方式原理

通过干预输入表处理过程加载目标DLL

在这里插入图片描述

改变程序运行流程主动加载DLL

在这里插入图片描述

利用系统机制加载DLL

在这里插入图片描述

几种常见的注入方式

静态注入:

1.修改PE输入表(导入表)注入

动态加载:

2.CreateRemoteThread 远程线程注入
3.QueueUserApc/NtQueueAPCThread APC注入
4.CreateProcess劫持进程创建注入

加载服务模块:

5.使用注册表注入
6.输入法注入
7.Windows挂钩注入
8.LSP劫持注入(SPI网络过滤器注入)

发布了9 篇原创文章 · 获赞 0 · 访问量 107
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览