加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#/ C:启动一个应用程序并处理它对系统的I / O调用

发布时间:2020-12-15 23:49:57 所属栏目:百科 来源:网络整理
导读:我需要启动其他应用程序并处理它的I / O操作.因此,当它尝试读/写文件时,我需要捕获它并更改路径. 它应该是可能的,因为有些程序可以做这样的事情(比如ModOrganizer). 问题是我不想使用文件系统过滤器驱动程序.我不想让我的应用程序的用户安装这样的东西. 正如
我需要启动其他应用程序并处理它的I / O操作.因此,当它尝试读/写文件时,我需要捕获它并更改路径.

它应该是可能的,因为有些程序可以做这样的事情(比如ModOrganizer).

问题是我不想使用文件系统过滤器驱动程序.我不想让我的应用程序的用户安装这样的东西.

正如我所看到的,ModOrganizer通过几种方式完成这项工作,包括proxy.dll,hooks e.t.c.不知何故,它实现了几乎任何程序都可以从它启动的目标,ModOrganizer将处理对特定目录的请求.

github上有源代码,但我真的不明白.这就是为什么我在这里问这个.

同样,ModOrganizer实现了这一点,而无需反编译每个可能的程序,以了解注入的位置.它不使用系统过滤器.

(请解释你的弊端.否则我将来如何改进我的问题?)

解决方法

您需要的是修改进程中每个模块的导入表.

看起来你提到的程序使用类似于这里描述的技术:https://www.codeproject.com/Articles/2082/API-hooking-revealed在“使用CreateRemoteThread()API函数注入DLL”部分.但是它不是使用远程线程,而是强制主程序线程完成它的工作(参见函数injectDLL):

https://github.com/TanninOne/modorganizer/blob/4a582e524dd012ed9d5fdb4f9c97aab22c8dac85/src/spawn.cpp

请注意,有一个标志CREATE_SUSPENDED传递给CreateProcess函数 – 这有助于它在主线程能够执行任何操作之前存根所有函数.

它不是修补导入表,而是插入用汇编编写的存根(参见函数injectDLL):

https://github.com/TanninOne/modorganizer/blob/4a582e524dd012ed9d5fdb4f9c97aab22c8dac85/src/shared/inject.cpp

Jeffrey Richter在他的“Windows via C/C++”一书中有一个关于如何修补导入表的好例子.您可以尝试查找和阅读完整的书籍,也可以在此查看代码:https://github.com/lattesir/WindowsViaCPP/blob/master/22-LastMsgBoxInfoLib/APIHook.cpp

但是你的程序可能看起来像任何反病毒软件的病毒.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读