Windows-注入技术学习总结
目录
1.远程线程注入
2.消息钩子注入
3.输入法注入
4.注册表注入
5.EIP注入
6.APC注入
7.SSDT替换
总结
1.远程线程注入
原理:利用CreateRemoteThread()函数,将自己创建的的线程加载到远程空间进程里去执行。
CreateRemoteThread function (processthreadsapi.h) - Win32 apps | Microsoft Docs
注入流程:
- OpenProcess 打开被注入进程句柄。
- VirtualAllocEx 在注入进程里申请空间,用于存放注入插件路径的字符串,不然在注入进程里找不到参数。
- WriteProcessMemory 往申请的空间里写路径字符串
- CreateRemoteThread 注入进程,函数第四个参数写LoadLibrary,因为LoadLibrary函数地址在Kernel32.dll中,在每个进程中映射地址都一样,所以不需要再去注入进程查找该函数地址了。第五个参数写路径字符串地址,为LoadLibrary函数的参数。
- WaitForSingleObject 等待线程执行完成返回,VirtualFreeEx释放申请空间。
2.消息钩子注入
原理:钩子是windows中消息处理一个机制,通过安装各种钩子,来监视系统里的消息传递,以及在这些消息到达目标窗口程序之前处理它们。用SetWindowsHookEx()这个API,可以设置的自己钩子,将DLL注入到该进程。只适用带窗口界面的进程注入。
SetWindowsHookExA function (winuser.h) - Win32 apps | Microsoft Docs
注入流程:
- 编写DLL,显式导出需要执行的注入函数。
- 先自己加载该DLL,LoadLibrary获取模块地址,GetProcAddress获取导出函数地址。
- 根据待注入的进程id,GetThreadId来获取其当前线程的id。
- SetWindowsHookEx,第一个参数一般是WH_GETMESSAGE,第二个参数是导出函数地址,第三个是模块地址,第四个是线程id。
Anti消息钩子注入:
SetWindowsHookEx在内核中大概流程是:
NtUserCallNextHookEx->UserCallNextHookEx->co_HOOK_CallHookNext->co_IntCallHookProc->KeUserModeCallback
KeUserModeCallback从R0返回R3,执行用户的回调函数。可以hook该函数,过滤掉回调函数;可以hook NtUserSetWindowsHookEx函数防止键盘钩子。
3.输入法注入
原理:切换输入法时,windows会把当前输入法所需要的ime文件装载到当前进程中,这个Ime文件类似Dll,微软提供了开发框架。在这个Ime中可以加载注入插件,从而注入目的进程。缺点很多:目的进程需要加载输入法场景,大概率是需要UI界面;注入时机不确定;很容易被检测出来
注入流程:
- 在IMESetPubString里设置Loadlibrary。
- 输入法安装到系统里,把ime文件写入目录C:\WINDOWS\system32后调用ImmInstallIME,参数一写ime文件路径,参数二写输入法名称。
4.注册表注入
原理:Windows 系统中以下注册表键值,会在EXE文件的启动加载,注入时间等同User32.dll。如果有多个DLL文件,需要用逗号或者空格隔开多个DLL文件的路径。
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
注入流程:
1.写注册表
5.EIP注入
原理:挂起目的进程,开启空间,把二进制机器指令和数据写进去,修改EIP强行跳转到注入指令处,然后跳转回来。缺点是,兼容性不好。
注入流程:
- OpenProcess获取目的进程句柄,OpenThread获取线程id,SuspendThread挂起线程
- GetThreadContext获取线程上下文,主要是为了获取eip
- VirtualAllocEx分配空间,WriteProcessMemory写注入后需要执行的机器码,路径数据
- 修改线程上下文eip,SetThreadContext 设置线程上下文
- ResumeThread恢复线程
6.APC注入
原理:利用线程被唤醒时,APC中的注册函数会被执行的机制,以此去执行我们的DLL加载代码,进而完成DLL注入。APC全称是,异步过程调用;APC队列是线程状态改变时待执行的函数队列。缺点是:待执行线程必须进入警惕状态,类似调用SleepEx()或者WaitForSingleObjectEx()。操作系统有两个APC,user和系统的,分别可对应应用层,内核注入。
QueueUserAPC function (processthreadsapi.h) - Win32 apps | Microsoft Docs
注入流程:
- OpenProcess打开注入进程,VirtualAllocEx申请存放插件路径字符串的空间,WriteProcessMemory写进去。
- OpenThread或者其他方式获取线程句柄。
- QueueUserAPC插入APC函数,参数1填LoadLibrary函数指针,参数2填线程句柄,参数3填注册函数参数,也就是字符串路径。
7.SSDT替换
原理:内核中有两个系统服务描述符表,用于处理应用层下发的各个API操作请求,比如当执行ReadFile时候,通过Nt*系列函数,最终根据需要调用的服务号,在SSDT表中查找服务函数地址,从而跳转调用。修改SSDT表,让函数执行之前先执行注入代码,再调用原函数,那么即可实现注入。
SSDT数组内维护了大量服务函数,可以用多个角度切入注入。例如hook NtCreateThread函数这类,在创建进程时机所需要调用的服务函数。
因为自己对这方面不熟悉,故不能写出注入流程。
总结
以上注入方法是目前主流通用手段,既然能行得通,那么也会有对应的防注入的手段,与其知道方法,不如知道本质。
注入无非是想尽各种办法让进程执行被注入代码,或通过加载dll,或通过直接修改PE文件,或直接写入机器码等等,最根本的还是需要熟悉windows创建进程,进程初始化等流程机制,思考如何可以为我所用,方能自己摸索出别出心裁的注入方法。
Windows-注入技术学习总结相关推荐
- redistemplate注入为null_Windows DLL 注入技术
Windows DLL 注入技术 本文主要介绍四种常见的 Windows DLL 注入技术. 分别为全局钩子.远线程钩子.突破 SESSION 0 隔离的远线程注入和 APC 注入. 全局钩子注入 W ...
- Oracle学习总结(6)—— SQL注入技术
不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一. SQL注入基 ...
- 《撸代码 学习 IOC注入技术1 》—— 布局注入 与 控件注入
不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨-https://blog.csdn.net/cjm2484836553/article/details/104539874 [源代码下载地 ...
- 《撸代码学习 IOC注入技术2》—— 事件注入
不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨-https://blog.csdn.net/cjm2484836553/article/details/104581855 源代码下载地址 ...
- [web安全]深入理解反射式dll注入技术
一.前言 dll注入技术是让某个进程主动加载指定的dll的技术.恶意软件为了提高隐蔽性,通常会使用dll注入技术将自身的恶意代码以dll的形式注入高可信进程. 常规的dll注入技术使用LoadLibr ...
- 网络技术学习资料分享
UNIX系统管理高手].Wiley.-.Beginning.Shell.Scripting http://book.hh010.com/thread-2193-1-5.html Transaction ...
- 干货:18 张思维导图,后端技术学习路线长这样!
来源 |后端技术学堂(ID:lemon10240) 作者 | LemonCoder 头图 | CSDN下载自视觉中国 思来想去,学习方向和路线很重要.比起具体的技术细节,可复制的经验.清晰的学习路线, ...
- SpringBoot整合第三方技术学习笔记(自用)
SpringBoot整合第三方技术学习笔记 搬运黑马视频配套笔记 KF-4.数据层解决方案 KF-4-1.SQL 回忆一下之前做SSMP整合的时候数据层解决方案涉及到了哪些技术?MySQL数据库与My ...
- 21 张思维导图,你想知道我肝了半个月的「后端技术学习路线」长啥样么?
话不多说,直接上刚画完的「后端技术学习路线」思维导图框架: 图中的每一个节点都可以点开,我都做了细分,在后面章节逐个展开介绍. 计算机基础 不管是后端开发还是前端开发,说到底我们所有的软件开发都是在计 ...
- 21 张思维导图,柠檬哥肝了半个月的「后端技术学习路线」长啥样?
珍惜当下,因为每一天都不平凡.1915 年的今天,爱因斯坦向普鲁士科学院展示广义相对论的方程式. 大家好,我是柠檬. 柠檬哥最近在思考公众号的内容方向问题,如何让公众号持续提供有价值的内容给大家,之所 ...
最新文章
- pythondjango讲解_Django框架全面讲解
- Hinton再挖新坑:改进胶囊网络,融合Transformer神经场等研究
- MapReduce的统计和排序功能
- post请求参数格式
- 批量清除为Button注册的事件
- delphi控件切图界面闪烁_一份最详尽全面的UI界面切图命名规范
- 易懂分布式 | Kademlia算法
- Google 要进军游戏行业了?!
- 如何将ffmpeg在windows编译和使用
- mysql 行转列 列转行
- android view分析工具,Android 性能分析工具之TraceView
- python,爬取图片
- 计算机管理员账户停用,win10系统提示“你的账户已被停用,请向系统管理员咨询”如何解决...
- springboot 多模块使用Jib插件发布镜像
- 关于数据分析师的4点思考
- 【工具分享】如何识别手机里偷数据的那些软件(适用于安卓平台)
- 合成大西瓜(西瓜雨版)及改版思路(保姆式教程)
- 带你了解面向对象的设计原则
- TensorFlow报AttributeError: module tensorflow has no attribute io
- 使用 HammerDB 对 Citus 和 Postgres 进行 Benchmark,每分钟200万新订单处理测试(官方博客)...
热门文章
- HTML5商业解决方案公司网页模板
- tf.cancat() 详解 —》理解为主
- 计算机咋么开远程桌面权限,怎么将win10系统电脑中的允许远程桌面访问权限打开...
- 2020 年百度之星·程序设计大赛 - 初赛一题解
- 学生机房管理服务器系统设计,中小学机房管理系统设计与实现
- 负数在计算机中到底是如何表示的
- 应用PCA算法提取特征脸,重构人脸图像,并利用SVM算法进行人脸识别
- Address Sanitizer 用法
- 风力发电机 有功功率 无功功率 理论有功功率
- 1833 雪糕的最大数量