目录

1.远程线程注入

2.消息钩子注入

3.输入法注入

4.注册表注入

5.EIP注入

6.APC注入

7.SSDT替换

总结


1.远程线程注入

原理:利用CreateRemoteThread()函数,将自己创建的的线程加载到远程空间进程里去执行。

CreateRemoteThread function (processthreadsapi.h) - Win32 apps | Microsoft Docs

注入流程:

  1. OpenProcess 打开被注入进程句柄。
  2. VirtualAllocEx 在注入进程里申请空间,用于存放注入插件路径的字符串,不然在注入进程里找不到参数。
  3. WriteProcessMemory 往申请的空间里写路径字符串
  4. CreateRemoteThread 注入进程,函数第四个参数写LoadLibrary,因为LoadLibrary函数地址在Kernel32.dll中,在每个进程中映射地址都一样,所以不需要再去注入进程查找该函数地址了。第五个参数写路径字符串地址,为LoadLibrary函数的参数。
  5. WaitForSingleObject 等待线程执行完成返回,VirtualFreeEx释放申请空间。

2.消息钩子注入

原理:钩子是windows中消息处理一个机制,通过安装各种钩子,来监视系统里的消息传递,以及在这些消息到达目标窗口程序之前处理它们。用SetWindowsHookEx()这个API,可以设置的自己钩子,将DLL注入到该进程。只适用带窗口界面的进程注入。

SetWindowsHookExA function (winuser.h) - Win32 apps | Microsoft Docs

注入流程:

  1. 编写DLL,显式导出需要执行的注入函数。
  2. 先自己加载该DLL,LoadLibrary获取模块地址,GetProcAddress获取导出函数地址。
  3. 根据待注入的进程id,GetThreadId来获取其当前线程的id。
  4. 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界面;注入时机不确定;很容易被检测出来

注入流程:

  1. 在IMESetPubString里设置Loadlibrary。
  2. 输入法安装到系统里,把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强行跳转到注入指令处,然后跳转回来。缺点是,兼容性不好。

注入流程:

  1. OpenProcess获取目的进程句柄,OpenThread获取线程id,SuspendThread挂起线程
  2. GetThreadContext获取线程上下文,主要是为了获取eip
  3. VirtualAllocEx分配空间,WriteProcessMemory写注入后需要执行的机器码,路径数据
  4. 修改线程上下文eip,SetThreadContext 设置线程上下文
  5. ResumeThread恢复线程

6.APC注入

原理:利用线程被唤醒时,APC中的注册函数会被执行的机制,以此去执行我们的DLL加载代码,进而完成DLL注入。APC全称是,异步过程调用;APC队列是线程状态改变时待执行的函数队列。缺点是:待执行线程必须进入警惕状态,类似调用SleepEx()或者WaitForSingleObjectEx()。操作系统有两个APC,user和系统的,分别可对应应用层,内核注入。

QueueUserAPC function (processthreadsapi.h) - Win32 apps | Microsoft Docs

注入流程:

  1. OpenProcess打开注入进程,VirtualAllocEx申请存放插件路径字符串的空间,WriteProcessMemory写进去。
  2. OpenThread或者其他方式获取线程句柄。
  3. QueueUserAPC插入APC函数,参数1填LoadLibrary函数指针,参数2填线程句柄,参数3填注册函数参数,也就是字符串路径。

7.SSDT替换

原理:内核中有两个系统服务描述符表,用于处理应用层下发的各个API操作请求,比如当执行ReadFile时候,通过Nt*系列函数,最终根据需要调用的服务号,在SSDT表中查找服务函数地址,从而跳转调用。修改SSDT表,让函数执行之前先执行注入代码,再调用原函数,那么即可实现注入。

SSDT数组内维护了大量服务函数,可以用多个角度切入注入。例如hook NtCreateThread函数这类,在创建进程时机所需要调用的服务函数。

因为自己对这方面不熟悉,故不能写出注入流程。

总结

以上注入方法是目前主流通用手段,既然能行得通,那么也会有对应的防注入的手段,与其知道方法,不如知道本质。

注入无非是想尽各种办法让进程执行被注入代码,或通过加载dll,或通过直接修改PE文件,或直接写入机器码等等,最根本的还是需要熟悉windows创建进程,进程初始化等流程机制,思考如何可以为我所用,方能自己摸索出别出心裁的注入方法。

