Windows 将标准的 C 文件结构注入到正在运行的进程中

Windows Inject a standard C FILE Structure into A Running Process

本文关键字:运行 进程 注入 标准 文件结构 Windows      更新时间:2023-10-16

我有一个奇怪的想法,想知道这是否可能。以下是我的计划的粗略概述。

场景:应用程序在启动时加载并解释配置文件中的值。我想通过配置文件模糊应用程序,而不重写配置文件。

注意:配置文件稍后在程序中关闭,打开配置文件的函数用于打开其他各种文件,所以我不想钩住这个函数。虽然这里使用了SetKMode()SetProcPermissions(),但一般适用于 Windows 的答案与Windows CE答案一样有用。

计划:

  1. 通过 SetKMode(( 和 SetProcPermissions 获得此进程的调试权限,并通过 DebugActiveProcess(( 附加调试器
  2. 加载文件的函数返回后中断
  3. 创建文件的临时修改版本并在父进程中打开它
  4. 使用VirtualAlloc()为被调试对象中的 FILE 结构分配空间
  5. 使用WriteProcessMemory()将临时文件的整个 FILE 结构传输到被调试者
  6. 将调试对象加载的配置文件的指针交换为临时文件的指针
  7. 允许被调试者运行文件
  8. 在被调试者关闭文件之前,将原始配置文件的旧指针复制回新指针,以便它关闭正确的文件

调试器是否能够读取该文件?父级是否能够在文件完成后关闭文件?

编辑:

在经过一些 RE 之后,每次尝试关闭文件时将旧指针传输回被调试者似乎不再是一个好的解决方案,因此除了我当前的问题之外,我还有一个额外的问题:被调试者是否能够关闭调试器打开的文件?这会是个问题吗?原始文件未正确关闭的事实会成为问题吗?

编辑:

抱歉,我是一个假人,忘记了如果我正在经历注入所有这些的麻烦,我可以注入一个新的文件名并在调用 fopen 之前很久交换指针。

假设整个文件被加载到内存中然后解析,我会挂接任何将文件数据加载到内存中的函数,使用条件来检查文件名,这样你只有在正确的文件加载到内存后才执行你的代码通过检查文件名。 然后,我将通过修改内存中的文件数据来执行模糊测试,然后在解析文件 dat 之前将执行返回到目标进程。 通过这种方式,您不会触及任何文件权限,只会触及内存。

为了自动化它,创建一个"加载器",它执行目标进程,注入,执行你的钩子,然后检查崩溃或其他不需要的行为。