Windows 将标准的 C 文件结构注入到正在运行的进程中
Windows Inject a standard C FILE Structure into A Running Process
我有一个奇怪的想法,想知道这是否可能。以下是我的计划的粗略概述。
场景:应用程序在启动时加载并解释配置文件中的值。我想通过配置文件模糊应用程序,而不重写配置文件。
注意:配置文件稍后在程序中关闭,打开配置文件的函数用于打开其他各种文件,所以我不想钩住这个函数。虽然这里使用了SetKMode()
和SetProcPermissions()
,但一般适用于 Windows 的答案与Windows CE答案一样有用。
计划:
- 通过 SetKMode(( 和 SetProcPermissions 获得此进程的调试权限,并通过 DebugActiveProcess(( 附加调试器
- 加载文件的函数返回后中断
- 创建文件的临时修改版本并在父进程中打开它
- 使用
VirtualAlloc()
为被调试对象中的 FILE 结构分配空间 - 使用
WriteProcessMemory()
将临时文件的整个 FILE 结构传输到被调试者 - 将调试对象加载的配置文件的指针交换为临时文件的指针
- 允许被调试者运行文件
- 在被调试者关闭文件之前,将原始配置文件的旧指针复制回新指针,以便它关闭正确的文件
调试器是否能够读取该文件?父级是否能够在文件完成后关闭文件?
编辑:
在经过一些 RE 之后,每次尝试关闭文件时将旧指针传输回被调试者似乎不再是一个好的解决方案,因此除了我当前的问题之外,我还有一个额外的问题:被调试者是否能够关闭调试器打开的文件?这会是个问题吗?原始文件未正确关闭的事实会成为问题吗?
编辑:
抱歉,我是一个假人,忘记了如果我正在经历注入所有这些的麻烦,我可以注入一个新的文件名并在调用 fopen 之前很久交换指针。
假设整个文件被加载到内存中然后解析,我会挂接任何将文件数据加载到内存中的函数,使用条件来检查文件名,这样你只有在正确的文件加载到内存后才执行你的代码通过检查文件名。 然后,我将通过修改内存中的文件数据来执行模糊测试,然后在解析文件 dat 之前将执行返回到目标进程。 通过这种方式,您不会触及任何文件权限,只会触及内存。
为了自动化它,创建一个"加载器",它执行目标进程,注入,执行你的钩子,然后检查崩溃或其他不需要的行为。
相关文章:
- 如何使用 c++ libboost 运行进程并获取其输出?
- 如何运行进程,然后在它退出时收到通知
- 在特定监视器上运行进程
- 使用Runtime.exec从Java运行进程-退出代码139
- 使用C++将CPU专用于在1个核心上运行进程
- 如何找到运行进程的物理套接字 ID/编号
- 如果从文件中读取,则无法按文件名运行进程
- 如何判断进程的用户令牌是否与运行进程的登录会话令牌相同?
- 在 C 语言的后台运行进程
- 在C++中获取带有 Windows 7 API 的运行进程
- r语言 - 如何直接在数据库服务器上运行C++进程以避免传输数据集
- 在虚拟文件系统中运行进程
- 检查是否已运行进程和通信的副本
- c++,总是运行进程或调用可执行文件
- 运行进程命令行
- 如何使用编程方法拦截linux上运行进程中调用的系统调用
- 使用c++获取当前运行进程中的X显示变量
- 获取当前运行进程的网络适配器
- 如何将ShellExecuteEx作为在父级退出后关闭的子级运行进程
- 在多核 (Linux) 中运行进程的命令行参数是什么