Windows-注入技术学习总结相关推荐

  1. redistemplate注入为null_Windows DLL 注入技术

    Windows DLL 注入技术 本文主要介绍四种常见的 Windows DLL 注入技术. 分别为全局钩子.远线程钩子.突破 SESSION 0 隔离的远线程注入和 APC 注入. 全局钩子注入 W ...

  2. Oracle学习总结(6)—— SQL注入技术

    不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一. SQL注入基 ...

  3. 《撸代码 学习 IOC注入技术1 》—— 布局注入 与 控件注入

    不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨-https://blog.csdn.net/cjm2484836553/article/details/104539874 [源代码下载地 ...

  4. 《撸代码学习 IOC注入技术2》—— 事件注入

    不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨-https://blog.csdn.net/cjm2484836553/article/details/104581855 源代码下载地址 ...

  5. [web安全]深入理解反射式dll注入技术

    一.前言 dll注入技术是让某个进程主动加载指定的dll的技术.恶意软件为了提高隐蔽性,通常会使用dll注入技术将自身的恶意代码以dll的形式注入高可信进程. 常规的dll注入技术使用LoadLibr ...

  6. 网络技术学习资料分享

    UNIX系统管理高手].Wiley.-.Beginning.Shell.Scripting http://book.hh010.com/thread-2193-1-5.html Transaction ...

  7. 干货:18 张思维导图,后端技术学习路线长这样!

    来源 |后端技术学堂(ID:lemon10240) 作者 | LemonCoder 头图 | CSDN下载自视觉中国 思来想去,学习方向和路线很重要.比起具体的技术细节,可复制的经验.清晰的学习路线, ...

  8. SpringBoot整合第三方技术学习笔记(自用)

    SpringBoot整合第三方技术学习笔记 搬运黑马视频配套笔记 KF-4.数据层解决方案 KF-4-1.SQL 回忆一下之前做SSMP整合的时候数据层解决方案涉及到了哪些技术?MySQL数据库与My ...

  9. 21 张思维导图,你想知道我肝了半个月的「后端技术学习路线」长啥样么?

    话不多说,直接上刚画完的「后端技术学习路线」思维导图框架: 图中的每一个节点都可以点开,我都做了细分,在后面章节逐个展开介绍. 计算机基础 不管是后端开发还是前端开发,说到底我们所有的软件开发都是在计 ...

  10. 21 张思维导图,柠檬哥肝了半个月的「后端技术学习路线」长啥样?

    珍惜当下,因为每一天都不平凡.1915 年的今天,爱因斯坦向普鲁士科学院展示广义相对论的方程式. 大家好,我是柠檬. 柠檬哥最近在思考公众号的内容方向问题,如何让公众号持续提供有价值的内容给大家,之所 ...

最新文章

  1. pythondjango讲解_Django框架全面讲解
  2. Hinton再挖新坑:改进胶囊网络,融合Transformer神经场等研究
  3. MapReduce的统计和排序功能
  4. post请求参数格式
  5. 批量清除为Button注册的事件
  6. delphi控件切图界面闪烁_一份最详尽全面的UI界面切图命名规范
  7. 易懂分布式 | Kademlia算法
  8. Google 要进军游戏行业了?!
  9. 如何将ffmpeg在windows编译和使用
  10. mysql 行转列 列转行
  11. android view分析工具,Android 性能分析工具之TraceView
  12. python,爬取图片
  13. 计算机管理员账户停用,win10系统提示“你的账户已被停用,请向系统管理员咨询”如何解决...
  14. springboot 多模块使用Jib插件发布镜像
  15. 关于数据分析师的4点思考
  16. 【工具分享】如何识别手机里偷数据的那些软件(适用于安卓平台)
  17. 合成大西瓜(西瓜雨版)及改版思路(保姆式教程)
  18. 带你了解面向对象的设计原则
  19. TensorFlow报AttributeError: module tensorflow has no attribute io
  20. 使用 HammerDB 对 Citus 和 Postgres 进行 Benchmark,每分钟200万新订单处理测试(官方博客)...

热门文章

  1. HTML5商业解决方案公司网页模板
  2. tf.cancat() 详解 —》理解为主
  3. 计算机咋么开远程桌面权限,怎么将win10系统电脑中的允许远程桌面访问权限打开...
  4. 2020 年百度之星·程序设计大赛 - 初赛一题解
  5. 学生机房管理服务器系统设计,中小学机房管理系统设计与实现
  6. 负数在计算机中到底是如何表示的
  7. 应用PCA算法提取特征脸,重构人脸图像,并利用SVM算法进行人脸识别
  8. Address Sanitizer 用法
  9. 风力发电机 有功功率 无功功率 理论有功功率
  10. 1833 雪糕的最大数量