原理 | 进程注入 - 远程线程注入

admin 2022年10月8日11:56:55评论46 views字数 1563阅读5分12秒阅读模式
最近研究进程注入,也是边学边记录。以下是个人记录
1
前置知识
  • 提起远程线程注入,大家有可能会理解为我在广西,你在北京,我注入你的线程。其实并不是这个样子。

  • 系统在每次运行一个exe 程序的时候系统会默认分配一个4G 的地址空间,给这个exe 程序。

  • 然而,我们的系统有16G、32G等等。那岂不是只能运行几个exe 程序了?

  • 其实我们在给exe 程序分配地址空间的时候,是一个虚拟地址空间。

  • 通过映射的方式,映射到我们的真实机上。

  • 每个exe 程序之间是不能互相访问的。比如QQ 和 微信不能互相访问。如果可以访问,就会非常不安全。


2
注入初识


DLL文件,是动态链接库,我们执行程序的时候最后调用的都是这个DLL文件。

  每一个进程中都会有多个线程。远程线程注入,简单来说,就是指在一个指定的进程中,开辟一个线程的内存地址空间,然后用来执行加载我们的DLL文件,或者是我们想做的事情。


3
注入原理
  • 我们的程序在执行的过程中,都会创建一个进程、线程,然后通过进程线程加载DLL文件,从而执行我们想要的功能。

  • 在我们的系统程序中, 有两个DLL程序Kernel32.dlluser32.dll在大部分程序上都会调用的DLL

  • 其中Kernel32.dll 文件中有一个LoadLibraryW函数。这个函数是用来应用程序调用动态链接库的函数。

  • 为什么使用这两个函数呢?

  • 因为同一个DLL,在不同的进程中,不一定被映射(加载)到同一个内存地址下

    • 有的加载的是同一个DLL文件的A函数

    • 有的加载的是同一个DLL文件的B函数

  • 但是Kernel32.dlluser32.dll 是例外的,他们总是被映射到进程的内存首选地址。

  • 因此在所有使用这个DLL文件的进程中,这两个DLL的内存地址是相同的

4
注入思路


思路一:

  • 获取一个目标线程的句柄

  • 在我们的进程中得到LoadLibrary 函数的地址,因为加载时这个DLL文件的内存地址相同,所以这个地址也是目标进程中的地址

  • 传入我们想要注入进去的DLL的地址

  • 开启一个线程(开辟一块内存地址空间)

  • 让这个线程,在我们想要注入的目标进程中工作,这个线程的作用就是使用LoadLibrary 这个函数加载我们想注入的DLL


思路二:

  • 提升进程的权限:因为我们要将程序注入到别的进程中,所有我们的权限一定要够,比如说我们的系统有system用户和administrator用户等

  • 查看我们获得到的特权信息是什么

  • 调节进程权限

  • 查找窗口,就是获得指定程序的进程,可以理解为就是获取窗口句柄

  • 根据窗口句柄获取进程的PID(Process ID)

  • 根据PID获取进程句柄。由于PID只是一个进程的序号,不够强大,所以我们需要获取一个更加强大的控制进程的东西,叫做进程句柄。这个进程句柄可以控制exe的关闭、暂停、执行等等行为。

  • 根据进程句柄在指定的进程中申请一块内存地址空间。拿到进程句柄后,就可以对exe进行操作了。由于我们想要学习的进程注入,所以演示进程注入

  • DLL的路径写入到远程进程中

  • 在远程进程中开辟一个线程


5
项目实战


好了,经过上面的学习,我们对远程线程注入有了一个基本的了解。虽然有了了解,但是还是对远程线程注入的过程、原理以及使用有一些模糊,不太理解。(个人学习过程中的感悟)

我们需要配合一些远程线程注入的实战来进一步了解


项目一:

要求:编写一个程序,在程序中,指定注入的DLL的文件的路径以及被注入进程的信息。当我们点击注入后,就可以将DLL程序注入到进程中。

成果展示:

原理 | 进程注入 - 远程线程注入


项目二:

要求:编写一个工具,我们可以自己选择路径,可以自己选择要注入的进程。点击注入可以完成注入

成果展示:

原理 | 进程注入 - 远程线程注入


完整项目步骤


远程线程注入文件分享


文中所涉及完整代码以及详细笔记。关注本公众号,回复8003领取。

原理 | 进程注入 - 远程线程注入


本文参考一些哔哩哔哩上的顿开教育的里奇老师的视频。

原文始发于微信公众号(猫因的安全):原理 | 进程注入 - 远程线程注入

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月8日11:56:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   原理 | 进程注入 - 远程线程注入http://cn-sec.com/archives/1303258.html

发表评论

匿名网友 填写信息